Make games in the browser with blocks or code: a faster Scratch with PICO-8-style carts.
- Blocks and text are the same program. Drag blocks or type Lua-flavoured code; both views edit one program and stay in sync as you work. Every block has exactly one text spelling.
- Fast. Scripts compile to JavaScript and run as green threads at a fixed 60 ticks a second, so 1,000 moving sprites hold 60 fps (measured on an M2 laptop).
- Carts. A whole game (code, pixel and vector art, a tile map, sfxr sound effects, tracker music and extensions) is one
.stitch.pngfile whose picture is the game's cover. - Safe to run. Games run in a sandboxed frame. Web requests go through a permission prompt, and API keys you set stay in your browser, never in a cart.
- Share anywhere. Export a single HTML file, an installable offline web app, or a desktop app project.
- Familiar. Scratch's stage, coordinates and blocks, with each deliberate difference written down.
You need Node 22+ and pnpm 10 (corepack enable).
pnpm install
pnpm devOpen http://localhost:5173. The editor starts with a sample game: press Run and use the arrow keys. Cart → Samples has bigger ones, with comments throughout for reading: Stitch Dungeon, a roguelike with procedurally generated floors, enemies as clones and a pen-drawn HUD and minimap; Patch Hop, a three-level platformer with tile collisions and stomping; Needle Storm, a bullet hell against a three-phase boss; and Thimble Quest, a top-down adventure whose map scrolls room to room. Run, Pause and Stop are also ⌘↩, ⌘P and ⌘. (Ctrl on Windows and Linux), even while the game has the keyboard. Scratch Parity checks Scratch 3 blocks one by one and prints PASS or FAIL for each. Then follow a tutorial:
- Your first game, for Scratch users: blocks first.
- Your first game, for PICO-8 users: text first, with a tile map.
Have a Scratch project? Open the .sb3 with Cart → Open file… (importing Scratch projects).
pnpm build writes a static site to packages/editor/dist, which any static host can serve (hosting notes).
| Language reference | Every keyword, block and builtin, text and blocks side by side |
| Importing Scratch projects | Opening .sb3 files: what comes across and what doesn't |
| Exporting and sharing | HTML, web app and desktop exports; CORS and secrets |
| Network, secrets and CORS | How HTTP from games works, and the threat model |
| Writing an extension | Add your own blocks |
| Cart format | The file format, versions and PNG container |
| Architecture | How the packages fit together |
| Departures from Scratch | Every deliberate difference, with reasons |
| Roadmap | Phases, open decisions and known gaps |
| Contributing | Setup, checks and conventions |
| API docs | pnpm docs:api, then open docs/api/index.html |
| Command | |
|---|---|
pnpm dev |
The editor with hot reload |
pnpm build |
Production build of the editor |
pnpm test |
Node tests, including the docs and design checks |
pnpm test:browser |
WebGL pixel tests and Blockly round-trips in headless Chromium |
pnpm typecheck · pnpm lint |
TypeScript and ESLint |
pnpm check:licenses · pnpm check:size |
License allow-list; exported player size budget |
pnpm gen |
Regenerate the parser after a grammar change |
pnpm docs:blocks · pnpm docs:api |
Render docs block pictures; build API docs |
The benchmark is at /bench.html?n=1000. The desktop editor is in desktop/.
Phases 1–9 of the roadmap are built: language, blocks, assets and carts, audio, APIs and extensions, export, visual design, documentation, and block parity with Scratch 3 (clones, pen, sensing, dictionaries and more). The desktop builds haven't been compiled yet; known gaps lists what's left.
Dependencies that ship are MIT, Apache-2.0, BSD, ISC or 0BSD licensed, apart from the Inter and JetBrains Mono fonts (SIL OFL 1.1).