The engine,
in your browser.
Crucible is a game engine written from scratch in Rust — its own Vulkan, Metal and D3D12 backends, its own Wayland, X11, AppKit and Win32 windowing over hand-written FFI, its own ECS, renderer, physics, netcode and audio.
A fourth graphics backend is what makes this page possible: a hand-written
wasm → JS command stream straight onto the browser's
WebGPU, with no wgpu and no wasm-bindgen anywhere
in the build. The same engine and the same sample code, compiled to
wasm32-unknown-unknown. Not a port — the same source.
demos
Every sample that can run in a browser is published here.
From the moment it exists, so the browser target cannot quietly rot: a broken wasm build is a broken CI, and a broken CI blocks the merge. Each build is loaded in a real headless browser that opens a WebGPU device, presses a key where there is one to press, and reads the canvas back before it ships — all of them, on a software rasteriser, with every wall-clock budget scaled by the beat that machine actually manages, so a slower frame stretches the run rather than failing it. Shard is the heaviest scene here by a long way, and its page says what it costs.
-
S1 · playable
Breakout
The first playable sample. Client and server over an in-memory transport, swept-sphere collision, an orthographic camera, an engine-rendered HUD, spatial audio on every bounce, and a high score kept in the Origin Private File System.
-
S1B · playable
Flappy
One button, deliberately smaller than breakout. It exists to ask whether the engine can host a second game without the first one's shape having leaked into the API — a treadmill of procedurally spawned pipes rather than a static grid, and difficulty as a function of time.
-
S2 · playable
Asteroids
The churn sample: bullets four a second, one rock becoming two, a wave at a time. It exists to hammer generational ids, deferred destruction and pool slot recycling — and it drives the second physics slice, with segment CCD, broadphase overlap queries and the first forces.
-
S3 · playable
Horde
The scale sample: a thousand agents that each steer, each ask the broadphase what they are standing next to, and each get drawn. It exists to be measured — the whole crowd is one draw call, and the numbers for one thousand through ten thousand are written down beside the code.
-
P4 · not a game
HUD
The UI system's living fixture, and the one demo here you do not play: bars, an ability row, a wave banner and a damage ticker, built from draw-list rectangles, outlines and text spans and driven end to end by a scripted ticker on the server. It takes no input at all.
-
S4B · not a game
Lantern
The lighting acceptance fixture: one room with a window, two metals lit by reflection alone, a wall the sun bounces off and a lamp that orbits it. A browser has no ray query, so this page is the rasterised lighting path — shadow maps, occlusion, screen-space reflections and probes — with nothing else it could take.
-
S4D · not a game
Alcove
The ambient-occlusion acceptance fixture: one court of nothing but occlusion geometry — a recess, a cantilevered stair, boxes on a floor, a slot the sun runs down and a sphere against a wall — flat and untextured, because texture detail is what hides the artefact. Every knob is on the page, and raising the seam draws two gathers in one frame with the panel pricing each.
-
S4D · not a game
Sundial
The shadow acceptance fixture: one open plaza under a sun on a scripted clock — a colonnade whose shadow crosses a cascade boundary, a plinth resting on the ground, and counters hanging at graded heights so contact hardening is visible. Stop the sun, walk it to a grazing pose and raise the seam: two filters over the same geometry in one frame.
-
S4F · not a game
Tide
The water acceptance fixture: a gallery of four scenes, of which the courtyard is built — a tiled pool with a deep end and a shallow end, its still surface refracting, absorbing and reflecting the frame behind it. Switch the scene, the camera, and what the water is made of: a clear pool, a lake, a pond or a swamp.
-
S4C · not a game
Quarry
The geometry acceptance fixture: one face receding 180 metres, cut into a cluster hierarchy, with the camera walking down it and back for ever so detail can be watched arriving. A browser has no mesh stage, so this page is the per-batch indirect path — one level for the whole face at a time, which is the honest picture of what it gets.
-
S4 · not a game
Viewer
The asset pipeline as a usable tool: it opens a glTF document, frames the camera on whatever it turns out to contain, and lists what the file holds and what the conversion could not bring in. Natively you point it at your own file; here you drag one onto the canvas, and the same loader opens it.
-
S4E · not a game
Options
A settings screen with nothing behind it. Six audio buses on faders the keyboard and the pointer both move, saved to the origin's own storage and read back the next time the tab opens — which is the half that is easy to claim and easy to get wrong, because a browser has no filesystem and a screen that silently forgets looks exactly like one that worked.
-
S4 · physics
Orbit
A rocket off a pad, through an atmosphere that fights it, into an orbit it holds. Burning, the flight is integrated; coasting in vacuum, it is solved — so timewarp costs no more at ×1000 than at ×1 and drifts by nothing, and opening the throttle drops it back to ×1 because the solution stops being true.
-
post-MVP · character
Puppet
A capsule the size of a person, swept through a blockout and sliding along what it hits. One mound is gentle enough to walk up and the other is not; one step is inside the height it will climb and the other is not. It walks, too: the pose is a blend keyed on the speed the controller actually achieved rather than on the key you are holding, so walking into a wall stands the character still instead of skating it.
-
post-MVP · vfx
Sparks
Particles pooled in ranges, each one's randomness a hash of the effect's seed and its own index rather than a draw from a shared stream — so a fixed seed replays the frame. One effect on the stage is deliberately greedy: it asks for a hundred thousand a second, is allowed sixty-four, and the panel counts every refusal.
-
post-MVP · first person
Breach
A firing range seen from inside the shooter's head: one hitscan pistol, three lanes, and a line you cannot walk past. It drives the same character controller puppet does, from a camera that shares none of puppet's code — which is the whole claim, since the physics gained nothing for either of them. Next door is a practice map where three bots walk patrols, lose sight of you behind a pillar, and shoot back.
-
post-MVP · action RPG
Shard
A torch-lit interior walked from an isometric camera pulled in closer than the genre allows, so the lighting stays legible. Flickering point lights with shadows, a spot across the doorposts, screen-space occlusion and reflections, and an ambient term baked by casting rays into the same walls you bump into. Put the torches out and see how much of it was real.
-
S4 · services
Bracket
Matchmaking, rating and a ladder, with no game attached. Every player has a true skill the matchmaker never sees, and the plot is how far the ratings are from it — falling, then slowly climbing again, because pairing people against their nearest equal is in tension with rating them correctly.
-
flagship · tower defense
Towers
Creeps walk a lane, towers shoot them, kills pay for the next tower. Build nothing and the table overruns you, because it releases more creeps than the team has lives. Every build and every wave is a command a server validates and can refuse — solo here is the co-op build with one player in it, and the panel counts the refusals.
requirements
A browser with WebGPU.
Chrome or Edge 113 and later, Safari 18 and later, or Firefox with WebGPU
enabled. On Linux you may need to launch Chrome with
--enable-unsafe-webgpu, depending on the driver.
SharedArrayBuffer
requires, so this deployment is built without it rather than pretending
otherwise. The audio feed is designed around that constraint instead of
working around it.
source
All of it is readable.
The engine, the samples, the shim that boots them here, and the roadmap — which records what is missing and what is broken alongside what works.