[{"data":1,"prerenderedAt":117},["ShallowReactive",2],{"blog-en-why-we-built-simengine":3},{"post":4,"related":63,"path":111,"pair":112,"otherIndex":115,"index":116},{"slug":5,"lang":6,"translation":7,"weight":8,"title":9,"description":10,"seoTitle":11,"seoDescription":12,"date":13,"updated":-1,"cover":14,"coverAlt":15,"tags":16,"accent":22,"game":-1,"vrApp":23,"readingMinutes":24,"pieces":25,"toc":37,"faq":62},"why-we-built-simengine","en","pourquoi-nous-avons-cree-simengine",0,"Why we built SimEngine, an AI-first game engine","Why we started a new game engine instead of staying on Godot: astronomical scale, AAA ambition, and coding agents as first-class users. The decisions, the advantages and the honest trade-offs.","Why We Built SimEngine, a Game Engine for LLMs","Our space game outgrew Godot and our coding agents outgrew editors. Why we built SimEngine, the game engine for LLMs: decisions, trade-offs, status.","2026-10-29","/media/simengine/og-simengine.jpg","The SimEngine folded-S logo and wordmark with the line \"The AI-first game engine\" on a graphite background.",[17,18,19,20,21],"SimEngine","AI game engine","Engineering","Claude Code","Codex","#ff6b1a","birds",8,[26,29,31,33,35],{"kind":27,"html":28},"html","\u003Cp>SimEngine is a new, general-purpose C++20 / Vulkan 1.3 game engine, meant to be open sourced under \u003Cstrong>MIT OR Apache-2.0\u003C/strong>. It exists because our space game needed more scale, visual quality and measurable performance than we could comfortably get from a general-purpose engine. More importantly, it is an \u003Ca href=\"/ai-game-engine\">AI-first game engine\u003C/a>: its primary users are coding agents, so its interface is made of typed commands, deterministic headless runs, captures and verifiable results, not a visual editor.\u003C/p>\n\u003Cblockquote>\n\u003Cp>SimEngine is pre-release: 13 of 56 implementation tasks are done and you cannot ship a game with it yet. This article explains why it exists, what it already does and what it costs. The shipped runtime never calls an LLM: AI drives development, not your game.\u003C/p>\n\u003C/blockquote>\n\u003Ch2 id=\"it-started-with-a-space-game\">It started with a space game\u003C/h2>\n\u003Cp>\u003Ca href=\"/spacesim-pale-blue-dot\">SpaceSim: Pale Blue Dot\u003C/a>, our real-scale space game, was built on Godot. Godot is a wonderful engine. It is open, light, has a text scene format and a community we love, and it got us surprisingly far.\u003C/p>\n\u003Cp>But the game we actually wanted sits somewhere between \u003Cem>Kerbal Space Program\u003C/em> and \u003Cem>SpaceEngine\u003C/em>. You build a vehicle at a detailed planetary base, launch through the atmosphere, reach orbit, transfer to a second body and land on detailed terrain. The same universe, vehicle and simulation state have to survive the whole journey, and a save and reload in the middle.\u003C/p>\n\u003Cfigure>\u003Cimg src=\"/games/pale-blue-dot/hangar-builder.webp\" alt=\"The High Bay rocket builder in SpaceSim: Pale Blue Dot\" loading=\"lazy\" decoding=\"async\">\u003Cfigcaption>SpaceSim: Pale Blue Dot, built with Godot: designing a rocket in the High Bay.\u003C/figcaption>\u003C/figure>\n\u003Cp>Doing that with AAA-level visuals \u003Cem>and\u003C/em> performance you can measure means owning things a general-purpose engine reasonably keeps generic: how reference frames nest, how precision stays local millions of kilometres from the origin, how terrain streams, and how rendering consumes simulation state. You can bend an engine around these problems, but at some point you’re fighting the architecture instead of building the game.\u003C/p>\n\u003Cfigure>\u003Cimg src=\"/games/pale-blue-dot/earthrise.webp\" alt=\"Earth rising over the lunar horizon in SpaceSim: Pale Blue Dot\" loading=\"lazy\" decoding=\"async\">\u003Cfigcaption>Earthrise in Pale Blue Dot. One world, from the launch pad to the Moon and beyond.\u003C/figcaption>\u003C/figure>\n\u003Cp>That alone might have justified a custom engine for one game. It would not have justified SimEngine, a general-purpose engine we intend to open source. The second reason did.\u003C/p>\n\u003Ch2 id=\"who-actually-writes-the-code\">Who actually writes the code\u003C/h2>\n\u003Cp>Most of our code is now written by coding agents, with a human directing, reviewing and deciding. Watching agents work inside traditional engines shows a pattern. The models are capable, but the \u003Cstrong>interfaces were designed for people\u003C/strong>:\u003C/p>\n\u003Cul>\n\u003Cli>the real state of a scene lives in an editor the agent cannot see;\u003C/li>\n\u003Cli>files are binary, or full of GUIDs that make diffs unreadable;\u003C/li>\n\u003Cli>“run the game and check it looks right” is a human step;\u003C/li>\n\u003Cli>success often degrades into “it compiled”, which proves very little.\u003C/li>\n\u003C/ul>\n\u003Cp>The industry’s answer has been to bolt AI onto the editor: assistants, chat panels and, more recently, MCP bridges into \u003Ca href=\"https://unity.com/en/blog/unity-ai-mcp-how-to-get-started\" target=\"_blank\" rel=\"noopener\">Unity\u003C/a> and \u003Ca href=\"https://www.pugetsystems.com/blog/2026/07/09/unreal-engine-mcp-hands-on-testing-ai-inside-the-editor/\" target=\"_blank\" rel=\"noopener\">Unreal\u003C/a>. Those are useful, and they will improve. But they connect an agent to a tool built around a mouse.\u003C/p>\n\u003Cp>We asked the opposite question: what would an engine look like if the agent were the primary user from day one? Our architecture record puts it bluntly. If the engine’s differentiator is that an LLM can build and validate a game with it, then the agent iteration loop is a first-class engineering decision, with the same evidence discipline as the graphics backend.\u003C/p>\n\u003Cp>That reframes performance too. Frame time still matters, but for development the number that dominates is the \u003Cstrong>cost per accepted change\u003C/strong>: how long, how many retries and how many human interventions it takes for an agent’s change to be proven correct. Usually, that cost is the compile, run and validate loop.\u003C/p>\n\u003Ch2 id=\"what-ai-first-means-and-what-it-doesn-t\">What AI-first means, and what it doesn’t\u003C/h2>\n\u003Cp>For SimEngine, “AI-first” is a specific list of engineering properties:\u003C/p>\n\u003Col>\n\u003Cli>\u003Cstrong>A typed, discoverable interface.\u003C/strong> An agent runs \u003Ccode>simengine_host --capabilities\u003C/code> and gets one JSON document with schema versions, commands, components and modules. Commands declare units, frames, preconditions and errors. A disabled module’s commands simply do not exist.\u003C/li>\n\u003Cli>\u003Cstrong>Deterministic, headless runs.\u003C/strong> A scenario has a seed, a tick schedule, scheduled commands and expectations. It runs without a window and returns \u003Ccode>PASS\u003C/code> or a coded failure with the step that failed, plus a \u003Ccode>final_state_sha256\u003C/code> fingerprint of the end state.\u003C/li>\n\u003Cli>\u003Cstrong>Eyes.\u003C/strong> \u003Ccode>simengine_capture\u003C/code> renders the same scene offscreen through Vulkan to a PNG with a manifest, so the agent can look at the frame. When a frame is expected, a missing or black capture is a failure, not a shrug.\u003C/li>\n\u003Cli>\u003Cstrong>Isolation.\u003C/strong> Parallel agents work in separate worktrees and build directories. Candidates are integrated one at a time, and a stable runtime never loads a half-built artifact.\u003C/li>\n\u003Cli>\u003Cstrong>Skills in the box.\u003C/strong> Every new project ships with agent skills to create, modify and diagnose a scene. Open the folder in Claude Code or Codex and the agent knows the workflow.\u003C/li>\n\u003C/ol>\n\u003Cp>This is what an agent actually writes: one scheduled command and the expectation that proves it worked. Units and frames are explicit, so nothing depends on hidden editor state.\u003C/p>\n\u003Cpre>\u003Ccode class=\"language-json\">{ &quot;at_tick&quot;: 60, &quot;command&quot;: &quot;simengine.entity.set_position&quot;, &quot;version&quot;: 1,\n  &quot;args&quot;: { &quot;entity&quot;: &quot;ball&quot;,\n            &quot;position&quot;: { &quot;value&quot;: [0.25, 1, -1], &quot;unit&quot;: &quot;m&quot;, &quot;frame&quot;: &quot;world&quot; } } }\n\n{ &quot;name&quot;: &quot;ball_on_table&quot;, &quot;entity&quot;: &quot;ball&quot;, &quot;quantity&quot;: &quot;position&quot;,\n  &quot;value&quot;: { &quot;value&quot;: [0.25, 1, -1], &quot;unit&quot;: &quot;m&quot;, &quot;frame&quot;: &quot;world&quot; },\n  &quot;tolerance&quot;: { &quot;value&quot;: 0, &quot;unit&quot;: &quot;m&quot; } }\n\u003C/code>\u003C/pre>\n\u003Cp>And just as deliberately, here is what it does \u003Cstrong>not\u003C/strong> mean:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>No LLM in the runtime.\u003C/strong> The engine, examples and tests never need an account, API key or provider SDK. No frame ever waits on a model.\u003C/li>\n\u003Cli>\u003Cstrong>No vendor lock-in.\u003C/strong> Any agent that can run a command and read JSON works: Claude Code, Codex, Cursor, Copilot, Gemini CLI.\u003C/li>\n\u003Cli>\u003Cstrong>No “prompt to game” toy.\u003C/strong> This is a native engine with an explicit architecture, not a browser generator.\u003C/li>\n\u003Cli>\u003Cstrong>No magic numbers.\u003C/strong> We don’t claim the API “eliminates hallucinations” or saves a fixed share of tokens. Productivity gets measured per accepted change, on a fixed task corpus, against a baseline.\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"five-decisions-that-shaped-the-engine\">Five decisions that shaped the engine\u003C/h2>\n\u003Ch3 id=\"1-a-thin-direct-vulkan-1-3-backend\">1. A thin, direct Vulkan 1.3 backend\u003C/h3>\n\u003Cp>We evaluated an existing cross-platform rendering framework (The Forge) and rejected it, recording what would make us revisit. A thin backend we own is easier to reason about, easier to instrument and easier for an agent to read end to end. The first PBR scene was rendered offscreen and independently verified on a Windows RTX 4070 Ti.\u003C/p>\n\u003Ch3 id=\"2-a-small-core-with-optional-modules-compiled-out\">2. A small core, with optional modules compiled out\u003C/h3>\n\u003Cp>Dependencies only point down: application, then modules, then core. A disabled module is not compiled, linked or registered: no dormant systems, no surprise startup work and no commands the agent can call but should not.\u003C/p>\n",{"kind":30},"se-layers",{"kind":27,"html":32},"\u003Ch3 id=\"3-general-purpose-from-the-first-milestone\">3. General-purpose from the first milestone\u003C/h3>\n\u003Cp>Generality is tested, not assumed. The first example is a yard with a table, crates and barrels, built through the public core with the space modules disabled. SpaceSim is the demanding reference application. It is not the reason the core exists.\u003C/p>\n\u003Ch3 id=\"4-scenarios-are-the-unit-of-truth\">4. Scenarios are the unit of truth\u003C/h3>\n\u003Cp>Every change an agent makes can be expressed as a scenario: seeded inputs, scheduled commands, expected outcomes. Two runs give the same digest, so a regression has a fingerprint and a bug report is a file, not a paragraph.\u003C/p>\n",{"kind":34},"se-flow",{"kind":27,"html":36},"\u003Ch3 id=\"5-evidence-before-done\">5. Evidence before “done”\u003C/h3>\n\u003Cp>The roadmap is a validated data file. The tracker rejects unknown requirements, dependency cycles and any completion without evidence. Accepted work keeps its manifests, captures and independent review. As one requirement puts it: “Compiling successfully, surviving one tick, or emitting a success boolean is insufficient acceptance.”\u003C/p>\n\u003Ch2 id=\"what-you-get\">What you get\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Cstrong>Fewer tokens per change.\u003C/strong> No editor and no GUI state to explain: one capabilities document, versioned text and a compact API index. Less context goes into learning the engine and more into the game. We measure it per accepted change instead of promising a number.\u003C/li>\n\u003Cli>\u003Cstrong>Native speed.\u003C/strong> C++20 on a thin, direct Vulkan 1.3 backend, no VM and no garbage collector in the runtime, with frame time treated as a budget.\u003C/li>\n\u003Cli>\u003Cstrong>Agents that verify instead of guessing.\u003C/strong> Discovery, expectations, digests and captures replace “it should work” with “here is the proof”.\u003C/li>\n\u003Cli>\u003Cstrong>Reproducible bugs.\u003C/strong> Seed, scenario and build identity pin a failure down so anyone, human or agent, can replay it.\u003C/li>\n\u003Cli>\u003Cstrong>Everything is diffable.\u003C/strong> Versioned text schemas with explicit units and frames: reviews read like code reviews.\u003C/li>\n\u003Cli>\u003Cstrong>Parallel agents, safely.\u003C/strong> Separate worktrees and builds, one-at-a-time integration, and stale evidence gets rerun.\u003C/li>\n\u003Cli>\u003Cstrong>Scale without hacks.\u003C/strong> Typed hierarchical frames and camera-relative rendering keep precision local, even far from the origin.\u003C/li>\n\u003Cli>\u003Cstrong>Open and provider-free.\u003C/strong> MIT OR Apache-2.0, no runtime AI dependency, and it works with whichever agent you prefer.\u003C/li>\n\u003C/ul>\n\u003Ch2 id=\"what-it-costs-honestly\">What it costs, honestly\u003C/h2>\n\u003Cp>Choosing a custom engine is expensive, and pretending otherwise would contradict everything above:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Cstrong>No visual editor.\u003C/strong> That is deliberate. A minimal diagnostic inspector is planned, but if you think in drag-and-drop, SimEngine is not for you yet.\u003C/li>\n\u003Cli>\u003Cstrong>One platform.\u003C/strong> Windows 11 x64 with a Vulkan 1.3 GPU first, plus Linux for the headless toolchain and CI.\u003C/li>\n\u003Cli>\u003Cstrong>Pre-release.\u003C/strong> Today there is no supported physics, game loop, input or audio for shipping a game.\u003C/li>\n\u003Cli>\u003Cstrong>Owning the stack means owning the work.\u003C/strong> Integration, diagnostics, testing and asset tooling do not disappear because there is no editor. We have to build them, prove them and maintain them.\u003C/li>\n\u003C/ul>\n\u003Cp>If you need to ship a game this year, use Unity, Unreal or Godot. They are excellent: see \u003Ca href=\"/ai-game-engine#compare\">our Unity vs Unreal vs Godot comparison\u003C/a> for where each one shines. SimEngine is a bet on where game development is going, built in the open so you can judge that bet yourself.\u003C/p>\n\u003Ch2 id=\"where-it-stands-today\">Where it stands today\u003C/h2>\n\u003Cfigure>\u003Cimg src=\"/media/simengine/capture-scn001-rtx4070ti.webp\" alt=\"Real SimEngine output: SCN-001 rendered offscreen with Vulkan on an RTX 4070 Ti\" loading=\"lazy\" decoding=\"async\">\u003C/figure>\n\u003Cp>The first milestone (reusable foundations and decision gates) is largely done, and the second (physics, spatial precision, continuity) is underway. In practice, an agent can already:\u003C/p>\n\u003Cul>\n\u003Cli>create a project from the \u003Ccode>first_scene\u003C/code> example and check it against the engine build;\u003C/li>\n\u003Cli>add an object, move it with a scheduled command and add an expectation for where it ends;\u003C/li>\n\u003Cli>run it headless and get \u003Ccode>PASS\u003C/code>, 3 of 3 expectations and a new state digest;\u003C/li>\n\u003Cli>capture it offscreen with Vulkan and show you the before and after PNGs;\u003C/li>\n\u003Cli>open the Windows scene playground to move the camera, select and translate objects, and export;\u003C/li>\n\u003Cli>cook static glTF/GLB assets through a strict, deterministic offline pipeline.\u003C/li>\n\u003C/ul>\n\u003Cp>That isn’t a game yet. It’s a closed loop in which an agent can make a change and \u003Cem>prove\u003C/em> it, which is the foundation everything else stands on.\u003C/p>\n\u003Ch2 id=\"what-s-next\">What’s next\u003C/h2>\n\u003Cp>Next comes a local-physics sandbox (an experimental adapter already exists behind a gate), then planetary terrain and streaming, construction, flight and persistence, visual quality and temporal stability, richer agent operations with controlled reload, and finally an integrated, distributable engine candidate. The repository opens publicly with that \u003Ca href=\"/simengine#roadmap\">first distributable milestone\u003C/a>.\u003C/p>\n\u003Cp>If you build games with agents, or want to, we’d love to hear what breaks for you today: that is exactly the feedback this engine is designed around. The engine itself is presented on the \u003Ca href=\"/simengine\">SimEngine page\u003C/a>.\u003C/p>\n\u003Csection class=\"post__sources\" aria-labelledby=\"sources\">\u003Ch2 id=\"sources\">Sources\u003C/h2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https://unity.com/en/blog/unity-ai-mcp-how-to-get-started\" target=\"_blank\" rel=\"noopener\">Unity AI: how to get started with MCP\u003C/a>, Unity, 2026\u003C/li>\n\u003Cli>\u003Ca href=\"https://www.pugetsystems.com/blog/2026/07/09/unreal-engine-mcp-hands-on-testing-ai-inside-the-editor/\" target=\"_blank\" rel=\"noopener\">Unreal Engine MCP hands-on: testing AI inside the editor\u003C/a>, Puget Systems, July 2026\u003C/li>\n\u003Cli>SimEngine architecture decision records ADR 0002, 0004, 0005 and 0007, and requirements REQ-023 to REQ-030 (repository opening soon)\u003C/li>\n\u003C/ul>\n\u003C/section>",[38,41,44,47,50,53,56,59],{"id":39,"text":40},"it-started-with-a-space-game","It started with a space game",{"id":42,"text":43},"who-actually-writes-the-code","Who actually writes the code",{"id":45,"text":46},"what-ai-first-means-and-what-it-doesn-t","What AI-first means, and what it doesn't",{"id":48,"text":49},"five-decisions-that-shaped-the-engine","Five decisions that shaped the engine",{"id":51,"text":52},"what-you-get","What you get",{"id":54,"text":55},"what-it-costs-honestly","What it costs, honestly",{"id":57,"text":58},"where-it-stands-today","Where it stands today",{"id":60,"text":61},"what-s-next","What's next",[],[64,83,97],{"slug":65,"lang":6,"translation":66,"weight":67,"title":68,"description":69,"seoTitle":70,"seoDescription":71,"date":72,"updated":-1,"cover":73,"coverAlt":74,"tags":75,"accent":80,"game":81,"vrApp":82,"readingMinutes":24},"acrophobia","acrophobie",30,"Acrophobia (fear of heights): meaning, vertigo, causes, how common it is and how to overcome it","Acrophobia is the fear of heights, the most common specific phobia in some surveys. What the word means, how it differs from vertigo, symptoms, causes, how common it is, a quick self-check, and how to overcome it.","Acrophobia (Fear of Heights): Meaning, Vertigo & Help","Acrophobia is the fear of heights. What it means, how it differs from vertigo, symptoms, causes, how common it is, a self-check and how to overcome it.","2026-10-05","/blog/acrophobia/cover.webp","Illustration of a wooden mountain lookout with a sturdy railing at golden hour, overlooking a green valley and a winding river.",[76,77,78,79],"Acrophobia","Fear of heights","Vertigo","Phobias","#4aa8e8","vr-phobia","heights",{"slug":84,"lang":6,"translation":85,"weight":67,"title":86,"description":87,"seoTitle":88,"seoDescription":89,"date":72,"updated":-1,"cover":90,"coverAlt":91,"tags":92,"accent":80,"game":81,"vrApp":95,"readingMinutes":96},"arachnophobia","arachnophobie","Arachnophobia (fear of spiders): meaning, causes, how common it is and how to overcome it","Arachnophobia is the fear of spiders, one of the most common specific phobias. What the word means, how to pronounce it, symptoms, causes, how common it is, a quick self-check, and how to overcome it.","Arachnophobia (Fear of Spiders): Meaning, Causes & Help","Arachnophobia is the fear of spiders. What it means, how to say it, symptoms, causes, how common it is, a quick self-check and how to overcome it.","/blog/arachnophobia/cover.webp","Illustration of a small house spider on a web in the corner of a sunny window, seen from across a calm living room.",[93,94,79],"Arachnophobia","Fear of spiders","spiders",7,{"slug":98,"lang":6,"translation":99,"weight":67,"title":100,"description":101,"seoTitle":102,"seoDescription":103,"date":72,"updated":-1,"cover":104,"coverAlt":105,"tags":106,"accent":109,"game":81,"vrApp":110,"readingMinutes":24},"claustrophobia","claustrophobie","Claustrophobia (fear of enclosed spaces): meaning, symptoms, causes and how to overcome it","Claustrophobia is the fear of enclosed spaces such as lifts, tunnels, crowded trains and MRI scanners. What the word means, how to pronounce it, symptoms, causes, how common it is, a quick self-check, and how to overcome it.","Claustrophobia: Meaning, Symptoms, Causes and Help","Claustrophobia is the fear of enclosed spaces like lifts, tunnels and MRI scanners. Meaning, symptoms, causes, how common it is and how to overcome it.","/blog/claustrophobia/cover.webp","Illustration of a softly lit corridor opening onto a wide, bright doorway with open sky beyond.",[107,108,79],"Claustrophobia","Fear of enclosed spaces","#7a8ca3","closed-spaces","/blog/why-we-built-simengine",{"lang":113,"path":114},"fr","/fr/blog/pourquoi-nous-avons-cree-simengine","/fr/blog","/blog",1793295561857]