Sprixe — build your own Neo Geo game in your browser
A Neo Geo dev environment in a browser tab. Draw the sprites, paint the levels, wire the events. Hit build, and a real ROM comes out — then play it without leaving the page.
.neo & MAME exportMagic Castle
A finished Neo Geo game, drawn and wired in Sprixe, compiled to a real ROM. It plays in the browser — no install, no account, no emulator to set up.
From blank page to real hardware
Every step lives in the same tab. Nothing to install, nothing to chain by hand, no export/import dance between five command-line tools.
Draw
Sprites, animations, tilesets, maps. The sprite editor works in native Neo Geo palettes, so what you see is what the hardware will show — not an approximation you discover at compile time. Import from Aseprite, export back to it.
Assemble
Reusable actors: give one a set of animations and a behaviour, then drop it anywhere. Levels span several scenes wired together with exits, spawns and checkpoints. Triggers connect the two — when this happens, do that.
Compile
One action. Your project becomes C, the C becomes a 68000 binary, your sprites become C-ROM, your samples become V-ROM, your palettes become palettes. Out comes a ROM.
Play, then ship
The built ROM boots in the integrated emulator, in the same window you just edited it in. Rebuild and it reloads live; save states let you jump back to the fight you're tuning instead of replaying the level. When it's done, export a .neo — the NeoSD flashcart format — or a MAME romset.
Rules on an event sheet. Real C underneath.
Most retro toolchains make you pick a camp: a visual maker that hides the machine, or a devkit that hands you a compiler and wishes you luck.
Scenes, actors, triggers
Place your hero, give it a set of animations, then wire the rules on an event sheet: on this input, do that; on this timer, spawn that; when this animation ends, fire the next one. Levels span several scenes joined by exits, spawns and checkpoints.
It emits ngdevkit C, not a black box
What the event sheet produces is the C you’d have written yourself against the ngdevkit headers — the same code a hand-written homebrew would compile. There is also a Monaco editor in there, with those headers, for people who’d rather write the C directly.
Art you can't draw? Generate it.
Sprixe talks to PixelLab, a pixel-art generation service. Describe an object — a barrel, a vending machine, a neon sign — pick the angle it should be drawn from, and it lands in your Objects panel. Describe a terrain and you get a whole tileset back, side-view or top-down, corner-classified so the map editor paints it as a self-connecting terrain rather than tile by tile. Characters you've already made in PixelLab come in whole: their animations map onto an actor's roles, directions included.
Generated art isn't a separate class of asset. It goes through the exact same import path as your own pixels — quantized to a Neo Geo 16-color palette, pen 0 transparent, packed into C-ROM — so you can open it in the sprite editor and paint over it like anything else.
PixelLab is a separate service with its own account. You bring your own API key: it's stored in your browser and sent only to PixelLab, so the account and what it costs stay yours. Everything else in Sprixe works without one.
A whole music editor. Driving the real chip.
Sprixe composes on the YM2610 itself — what you hear while you write is the chip that will play it, not a soft-synth approximation you discover at compile time.
A piano roll, not a tracker grid.
The full 88 keys, a Play/Stop transport, a playhead that follows the song, a stereo peak meter beside the grid. Drag a note and you hear the new pitch as you drag.
One track, one instrument.
Tracks are grouped by voice family — FM, SSG, drums, ADPCM-B — and each one owns its instrument. Load an FM preset from the bundled General MIDI bank, then shape it live in the patch editor: on a YM2610 the envelope is the timbre.
Drums on the same time axis.
A drum strip stays pinned under the piano roll, sharing its columns — melody and beat get written together. A built-in analog drum kit drops in with one click; at build time your drum tracks fold onto the chip's six real ADPCM-A voices.
Or bring what you already have.
Import a Furnace .fur song or a Standard MIDI file — tracks become playable lanes, GM percussion mapped onto the kit. Hand it a WAV or an MP3 and it's encoded to ADPCM-B and looped by the hardware itself: a streamed soundtrack in a real Neo Geo ROM, within what the cartridge's sample budget can hold. WAV sound effects are normalised to mono 18519 Hz and encoded to ADPCM-A at build time.
No second toolchain. No converter to install, no CLI to chain.
The emulator
The emulator running your game isn't a library wrapped in a UI — it's a Neo Geo written in TypeScript and WebAssembly — CPUs, video and buses implemented from the datasheets. It's the second one we've written: the first, Sprixe CPS1 Lab, is a full Capcom CPS1 system in the browser — 68000 and Z80 interpreters, a cycle-accurate YM2151, a WebGL2 renderer, running the arcade classics at around 22% CPU.
If a tool is going to tell you what the hardware does, it had better know.
Looking for the CPS1 Lab?
It now lives at its own address. CPS1 Lab does the opposite of Sprixe: it opens arcade games that already exist — play them, capture sprites and backgrounds as you go, edit them in Aseprite, and export a MAME-compatible ROM.
→ Visit CPS1 Lab Live
Questions people actually ask
Do I need to own a Neo Geo?
No. Everything — editing, building, playing — happens in the browser, and the built ROM boots in an emulator on the page. A NeoSD flashcart and an AES or MVS board only matter the day you want the game on the real machine.
Do I need to know how to code?
No. You place actors and wire the rules on an event sheet: on this input do that, on this timer spawn that, when this animation ends fire the next one. What the event sheet produces is C against the ngdevkit headers, which you never have to write — though the build console will show you the compiler’s output when something fails to compile.
Is it free?
Yes, and there is no sign-up. The one thing that costs money is optional: generating art through PixelLab uses your own account and your own API key.
Does the ROM run on real hardware?
That is the point of it. Export a .neo for a NeoSD flashcart, or a MAME
romset for emulators. The two containers explained.
How is this different from ngdevkit?
It is built on ngdevkit rather than beside it. ngdevkit is the open-source SDK — a 68000 compiler, hardware headers, a sound driver. Sprixe is an editor that emits code for it and a build server that runs it. More on ngdevkit.
Can I bring my own pixel art?
Yes. Import from Aseprite, and export back to it. Art is quantised to a Neo Geo 16-colour palette with pen 0 transparent on the way in — why fifteen colours, not sixteen.
Sprixe is open.
No sign-up, no invite, nothing to install. Open a project and build.