{
  "@context": "https://schema.org",
  "@id": "https://aggr.aymericbeaumet.com/items/huggingface-co/2025-09-29-vibegame-exploring-vibe-coding-games/#webpage",
  "@type": [
    "WebPage",
    "ArchiveComponent"
  ],
  "articleBody": "## The Problem\n\nPeople are trying to vibe code games. And it kind of works, at first. However, as the project grows, things begin to fall apart. Why? And what can we do about it?\n\nI'll talk about the problem, how I fixed it, and where to go from here.\n\n## What Is \"Vibe Coding\"?\n\nFirst, what is vibe coding? It's originally coined by Andrej Karpathy in a [viral tweet](https://x.com/karpathy/status/1886192184808149383) where it's defined as where you \"fully give in to the vibes, embrace exponentials and forget the code even exists\".\n\nHowever, since then, it's used descriptively to mean a lot of different things, anywhere from just \"using AI when coding\" to \"not thinking about the code at all\". In this blog post, I'll define it as: using AI as a high-level programming language to build something. Like other programming languages, this benefits from understanding what's going on under the hood, but doesn't necessarily require it.\n\nWith this interpretation, you could make a game without understanding code, though knowing the fundamentals still helps.\n\n## Context Management\n\nEarlier I mentioned that \"as the project grows, things begin to fall apart\". This is because there is [evidence](https://huggingface.co/blog/helmet) that as the context window fills up, model performance begins to degrade. This is especially true for game development, where the context can grow very large, very quickly.\n\nTo address this issue, there are many personal ad-hoc solutions, such as writing LLM-specific context directly in the project files, or more comprehensive solutions like [Claude Code Development Kit](https://github.com/peterkrueck/Claude-Code-Development-Kit) for large-scale context management.\n\nI couldn't find a lightweight, accessible solution, which doesn't rely on significant domain knowledge. So I made one: 🧅 [Shallot](https://github.com/dylanebert/shallot), a simple, lightweight, unopinionated context management system for Claude Code. It relies on two basic commands:\n\n1. `/peel [prompt]` to load context at the beginning of a conversation\n2. `/nourish` to update context at the end of a conversation\n\nAnecdotally, this works well. However, it works best when the project stays lean and well-organized, so all relevant context can easily fit in the model's context window. While Claude Code is used here, the same principles generalize to other models.\n\nBeyond context management tools, platform choice is critical. The platform should ideally naturally keep projects lean through high-level abstractions, while also being something AI models understand well. So, what existing platforms are best suited for vibe coding?\n\n## Initial Exploration\n\nI initially tried 3 different approaches to vibe coding games: Roblox MCP, Unity MCP, and web. For each, I tried to build a simple incremental game inspired by [Grass Cutting Incremental](https://roblox-grass-cutting-incremental.fandom.com/wiki/Roblox_Grass_Cutting_Incremental_Wiki), using Claude Code for each.\n\nHere's how it went:\n\n### Attempt 1: Roblox MCP\n\nThe [official MCP server](https://github.com/Roblox/studio-rust-mcp-server) from Roblox. This allows AI to interact with Roblox Studio by sending commands to run code.\n\nPros:\n\n- Excellent level of abstraction with built-in game mechanics\n- AI could very easily understand the syntax and convert instructions to code\n\nCons:\n\n- No files, only using code to read data, which severely limits context management\n- Very limited runtime information for AI to work with\n- Proprietary walled garden\n\nRoblox provides an excellent layer of abstraction for keeping the codebase lean and manageable, which is perfect for vibe coding. However, the walled garden and lack of context makes it infeasible for vibe coding, unless it's in-house at Roblox.\n\n### Attempt 2: Unity MCP\n\nThe [unofficial MCP server](https://github.com/CoplayDev/unity-mcp) for Unity. This allows AI to interact with the Unity Editor: reading the console, managing assets, and validating scripts.\n\nPros:\n\n- Full file system access\n\nCons:\n\n- There are many ways to do everything in Unity, changing frequently across versions, causing AI to get confused\n- Requires significant domain knowledge to tell the AI *how* to do things, rather than *what* to do\n- AI performance was inconsistent and unreliable\n- Proprietary engine (though much more transparent than Roblox)\n\nUnity is a powerful engine with a lot of capabilities. However, the complexity and variability of the engine makes it difficult for AI to consistently produce good results without significant user domain knowledge.\n\n### Attempt 3: Web Stack\n\nThe open web platform, using [three.js](https://threejs.org/) for 3D rendering, [rapier](https://rapier.rs/) for physics, and [bitecs](https://github.com/NateTheGreatt/bitECS) for game logic.\n\nPros:\n\n- Far superior AI proficiency compared to game engines, likely due to massive training data\n- Full file system access\n- Fully open source stack with complete control/transparency\n\nCons:\n\n- Relatively low level libraries, requiring essentially building the engine before building the game\n- Lack of ecosystem for high-quality 3D games; web tends toward 2D games and simple 3D experiences\n\nThis approach had the best AI performance by far, likely due to the vast amount of web development data available during training. However, the low-level nature of the libraries meant that I had to essentially build a game engine before I could build the game itself. This allows us to work at a much higher level of abstraction, like we did with Roblox.\n\nAlthough it required building an engine first, this approach was the only one that produced a fun result without heavy domain knowledge.\n\n### Comparison Summary\n\n| Platform | AI Performance | Abstraction Level | Context Management | Open Source |\n| -------- | -------------- | ----------------- | ------------------ | ----------- |\n| Roblox   | ⭐⭐⭐            | ⭐⭐⭐⭐⭐             | ⭐                  | ❌           |\n| Unity    | ⭐              | ⭐⭐                | ⭐⭐⭐                | ❌           |\n| Web      | ⭐⭐⭐⭐⭐          | ⭐                 | ⭐⭐⭐⭐⭐              | ✅           |\n\n## The Solution: VibeGame\n\nAfter these experiments, I had a clear picture: the web stack had excellent AI performance but was too low-level, while Roblox had perfect abstraction but lacked openness and context management.\n\nSo, what about combining the best of both?\n\nIntroducing [VibeGame](https://github.com/dylanebert/vibegame), a high-level declarative game engine built on top of three.js, rapier, and bitecs, designed specifically for AI-assisted game development.\n\n### Design Philosophy\n\nThere were three key decisions that went into the design of VibeGame:\n\n1. **Abstraction:** A high-level abstraction with built-in features like physics, rendering, and common game mechanics, keeping the codebase lean and manageable. This takes inspiration from popular high-level sandbox games/game \"engines\" like Roblox, Fortnite UEFN, and Minecraft.\n2. **Syntax:** A declarative XML-like syntax for defining game objects and their properties, making it easy for AI to understand and generate code. This is similar to HTML/CSS, which AI models are already proficient in.\n3. **Architecture:** An Entity-Component-System (ECS) architecture for scalability and flexibility. ECS separates data (components) from behavior (systems), encouraging the project to stay modular and organized as it grows, conducive to vibe coding and context management.\n\nA basic game looks like this:\n\n```html\n<world canvas=\"#game-canvas\" sky=\"#87ceeb\">\n  <!-- Ground -->\n  <static-part pos=\"0 -0.5 0\" shape=\"box\" size=\"20 1 20\" color=\"#90ee90\"></static-part>\n\n  <!-- Ball -->\n  <dynamic-part pos=\"-2 4 -3\" shape=\"sphere\" size=\"1\" color=\"#ff4500\"></dynamic-part>\n</world>\n\n<canvas id=\"game-canvas\"></canvas>\n\n<script type=\"module\">\n  import * as GAME from 'vibegame';\n  GAME.run();\n</script>\n```\n\nSee it in action in this [JSFiddle](https://jsfiddle.net/keLsxh5t/) or the [Live Demo](https://huggingface.co/spaces/dylanebert/VibeGame).\n\nThis will create a simple scene with a ground plane and a falling ball. The player, camera, and lighting are created automatically. All of this is modular and can be replaced. Arbitrary custom components and systems can be added as needed.\n\nThis comes bundled with an [llms.txt](https://raw.githubusercontent.com/dylanebert/VibeGame/refs/heads/main/llms.txt) file containing documentation about the engine, designed specifically for AI, to be included in its system prompt or initial context.\n\n## So Does It Actually Work?\n\nYes.\n\nWell, kind of.\n\n[Here's the game](https://huggingface.co/spaces/dylanebert/grass_cutting_game) I built to test building a simple incremental grass collection game using VibeGame and Claude Code. It worked very well, requiring minimal domain knowledge for implementing the core game mechanics.\n\n[![Grass Cutting Game](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/vibegame/grass_cutting_game.gif)](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/vibegame/grass_cutting_game.gif)\n\nHowever, there are still some major caveats:\n\n1. It works well for building what the game engine supports, i.e. a simple platformer or game that only relies on basic physics and rendering.\n2. However, it struggles with anything more complex that isn't yet implemented in the engine, like interaction, inventory, multiplayer, combat, etc.\n\nSo, with a definition of vibe coding that is the one-shot \"make me a game\" approach, it doesn't work. However, with the definition of treating vibe coding like a high-level programming language, it works very well, but requires users to understand the engine's capabilities and limitations.\n\n## Try It Yourself\n\nTo try it immediately, I built a demo where you can develop a game directly in the browser using VibeGame with [Qwen3-Next-80B-A3B-Instruct](https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Instruct): [Live Demo on Hugging Face](https://huggingface.co/spaces/dylanebert/VibeGame).\n\nYou can also test it locally with a frontier model like Claude Code:\n\n```bash\nnpm create vibegame@latest my-game\ncd my-game\nnpm run dev  # or bun dev\n```\n\nThen, paste all the contents of the included `llms.txt` to `CLAUDE.md`, providing full documentation about the engine for the AI to reference (or point your own context management system to it). This works with other models as well.\n\n## What's Next?\n\nThe engine is currently very barebones and only supports very basic mechanics (unless writing it from scratch). However, initial results are promising.\n\nNext steps would be:\n\n1. Flesh out the engine with more built-in mechanics, getting closer to par with early versions of Roblox or UEFN. This includes:\n\n- Interaction\n- Inventory/items\n- Multiplayer\n- Skinned meshes/animations with curated database\n- Audio with curated database\n\n2. Improve the AI guidance systems, providing beginners with a better experience. This includes:\n\n- Clear messaging about engine capabilities/limitations\n- Guided prompts for common tasks\n- Many more examples and templates\n- Educational resources\n\nIt's also worth exploring how vibe coding games could harness more proven engines. For example, building a high-level sandbox game editor on top of Unity or Unreal Engine (similar to how Unreal Editor for Fortnite is built on Unreal Engine) could provide a more controlled environment for AI to work with, while leveraging the power of established engines.\n\nWe're also likely to see more in-house solutions from major players.\n\n[Follow me](https://x.com/dylan_ebert_) to keep up with what's going on in the space!\n\n**Links:**\n\n- [VibeGame](https://github.com/dylanebert/vibegame)\n- [Hugging Face Demo](https://huggingface.co/spaces/dylanebert/VibeGame)\n- [Example Game (made with VibeGame)](https://huggingface.co/spaces/dylanebert/grass_cutting_game)\n- [Shallot Context Manager](https://github.com/dylanebert/shallot)\n",
  "authors": [],
  "captured_at": "2026-10-04T12:50:30.804479567+00:00",
  "category": "ai",
  "content_html": "<h2>The Problem</h2>\n<p>People are trying to vibe code games. And it kind of works, at first. However, as the project grows, things begin to fall apart. Why? And what can we do about it?</p>\n<p>I'll talk about the problem, how I fixed it, and where to go from here.</p>\n<h2>What Is &quot;Vibe Coding&quot;?</h2>\n<p>First, what is vibe coding? It's originally coined by Andrej Karpathy in a <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://x.com/karpathy/status/1886192184808149383\">viral tweet</a> where it's defined as where you &quot;fully give in to the vibes, embrace exponentials and forget the code even exists&quot;.</p>\n<p>However, since then, it's used descriptively to mean a lot of different things, anywhere from just &quot;using AI when coding&quot; to &quot;not thinking about the code at all&quot;. In this blog post, I'll define it as: using AI as a high-level programming language to build something. Like other programming languages, this benefits from understanding what's going on under the hood, but doesn't necessarily require it.</p>\n<p>With this interpretation, you could make a game without understanding code, though knowing the fundamentals still helps.</p>\n<h2>Context Management</h2>\n<p>Earlier I mentioned that &quot;as the project grows, things begin to fall apart&quot;. This is because there is <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/blog/helmet\">evidence</a> that as the context window fills up, model performance begins to degrade. This is especially true for game development, where the context can grow very large, very quickly.</p>\n<p>To address this issue, there are many personal ad-hoc solutions, such as writing LLM-specific context directly in the project files, or more comprehensive solutions like <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/peterkrueck/Claude-Code-Development-Kit\">Claude Code Development Kit</a> for large-scale context management.</p>\n<p>I couldn't find a lightweight, accessible solution, which doesn't rely on significant domain knowledge. So I made one: 🧅 <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dylanebert/shallot\">Shallot</a>, a simple, lightweight, unopinionated context management system for Claude Code. It relies on two basic commands:</p>\n<ol>\n<li><code>/peel [prompt]</code> to load context at the beginning of a conversation</li>\n<li><code>/nourish</code> to update context at the end of a conversation</li>\n</ol>\n<p>Anecdotally, this works well. However, it works best when the project stays lean and well-organized, so all relevant context can easily fit in the model's context window. While Claude Code is used here, the same principles generalize to other models.</p>\n<p>Beyond context management tools, platform choice is critical. The platform should ideally naturally keep projects lean through high-level abstractions, while also being something AI models understand well. So, what existing platforms are best suited for vibe coding?</p>\n<h2>Initial Exploration</h2>\n<p>I initially tried 3 different approaches to vibe coding games: Roblox MCP, Unity MCP, and web. For each, I tried to build a simple incremental game inspired by <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://roblox-grass-cutting-incremental.fandom.com/wiki/Roblox_Grass_Cutting_Incremental_Wiki\">Grass Cutting Incremental</a>, using Claude Code for each.</p>\n<p>Here's how it went:</p>\n<h3>Attempt 1: Roblox MCP</h3>\n<p>The <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/Roblox/studio-rust-mcp-server\">official MCP server</a> from Roblox. This allows AI to interact with Roblox Studio by sending commands to run code.</p>\n<p>Pros:</p>\n<ul>\n<li>Excellent level of abstraction with built-in game mechanics</li>\n<li>AI could very easily understand the syntax and convert instructions to code</li>\n</ul>\n<p>Cons:</p>\n<ul>\n<li>No files, only using code to read data, which severely limits context management</li>\n<li>Very limited runtime information for AI to work with</li>\n<li>Proprietary walled garden</li>\n</ul>\n<p>Roblox provides an excellent layer of abstraction for keeping the codebase lean and manageable, which is perfect for vibe coding. However, the walled garden and lack of context makes it infeasible for vibe coding, unless it's in-house at Roblox.</p>\n<h3>Attempt 2: Unity MCP</h3>\n<p>The <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/CoplayDev/unity-mcp\">unofficial MCP server</a> for Unity. This allows AI to interact with the Unity Editor: reading the console, managing assets, and validating scripts.</p>\n<p>Pros:</p>\n<ul>\n<li>Full file system access</li>\n</ul>\n<p>Cons:</p>\n<ul>\n<li>There are many ways to do everything in Unity, changing frequently across versions, causing AI to get confused</li>\n<li>Requires significant domain knowledge to tell the AI <em>how</em> to do things, rather than <em>what</em> to do</li>\n<li>AI performance was inconsistent and unreliable</li>\n<li>Proprietary engine (though much more transparent than Roblox)</li>\n</ul>\n<p>Unity is a powerful engine with a lot of capabilities. However, the complexity and variability of the engine makes it difficult for AI to consistently produce good results without significant user domain knowledge.</p>\n<h3>Attempt 3: Web Stack</h3>\n<p>The open web platform, using <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://threejs.org/\">three.js</a> for 3D rendering, <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://rapier.rs/\">rapier</a> for physics, and <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/NateTheGreatt/bitECS\">bitecs</a> for game logic.</p>\n<p>Pros:</p>\n<ul>\n<li>Far superior AI proficiency compared to game engines, likely due to massive training data</li>\n<li>Full file system access</li>\n<li>Fully open source stack with complete control/transparency</li>\n</ul>\n<p>Cons:</p>\n<ul>\n<li>Relatively low level libraries, requiring essentially building the engine before building the game</li>\n<li>Lack of ecosystem for high-quality 3D games; web tends toward 2D games and simple 3D experiences</li>\n</ul>\n<p>This approach had the best AI performance by far, likely due to the vast amount of web development data available during training. However, the low-level nature of the libraries meant that I had to essentially build a game engine before I could build the game itself. This allows us to work at a much higher level of abstraction, like we did with Roblox.</p>\n<p>Although it required building an engine first, this approach was the only one that produced a fun result without heavy domain knowledge.</p>\n<h3>Comparison Summary</h3>\n<table>\n<thead>\n<tr>\n<th>Platform</th>\n<th>AI Performance</th>\n<th>Abstraction Level</th>\n<th>Context Management</th>\n<th>Open Source</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Roblox</td>\n<td>⭐⭐⭐</td>\n<td>⭐⭐⭐⭐⭐</td>\n<td>⭐</td>\n<td>❌</td>\n</tr>\n<tr>\n<td>Unity</td>\n<td>⭐</td>\n<td>⭐⭐</td>\n<td>⭐⭐⭐</td>\n<td>❌</td>\n</tr>\n<tr>\n<td>Web</td>\n<td>⭐⭐⭐⭐⭐</td>\n<td>⭐</td>\n<td>⭐⭐⭐⭐⭐</td>\n<td>✅</td>\n</tr>\n</tbody>\n</table>\n<h2>The Solution: VibeGame</h2>\n<p>After these experiments, I had a clear picture: the web stack had excellent AI performance but was too low-level, while Roblox had perfect abstraction but lacked openness and context management.</p>\n<p>So, what about combining the best of both?</p>\n<p>Introducing <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dylanebert/vibegame\">VibeGame</a>, a high-level declarative game engine built on top of three.js, rapier, and bitecs, designed specifically for AI-assisted game development.</p>\n<h3>Design Philosophy</h3>\n<p>There were three key decisions that went into the design of VibeGame:</p>\n<ol>\n<li><strong>Abstraction:</strong> A high-level abstraction with built-in features like physics, rendering, and common game mechanics, keeping the codebase lean and manageable. This takes inspiration from popular high-level sandbox games/game &quot;engines&quot; like Roblox, Fortnite UEFN, and Minecraft.</li>\n<li><strong>Syntax:</strong> A declarative XML-like syntax for defining game objects and their properties, making it easy for AI to understand and generate code. This is similar to HTML/CSS, which AI models are already proficient in.</li>\n<li><strong>Architecture:</strong> An Entity-Component-System (ECS) architecture for scalability and flexibility. ECS separates data (components) from behavior (systems), encouraging the project to stay modular and organized as it grows, conducive to vibe coding and context management.</li>\n</ol>\n<p>A basic game looks like this:</p>\n<pre><code class=\"language-html\"><span class=\"code-snippet\" data-language=\"HTML\"><span class=\"syntax-text syntax-html syntax-basic\"><span class=\"syntax-meta syntax-tag syntax-other syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;</span><span class=\"syntax-entity syntax-name syntax-tag syntax-other syntax-html\">world</span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">canvas</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>#game-canvas<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">sky</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>#87ceeb<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span>\n  <span class=\"syntax-comment syntax-block syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-html\">&lt;!--</span> Ground <span class=\"syntax-punctuation syntax-definition syntax-comment syntax-end syntax-html\">--&gt;</span></span>\n  <span class=\"syntax-meta syntax-tag syntax-custom syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;</span><span class=\"syntax-entity syntax-name syntax-tag syntax-custom syntax-html\">static-part</span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">pos</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>0 -0.5 0<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">shape</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>box<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">size</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>20 1 20<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">color</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>#90ee90<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span><span class=\"syntax-meta syntax-tag syntax-custom syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;/</span><span class=\"syntax-entity syntax-name syntax-tag syntax-custom syntax-html\">static-part</span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span>\n\n  <span class=\"syntax-comment syntax-block syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-html\">&lt;!--</span> Ball <span class=\"syntax-punctuation syntax-definition syntax-comment syntax-end syntax-html\">--&gt;</span></span>\n  <span class=\"syntax-meta syntax-tag syntax-custom syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;</span><span class=\"syntax-entity syntax-name syntax-tag syntax-custom syntax-html\">dynamic-part</span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">pos</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>-2 4 -3<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">shape</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>sphere<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">size</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>1<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">color</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>#ff4500<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span><span class=\"syntax-meta syntax-tag syntax-custom syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;/</span><span class=\"syntax-entity syntax-name syntax-tag syntax-custom syntax-html\">dynamic-part</span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span>\n<span class=\"syntax-meta syntax-tag syntax-other syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;/</span><span class=\"syntax-entity syntax-name syntax-tag syntax-other syntax-html\">world</span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span>\n\n<span class=\"syntax-meta syntax-tag syntax-other syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;</span><span class=\"syntax-entity syntax-name syntax-tag syntax-other syntax-html\">canvas</span> <span class=\"syntax-meta syntax-attribute-with-value syntax-id syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-id syntax-html\">id</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-id syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span></span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-id syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-meta syntax-toc-list syntax-id syntax-html\">game-canvas</span><span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span><span class=\"syntax-meta syntax-tag syntax-other syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;/</span><span class=\"syntax-entity syntax-name syntax-tag syntax-other syntax-html\">canvas</span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span>\n\n<span class=\"syntax-meta syntax-tag syntax-script syntax-begin syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;</span><span class=\"syntax-entity syntax-name syntax-tag syntax-script syntax-html\">script</span></span><span class=\"syntax-meta syntax-tag syntax-script syntax-begin syntax-html\"> <span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-entity syntax-other syntax-attribute-name syntax-html\">type</span><span class=\"syntax-punctuation syntax-separator syntax-key-value syntax-html\">=</span></span><span class=\"syntax-meta syntax-attribute-with-value syntax-html\"><span class=\"syntax-string syntax-quoted syntax-double syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-html\">&quot;</span>module<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-html\">&quot;</span></span></span></span><span class=\"syntax-meta syntax-tag syntax-script syntax-begin syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span>\n<span class=\"syntax-source syntax-js syntax-embedded syntax-html\"><span class=\"syntax-source syntax-js\">  <span class=\"syntax-meta syntax-import syntax-js\"><span class=\"syntax-keyword syntax-control syntax-import-export syntax-js\">import</span> <span class=\"syntax-constant syntax-other syntax-js\">*</span> <span class=\"syntax-keyword syntax-control syntax-import-export syntax-js\">as</span> <span class=\"syntax-variable syntax-other syntax-readwrite syntax-js\">GAME</span> <span class=\"syntax-keyword syntax-control syntax-import-export syntax-js\">from</span> <span class=\"syntax-string syntax-quoted syntax-single syntax-js\"><span class=\"syntax-punctuation syntax-definition syntax-string syntax-begin syntax-js\">&#39;</span>vibegame<span class=\"syntax-punctuation syntax-definition syntax-string syntax-end syntax-js\">&#39;</span></span></span><span class=\"syntax-punctuation syntax-terminator syntax-statement syntax-js\">;</span>\n  <span class=\"syntax-variable syntax-other syntax-object syntax-js\">GAME</span><span class=\"syntax-punctuation syntax-accessor syntax-js\">.</span><span class=\"syntax-meta syntax-function-call syntax-method syntax-js\"><span class=\"syntax-variable syntax-function syntax-js\">run</span><span class=\"syntax-meta syntax-group syntax-js\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-js\">(</span></span><span class=\"syntax-meta syntax-group syntax-js\"><span class=\"syntax-punctuation syntax-section syntax-group syntax-js\">)</span></span></span><span class=\"syntax-punctuation syntax-terminator syntax-statement syntax-js\">;</span>\n</span></span><span class=\"syntax-meta syntax-tag syntax-script syntax-end syntax-html\"><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-begin syntax-html\">&lt;/</span><span class=\"syntax-entity syntax-name syntax-tag syntax-script syntax-html\">script</span><span class=\"syntax-punctuation syntax-definition syntax-tag syntax-end syntax-html\">&gt;</span></span>\n</span></span></code></pre>\n<p>See it in action in this <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://jsfiddle.net/keLsxh5t/\">JSFiddle</a> or the <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/spaces/dylanebert/VibeGame\">Live Demo</a>.</p>\n<p>This will create a simple scene with a ground plane and a falling ball. The player, camera, and lighting are created automatically. All of this is modular and can be replaced. Arbitrary custom components and systems can be added as needed.</p>\n<p>This comes bundled with an <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://raw.githubusercontent.com/dylanebert/VibeGame/refs/heads/main/llms.txt\">llms.txt</a> file containing documentation about the engine, designed specifically for AI, to be included in its system prompt or initial context.</p>\n<h2>So Does It Actually Work?</h2>\n<p>Yes.</p>\n<p>Well, kind of.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/spaces/dylanebert/grass_cutting_game\">Here's the game</a> I built to test building a simple incremental grass collection game using VibeGame and Claude Code. It worked very well, requiring minimal domain knowledge for implementing the core game mechanics.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/vibegame/grass_cutting_game.gif\"><picture class=\"article-picture article-picture-fallback\" style=\"--image-ratio:16 / 9\"><img src=\"https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/vibegame/grass_cutting_game.gif\" alt=\"Grass Cutting Game\" loading=\"eager\" decoding=\"async\" fetchpriority=\"high\" referrerpolicy=\"no-referrer\" class=\"progressive-image\"></picture></a></p>\n<p>However, there are still some major caveats:</p>\n<ol>\n<li>It works well for building what the game engine supports, i.e. a simple platformer or game that only relies on basic physics and rendering.</li>\n<li>However, it struggles with anything more complex that isn't yet implemented in the engine, like interaction, inventory, multiplayer, combat, etc.</li>\n</ol>\n<p>So, with a definition of vibe coding that is the one-shot &quot;make me a game&quot; approach, it doesn't work. However, with the definition of treating vibe coding like a high-level programming language, it works very well, but requires users to understand the engine's capabilities and limitations.</p>\n<h2>Try It Yourself</h2>\n<p>To try it immediately, I built a demo where you can develop a game directly in the browser using VibeGame with <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Instruct\">Qwen3-Next-80B-A3B-Instruct</a>: <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/spaces/dylanebert/VibeGame\">Live Demo on Hugging Face</a>.</p>\n<p>You can also test it locally with a frontier model like Claude Code:</p>\n<pre><code class=\"language-bash\"><span class=\"code-snippet\" data-language=\"Shell\"><span class=\"syntax-source syntax-shell syntax-bash\"><span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">npm</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> create vibegame@latest my-game</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-support syntax-function syntax-cd syntax-shell\">cd</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> my-game</span>\n<span class=\"syntax-meta syntax-function-call syntax-shell\"><span class=\"syntax-variable syntax-function syntax-shell\">npm</span></span><span class=\"syntax-meta syntax-function-call syntax-arguments syntax-shell\"> run dev  <span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"><span class=\"syntax-punctuation syntax-definition syntax-comment syntax-begin syntax-shell\">#</span></span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\"> or bun dev</span><span class=\"syntax-comment syntax-line syntax-number-sign syntax-shell\">\n</span></span></span></span></code></pre>\n<p>Then, paste all the contents of the included <code>llms.txt</code> to <code>CLAUDE.md</code>, providing full documentation about the engine for the AI to reference (or point your own context management system to it). This works with other models as well.</p>\n<h2>What's Next?</h2>\n<p>The engine is currently very barebones and only supports very basic mechanics (unless writing it from scratch). However, initial results are promising.</p>\n<p>Next steps would be:</p>\n<ol>\n<li>Flesh out the engine with more built-in mechanics, getting closer to par with early versions of Roblox or UEFN. This includes:</li>\n</ol>\n<ul>\n<li>Interaction</li>\n<li>Inventory/items</li>\n<li>Multiplayer</li>\n<li>Skinned meshes/animations with curated database</li>\n<li>Audio with curated database</li>\n</ul>\n<ol start=\"2\">\n<li>Improve the AI guidance systems, providing beginners with a better experience. This includes:</li>\n</ol>\n<ul>\n<li>Clear messaging about engine capabilities/limitations</li>\n<li>Guided prompts for common tasks</li>\n<li>Many more examples and templates</li>\n<li>Educational resources</li>\n</ul>\n<p>It's also worth exploring how vibe coding games could harness more proven engines. For example, building a high-level sandbox game editor on top of Unity or Unreal Engine (similar to how Unreal Editor for Fortnite is built on Unreal Engine) could provide a more controlled environment for AI to work with, while leveraging the power of established engines.</p>\n<p>We're also likely to see more in-house solutions from major players.</p>\n<p><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://x.com/dylan_ebert_\">Follow me</a> to keep up with what's going on in the space!</p>\n<p><strong>Links:</strong></p>\n<ul>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dylanebert/vibegame\">VibeGame</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/spaces/dylanebert/VibeGame\">Hugging Face Demo</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://huggingface.co/spaces/dylanebert/grass_cutting_game\">Example Game (made with VibeGame)</a></li>\n<li><a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://github.com/dylanebert/shallot\">Shallot Context Manager</a></li>\n</ul>\n",
  "content_markdown": "## The Problem\n\nPeople are trying to vibe code games. And it kind of works, at first. However, as the project grows, things begin to fall apart. Why? And what can we do about it?\n\nI'll talk about the problem, how I fixed it, and where to go from here.\n\n## What Is \"Vibe Coding\"?\n\nFirst, what is vibe coding? It's originally coined by Andrej Karpathy in a [viral tweet](https://x.com/karpathy/status/1886192184808149383) where it's defined as where you \"fully give in to the vibes, embrace exponentials and forget the code even exists\".\n\nHowever, since then, it's used descriptively to mean a lot of different things, anywhere from just \"using AI when coding\" to \"not thinking about the code at all\". In this blog post, I'll define it as: using AI as a high-level programming language to build something. Like other programming languages, this benefits from understanding what's going on under the hood, but doesn't necessarily require it.\n\nWith this interpretation, you could make a game without understanding code, though knowing the fundamentals still helps.\n\n## Context Management\n\nEarlier I mentioned that \"as the project grows, things begin to fall apart\". This is because there is [evidence](https://huggingface.co/blog/helmet) that as the context window fills up, model performance begins to degrade. This is especially true for game development, where the context can grow very large, very quickly.\n\nTo address this issue, there are many personal ad-hoc solutions, such as writing LLM-specific context directly in the project files, or more comprehensive solutions like [Claude Code Development Kit](https://github.com/peterkrueck/Claude-Code-Development-Kit) for large-scale context management.\n\nI couldn't find a lightweight, accessible solution, which doesn't rely on significant domain knowledge. So I made one: 🧅 [Shallot](https://github.com/dylanebert/shallot), a simple, lightweight, unopinionated context management system for Claude Code. It relies on two basic commands:\n\n1. `/peel [prompt]` to load context at the beginning of a conversation\n2. `/nourish` to update context at the end of a conversation\n\nAnecdotally, this works well. However, it works best when the project stays lean and well-organized, so all relevant context can easily fit in the model's context window. While Claude Code is used here, the same principles generalize to other models.\n\nBeyond context management tools, platform choice is critical. The platform should ideally naturally keep projects lean through high-level abstractions, while also being something AI models understand well. So, what existing platforms are best suited for vibe coding?\n\n## Initial Exploration\n\nI initially tried 3 different approaches to vibe coding games: Roblox MCP, Unity MCP, and web. For each, I tried to build a simple incremental game inspired by [Grass Cutting Incremental](https://roblox-grass-cutting-incremental.fandom.com/wiki/Roblox_Grass_Cutting_Incremental_Wiki), using Claude Code for each.\n\nHere's how it went:\n\n### Attempt 1: Roblox MCP\n\nThe [official MCP server](https://github.com/Roblox/studio-rust-mcp-server) from Roblox. This allows AI to interact with Roblox Studio by sending commands to run code.\n\nPros:\n\n- Excellent level of abstraction with built-in game mechanics\n- AI could very easily understand the syntax and convert instructions to code\n\nCons:\n\n- No files, only using code to read data, which severely limits context management\n- Very limited runtime information for AI to work with\n- Proprietary walled garden\n\nRoblox provides an excellent layer of abstraction for keeping the codebase lean and manageable, which is perfect for vibe coding. However, the walled garden and lack of context makes it infeasible for vibe coding, unless it's in-house at Roblox.\n\n### Attempt 2: Unity MCP\n\nThe [unofficial MCP server](https://github.com/CoplayDev/unity-mcp) for Unity. This allows AI to interact with the Unity Editor: reading the console, managing assets, and validating scripts.\n\nPros:\n\n- Full file system access\n\nCons:\n\n- There are many ways to do everything in Unity, changing frequently across versions, causing AI to get confused\n- Requires significant domain knowledge to tell the AI *how* to do things, rather than *what* to do\n- AI performance was inconsistent and unreliable\n- Proprietary engine (though much more transparent than Roblox)\n\nUnity is a powerful engine with a lot of capabilities. However, the complexity and variability of the engine makes it difficult for AI to consistently produce good results without significant user domain knowledge.\n\n### Attempt 3: Web Stack\n\nThe open web platform, using [three.js](https://threejs.org/) for 3D rendering, [rapier](https://rapier.rs/) for physics, and [bitecs](https://github.com/NateTheGreatt/bitECS) for game logic.\n\nPros:\n\n- Far superior AI proficiency compared to game engines, likely due to massive training data\n- Full file system access\n- Fully open source stack with complete control/transparency\n\nCons:\n\n- Relatively low level libraries, requiring essentially building the engine before building the game\n- Lack of ecosystem for high-quality 3D games; web tends toward 2D games and simple 3D experiences\n\nThis approach had the best AI performance by far, likely due to the vast amount of web development data available during training. However, the low-level nature of the libraries meant that I had to essentially build a game engine before I could build the game itself. This allows us to work at a much higher level of abstraction, like we did with Roblox.\n\nAlthough it required building an engine first, this approach was the only one that produced a fun result without heavy domain knowledge.\n\n### Comparison Summary\n\n| Platform | AI Performance | Abstraction Level | Context Management | Open Source |\n| -------- | -------------- | ----------------- | ------------------ | ----------- |\n| Roblox   | ⭐⭐⭐            | ⭐⭐⭐⭐⭐             | ⭐                  | ❌           |\n| Unity    | ⭐              | ⭐⭐                | ⭐⭐⭐                | ❌           |\n| Web      | ⭐⭐⭐⭐⭐          | ⭐                 | ⭐⭐⭐⭐⭐              | ✅           |\n\n## The Solution: VibeGame\n\nAfter these experiments, I had a clear picture: the web stack had excellent AI performance but was too low-level, while Roblox had perfect abstraction but lacked openness and context management.\n\nSo, what about combining the best of both?\n\nIntroducing [VibeGame](https://github.com/dylanebert/vibegame), a high-level declarative game engine built on top of three.js, rapier, and bitecs, designed specifically for AI-assisted game development.\n\n### Design Philosophy\n\nThere were three key decisions that went into the design of VibeGame:\n\n1. **Abstraction:** A high-level abstraction with built-in features like physics, rendering, and common game mechanics, keeping the codebase lean and manageable. This takes inspiration from popular high-level sandbox games/game \"engines\" like Roblox, Fortnite UEFN, and Minecraft.\n2. **Syntax:** A declarative XML-like syntax for defining game objects and their properties, making it easy for AI to understand and generate code. This is similar to HTML/CSS, which AI models are already proficient in.\n3. **Architecture:** An Entity-Component-System (ECS) architecture for scalability and flexibility. ECS separates data (components) from behavior (systems), encouraging the project to stay modular and organized as it grows, conducive to vibe coding and context management.\n\nA basic game looks like this:\n\n```html\n<world canvas=\"#game-canvas\" sky=\"#87ceeb\">\n  <!-- Ground -->\n  <static-part pos=\"0 -0.5 0\" shape=\"box\" size=\"20 1 20\" color=\"#90ee90\"></static-part>\n\n  <!-- Ball -->\n  <dynamic-part pos=\"-2 4 -3\" shape=\"sphere\" size=\"1\" color=\"#ff4500\"></dynamic-part>\n</world>\n\n<canvas id=\"game-canvas\"></canvas>\n\n<script type=\"module\">\n  import * as GAME from 'vibegame';\n  GAME.run();\n</script>\n```\n\nSee it in action in this [JSFiddle](https://jsfiddle.net/keLsxh5t/) or the [Live Demo](https://huggingface.co/spaces/dylanebert/VibeGame).\n\nThis will create a simple scene with a ground plane and a falling ball. The player, camera, and lighting are created automatically. All of this is modular and can be replaced. Arbitrary custom components and systems can be added as needed.\n\nThis comes bundled with an [llms.txt](https://raw.githubusercontent.com/dylanebert/VibeGame/refs/heads/main/llms.txt) file containing documentation about the engine, designed specifically for AI, to be included in its system prompt or initial context.\n\n## So Does It Actually Work?\n\nYes.\n\nWell, kind of.\n\n[Here's the game](https://huggingface.co/spaces/dylanebert/grass_cutting_game) I built to test building a simple incremental grass collection game using VibeGame and Claude Code. It worked very well, requiring minimal domain knowledge for implementing the core game mechanics.\n\n[![Grass Cutting Game](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/vibegame/grass_cutting_game.gif)](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/blog/vibegame/grass_cutting_game.gif)\n\nHowever, there are still some major caveats:\n\n1. It works well for building what the game engine supports, i.e. a simple platformer or game that only relies on basic physics and rendering.\n2. However, it struggles with anything more complex that isn't yet implemented in the engine, like interaction, inventory, multiplayer, combat, etc.\n\nSo, with a definition of vibe coding that is the one-shot \"make me a game\" approach, it doesn't work. However, with the definition of treating vibe coding like a high-level programming language, it works very well, but requires users to understand the engine's capabilities and limitations.\n\n## Try It Yourself\n\nTo try it immediately, I built a demo where you can develop a game directly in the browser using VibeGame with [Qwen3-Next-80B-A3B-Instruct](https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Instruct): [Live Demo on Hugging Face](https://huggingface.co/spaces/dylanebert/VibeGame).\n\nYou can also test it locally with a frontier model like Claude Code:\n\n```bash\nnpm create vibegame@latest my-game\ncd my-game\nnpm run dev  # or bun dev\n```\n\nThen, paste all the contents of the included `llms.txt` to `CLAUDE.md`, providing full documentation about the engine for the AI to reference (or point your own context management system to it). This works with other models as well.\n\n## What's Next?\n\nThe engine is currently very barebones and only supports very basic mechanics (unless writing it from scratch). However, initial results are promising.\n\nNext steps would be:\n\n1. Flesh out the engine with more built-in mechanics, getting closer to par with early versions of Roblox or UEFN. This includes:\n\n- Interaction\n- Inventory/items\n- Multiplayer\n- Skinned meshes/animations with curated database\n- Audio with curated database\n\n2. Improve the AI guidance systems, providing beginners with a better experience. This includes:\n\n- Clear messaging about engine capabilities/limitations\n- Guided prompts for common tasks\n- Many more examples and templates\n- Educational resources\n\nIt's also worth exploring how vibe coding games could harness more proven engines. For example, building a high-level sandbox game editor on top of Unity or Unreal Engine (similar to how Unreal Editor for Fortnite is built on Unreal Engine) could provide a more controlled environment for AI to work with, while leveraging the power of established engines.\n\nWe're also likely to see more in-house solutions from major players.\n\n[Follow me](https://x.com/dylan_ebert_) to keep up with what's going on in the space!\n\n**Links:**\n\n- [VibeGame](https://github.com/dylanebert/vibegame)\n- [Hugging Face Demo](https://huggingface.co/spaces/dylanebert/VibeGame)\n- [Example Game (made with VibeGame)](https://huggingface.co/spaces/dylanebert/grass_cutting_game)\n- [Shallot Context Manager](https://github.com/dylanebert/shallot)\n",
  "dateCreated": "2026-10-04T12:50:30.804479567+00:00",
  "date_created": "2025-09-29T00:00:00+00:00",
  "date_modified": "2025-09-29T00:00:00+00:00",
  "date_published": "2025-09-29T00:00:00+00:00",
  "description": "The Problem People are trying to vibe code games. And it kind of works, at first. However, as the project grows, things begin to fall apart. Why? And what can we do about it? I'll talk about the problem, how I fixed it, and where to go…",
  "external_url": "https://huggingface.co/blog/vibegame",
  "git": {
    "commit": "ebb0941c5c06a2ab2377342d607535262a3e969e",
    "path": "items/huggingface-co/2025/09/2025-09-29-vibegame-exploring-vibe-coding-games.md",
    "permalink": "https://github.com/aymericbeaumet/aggr-instance/blob/ebb0941c5c06a2ab2377342d607535262a3e969e/items/huggingface-co/2025/09/2025-09-29-vibegame-exploring-vibe-coding-games.md"
  },
  "id": "urn:aggr:item:b1a9ad260afa3d40564d737ce57c172ce236dcb8",
  "isBasedOn": {
    "@id": "https://huggingface.co/blog/vibegame"
  },
  "mainEntity": {
    "@id": "https://huggingface.co/blog/vibegame",
    "@type": "CreativeWork",
    "archivedAt": {
      "@id": "https://aggr.aymericbeaumet.com/items/huggingface-co/2025-09-29-vibegame-exploring-vibe-coding-games/#webpage"
    },
    "dateModified": "2025-09-29T00:00:00+00:00",
    "datePublished": "2025-09-29T00:00:00+00:00",
    "headline": "VibeGame: Exploring Vibe Coding Games",
    "timeRequired": "PT8M",
    "url": "https://huggingface.co/blog/vibegame",
    "wordCount": 1599
  },
  "name": "Archived snapshot: VibeGame: Exploring Vibe Coding Games",
  "preview": null,
  "reading_minutes": 8,
  "replicated_at": null,
  "source": "huggingface-co",
  "source_name": "Hugging Face - Blog",
  "summary": null,
  "tags": [],
  "temporalCoverage": "2026-10-04T12:50:30.804479567+00:00",
  "title": "VibeGame: Exploring Vibe Coding Games",
  "url": "https://aggr.aymericbeaumet.com/items/huggingface-co/2025-09-29-vibegame-exploring-vibe-coding-games/",
  "word_count": 1599
}