Designed with minimal brainpower and maximum enthusiasm. Under the hood it's a 3D engine and editor in Rust on Vulkan, with game code as plain Rust in a hot-reloadable DLL.
Some of them are even true.
No complex setups. If a 5-year-old with a keyboard can't figure it out, we haven't dumbed it down enough.
So light on features that your CPU won't even notice it's running.
Objects fall down. Sometimes they bounce. Don't push your luck.
Supports pixels, colored rectangles, and severe artistic compromises.
And the parts that are actually serious:
PBR, skinning, sky lighting and reflections. Shaders are WGSL, compiled by naga at build time, so no Vulkan SDK needed.
One file per script in a DLL that reloads while the game runs. Components keep their values across rebuilds.
Imports .blend, .fbx, .obj, .gltf and more automatically, with collision proxies, LODs and animations.
Rigid bodies, colliders and a character controller, simulated at a fixed rate during Play.
A sparse-set ECS built for very large worlds, procedural generation and simulation. The demo runs 90,000 entities.
A built-in MCP server with about 75 tools lets agents build levels, write scripts and play the game. Edits are undoable.
You need a Vulkan 1.3 GPU and a Rust toolchain. Blender is optional.
# 1
git clone https://github.com/Matheuswells/dumb_engine.git
cd dumb_engine
# 2
cargo run -p dumb_editor -- project
# 4
cargo run -p dumb_runtime --bin dumb-player -- project
Each .rs file in Scripts/src/ is one script. Nothing to register by hand.
Editor and the inspector shows your fields, with ranges and tooltips.use dumb_script::prelude::*; #[derive(Component, Editor, Clone, Default)] pub struct Player { #[editor(range = 0.0..=20.0, tooltip = "Meters per second")] pub speed: f32, } fn movement(ctx: &mut ScriptContext) { let dir = Vec3::new(ctx.input.axis(Key::A, Key::D), 0.0, ctx.input.axis(Key::W, Key::S)); for (t, p) in ctx.world.query::<(&mut Transform, &Player)>() { t.translation += dir * p.speed * ctx.time.delta; } } pub fn register(reg: &mut Registry) { reg.component::<Player>(); reg.system("player::movement", movement); }
Everything you need to place a box, and a few things you don't.
Read more in the architecture notes, the MCP guide and the roadmap.
The editor runs a Model Context Protocol server, so Claude Code, Claude Desktop or any MCP client can build levels, tune materials, write and hot-reload scripts, play the game and look at screenshots. You watch every change happen live, and Ctrl+Z undoes it.
🔌 Agent active while it works.# Claude Code
claude mcp add --transport http dumb-engine http://127.0.0.1:47100/mcp
# or .mcp.json in your project { "mcpServers": { "dumb-engine": { "type": "http", "url": "http://127.0.0.1:47100/mcp" } } }
Things you can ask for:
Creates entities, sets transforms and components, spawns assets and saves the scene.
Creates and edits materials, assigns them and checks the result with a screenshot.
Writes the script, builds it, reads compiler errors, and hot-reloads the DLL.
Plays, sends input, steps frames, reads the console and captures the game view.
About 75 tools cover scenes, entities, prefabs, materials, assets, scripts, play mode, the console and exports. The full list is in the MCP guide.