Agent-native game engine · C# · pre-alpha 0.0.1
The world is code.Agents build it.You watch every tick.
Your coding agent reads and changes the game's code while it runs, through skills and MCP. You watch, edit and take over in the Studio. Everything is optional, like Arch Linux: simple, balanced or complete.
git clone https://github.com/Obed0101/ukiyoConcept world · a GT on Chapman's Peak Drive · car CC-BY 4.0 Khronos, sky and road CC0 Poly Haven
Agents plug in. You watch.
Thirty seconds of what ukiyo is for: agents wired into a running game, reading and changing every system and proving it, while a person watches from the Studio and takes over when they want.
A whole engine, taught to your agent.
Every system an engine has, as source your agent can read and change while the game runs. It connects through skills and MCP: each skill teaches it one system, and checks prove the result with code tests and visual tests on real frames.
Rendering
skill lights, camera passes, lit meshes
proof same pixels on Metal, WebGL2, CPU
Sprites & assets
skill textures, sheets, glTF import
proof CPU-rendered frame captures
Physics
skill 2D bodies, sensors, raycasts
proof headless runs, fixed ticks
Audio
skill mixer, WAV, seeded synth
proof WAV recorded headless
Input
skill keyboard, pointer, recording
proof scripted input replays
Game UI
skill HUDs, menus, pixel font
proof snapshots and frame captures
Also in the tree: cameras and sequences, particles, NPC behaviour, scenes and patches, save and rewind. 21 skills, one per area.
Take only what you need.
Like Arch Linux: install what you need and nothing else. Start simple, balanced or complete, both for the Studio on your screen and for the skills your agent loads. Layouts, themes and panels are plain files you can rewrite.
- studio
- The frame, its numbers and the entities, with selection shared with your agent.
- skills
- Physics, particles, NPCs, game UI, audio, cameras, assets and hosts on top of the core.
An open library, not a store.
Models, materials, sounds, templates and whole game systems, published as packages by the community. Every one of them free and open source, with its license and provenance checked, and skills and tests so your agent can use it.

Chapman's Drive
CC0polyhaven/chapmans-driveHDRI · sky and road

Clean Asphalt
CC0polyhaven/clean-asphaltPBR material

Car Concept
CC-BY 4.0khronos/car-conceptvehicle · glTF
public float Grip(in Contact c) => Pacejka.Lateral(c.Slip, Stiffness); // skill: tuning.md · 18 testsTire Model
MITukiyo/physics-tiresconcept
Speedometer.Bind(car.Speed); Gear.Bind(car.Gearbox); // 6 golden frames
HUD Kit
MITukiyo/hud-kitconcept
public float Aperture = 1.8f; public bool FreezeTick = true; // visual tests: 6
Photo Mode
MITukiyo/photo-modeconcept
$ ukiyo add polyhaven/chapmans-drive · the package command arrives with the open library; the assets above are real and credited.
This one is not a render.
The car above is where ukiyo is going. This is where it is today: the 0.0.1 web export running on this page. C# computes every tick in WebAssembly and three.js only draws what it is told. Pause it, step it, or call ukiyo.step(60) from the console.
starting .NET WebAssembly · ~5 MB, once
Scroll is time.
The simulation is a pure function of its ticks. Scroll and you move through captures from three real targets of the same Program.cs. They agree on every captured tick.
Δ 0…
One line to run it anywhere.
This is the entire entry point, and every host compiles this exact file. The game owns its state and describes what to draw; renderers only consume that description.
Every run states what it ran: the hash of the source it was built from, the renderer, the backend and the device. Nothing an agent reports has to be taken on faith.
return await GameApplication.RunAsync(new CubeGame(), PlatformBootstrap.Create(args));public void Update(in TickInfo tick){ _rotation = ExpectedRotation(tick.Tick + 1);} public void Extract(FrameBuilder frame){ frame.Camera = FrameBuilder.LookAt(new Vector3(0f, 0.6f, 3.2f), …); frame.Draw(_mesh, _material, Pose.ToMatrix());}[ukiyo] target=desktop game=RotatingCube CubeGame.cs=9846313B6743 Program.cs=138C7579F527[ukiyo] renderer=WgpuRenderer backend=Metal device="Apple M4 Pro" profile=G0Unlit capture=True
Each step closes with evidence.
Read the docs- shipped · 0.0.1
One program, two real renderers
Metal and WebGL2 from the same C#, a single native binary and a static web export.
- done · on main
Runtime slice
Input, sprites, physics, game UI, audio, the dev bridge, MCP and skills. Same simulation and pixels on every target.
- in the tree
Authoring and the agent CLI
Scenes and prefabs as code plus data, validated patches, asset import and the CLI agents plug into.
- in the tree
Studio and presets
A project hub, an editor onto the running game, layouts and themes as files, run and reload at the same tick.
- later
Evidence and first games
Visual conformance across renderers, replay-based regression suites and the first real games built with agents.
- later
The open library
Packages for assets and whole systems, published by the community, free and open source.
Order and scope can still change.
Run it yourself.
Apple Silicon Mac with the .NET 10 SDK, Xcode command line tools, cmake, ninja and bun. Or skip the build and download the 0.0.1 binaries.
Get the code and pinned natives
git clone https://github.com/Obed0101/ukiyo && cd ukiyo && scripts/fetch-native.shRun it with no window and no GPU
dotnet run --project samples/RotatingCube/Hosts/HeadlessRun it natively on wgpu → Metal
dotnet run --project samples/RotatingCube/Hosts/DesktopOpen the Studio onto it
bun studio/src/server.tsDrive it the way an agent does
bun tools/mcp/src/cli.ts status