
Play it, then take it. This is the engine our browser games are built from, and it is one HTML file you can open in a text editor.
Running in the frame is the kit with its demo inside: SHEEPDOG. Pen six sheep before the clock runs out. Move the dog with WASD, the arrows or your left thumb. Drag to chalk a fence the sheep will not cross. Tap to lob a lure they run to. The demo is meant to be thrown away. The engine underneath is the thing.
What it is
One HTML file, no build step, no dependencies, no asset files, no network calls. Canvas and Web Audio. Every sound is synthesized and every picture is drawn in code. It runs offline, off a thumb drive, with no server and nothing to install. View source and you are looking at all of it.
What you get in it
- A fixed-step game loop with smooth rendering between steps, seeded randomness, hit-stop and screen shake.
- Title, play, pause and game over already wired, plus a step-by-step tutorial helper.
- Keyboard, mouse, touch and gamepad input, including floating twin thumb-sticks drawn on the canvas.
- Synthesized sound effects and a music scheduler with in-key melody generation. Mute and music toggles cut instantly and persist.
- Particles, floating score text, a bitmap face and two embedded fonts, so nothing falls back to the system font.
- Saves that survive: rotating backups, autosave when the tab hides, and save codes a player can copy, mail and paste back.
- A daily challenge seed, an input tape for replays, a follow camera with a minimap, and welcome-back credit for idle games.
- Built for phones: text that clears 12 px on the device, 44 px touch targets, and a "turn your phone" prompt instead of a letterboxed strip.
- Reduced motion is honoured throughout.
Games built with it
- Vibe Tanks: fast twin-stick tank duels, and the game the engine was first pulled out of.
- Disco Tanks: a 1v1 tank duel on a 1970s dance floor. Vinyl bullets, a disco-ball missile, six songs.
- Headless: throw your own burning head. Ride back for it in the fog.
- Cattleship: hidden herds across the road, one feed bucket at a time. A moo is a cow.
- Curb Hound: bomb the hill in a soapbox cart, win the race, then outrun the spiked-collar bulldog.
- Lunker: two minutes on the lake. Read the water, cast at the shadows, fight the big ones.
- Tadka: temper the spice, feed the counter, keep the lights on till close.
- Drench: lob water balloons over the sandcastle and soak the other guy to 100%. Best of 3.
- Chalk: draw the routes, set the reads, out-coach a defense that remembers what you ran.
- TenKay: one-click push-your-luck dice. Bank or roll, beat your rival to 10,000.
- Coin Rush '89: drop a coin to drop coins.
Why it is shaped this way
The engine is written to be worked in by an AI, and most of its design follows from that.
One file, because an agent can hold the whole game in context and patch it by exact string match. A project split across a bundler and a node_modules tree means the agent is editing blind.
A locked engine and an open game, because ten games should not drift into ten engines. The engine sections are fingerprinted, and a small tool pulls engine fixes into a game while leaving the game's own code alone.
A headless test, because an agent has to be able to fail and find out on its own. The file ships with a Node smoke test that drives the game and asserts on it with nobody watching, down to measuring the smallest text on screen at phone sizes.
Zero external requests, because that is what lets the whole thing render from file:// in a headless browser. An agent that cannot look at the picture is only reasoning about code, and warp, clipping and bad centring are invisible in code and obvious in an image.
Hard won corrections baked in, because an agent starting from a blank file re-derives none of them and ships all of them. The iOS audio unlock that survives the trap where a pointerdown grants no activation. Canvas context-loss recovery, because memory pressure otherwise freezes a game to a still image. Save keys kept apart per game, because every HTML game on itch shares one browser storage. A music scheduler built on setTimeout rather than setInterval, because a throttled background interval piles up and bursts queued notes when the tab comes back.
And one correction that is specifically about being machine written. A grep of ten of our games once found eight of them drawing every character in system-ui, -apple-system, Segoe UI, Roboto. That string is the Tailwind and shadcn default and one of the most shipped strings in machine written frontend. Players cannot name it. They recognise it anyway. The kit ships its own faces so a build can stop leaking it.
How it was built
Claude as the coding agent, with a human directing the work and reviewing it before anything ships. AI assisted, human directed and edited. Nothing here is claimed as hand made.
If you use it, I would like to know what you built.