Compare
Three.js, but better for an agent
ThreeNative keeps the Three.js programming model an agent already knows, then adds the engine work plain Three.js leaves to you: a game loop, input, physics, deterministic playtests, performance budgets and native targets.
The floor is vanilla Three.js
ctx.scene is a real THREE.Scene and ctx.renderer is a real WebGPURenderer. There is no serialized scene format and no editor-owned state. When the framework blocks you, write plain Three.js, so the worst case is the workflow the agent already knows.
Less plumbing to reinvent
Plain Three.js makes an agent rebuild renderer setup, resize handling, the loop, fixed timesteps, input, physics, HUD sync, touch, gamepad, pause, test hooks and packaging. In the charter's audit of a vanilla game, about 42% of its roughly 400 lines was identical plumbing.
Search the framework, then write TypeScript
The engine MCP server is read-oriented. An agent asks it what the framework already provides, then writes ordinary code. Unreal's MCP drives a stateful editor instead: mutate an asset, query it, compile, inspect.
The agent can play what it built
Playtest scenarios press keys, wait ticks and assert on game state, transforms, cameras, HUD, console errors, screenshots, triangles and draw calls. They fail closed, so a feature is checked by running the game, not by reading the diff.
Measured
Generic plumbing in a vanilla game
42%
About 170 of roughly 400 lines in the abyss game were identical in every game.
4,096 cubes, native desktop
2.28 ms vs 4.17 ms
ThreeNative shipped defaults against Godot, 1.8× faster. RTX 2080, 1280×720, median of 3 runs.
512 skinned rigs
1026 → 4 draws
Frame time p50 47.05 → 24.45 ms against stock Three.js, faster in 6 of 6 paired runs.
Developer experience with an agent
These ratings are an assessment of how it feels to build with Claude or Codex, not a benchmark. The measured numbers are below, each with its source.
| Capability | Three.js | ThreeNative | Unreal + MCP |
|---|---|---|---|
| Authoring loop | |||
| Ordinary TS/JS editing | ★★★★★ | ★★★★★ | ★★★★★ |
| Claude already knows the API | ★★★★★ | ★★★★★ | ★★★★★ |
| Direct Three.js access | ★★★★★ | ★★★★★ | N/A |
| Changes are plain text and git diffs | ★★★★★ | ★★★★★ | ★★★★★ |
| Vite dev loop | ★★★★★ | ★★★★★ | N/A |
| Hot browser iteration | ★★★★★ | ★★★★★ | ★★★★★ |
| Agent can grep the whole game | ★★★★★ | ★★★★★ | ★★★★★ |
| No editor state to manipulate | ★★★★★ | ★★★★★ | ★★★★★ |
| Verification | |||
| Deterministic automated gameplay tests | ★★★★★ | ★★★★★ | ★★★★★ |
| Semantic scene inspection | ★★★★★ | ★★★★★ | ★★★★★ |
| Performance assertions | ★★★★★ | ★★★★★ | ★★★★★ |
| Visual verification | ★★★★★ | ★★★★★ | ★★★★★ |
| Engine systems | |||
| Input abstraction | ★★★★★ | ★★★★★ | ★★★★★ |
| Physics integration | ★★★★★ | ★★★★★ | ★★★★★ |
| Asset pipeline | ★★★★★ | ★★★★★ | ★★★★★ |
| AAA engine tooling depth | ★★★★★ | ★★★½★ | ★★★★★ |
| Targets | |||
| Browser | ★★★★★ | ★★★★★ | ★★★★★ |
| Native desktop | ★★★★★ | ★★★★★ | ★★★★★ |
| Android | ★★★★★ | ★★★★★ | ★★★★★ |
| One source across targets | Browser only | Yes | Mostly native Unreal |
| Working with an agent | |||
| Capability discovery | ★★★★★ | ★★★★★ | ★★★★★ |
| AI-specific project instructions | Manual | Built in | Usually custom |
| Token efficiency | ★★★★★ | ★★★★★ | ★★★★★ |
| Autonomous feature implementation | ★★★★★ | ★★★★★ | ★★★★★ |
| Recovery when the agent gets it wrong | ★★★★★ | ★★★★★ | ★★★★★ |
| Parallel agents | ★★★★★ | ★★★★★ | ★★★★★ |
| Agent-friendly architecture overall | ★★★★★ | ★★★★★ | ★★★½★ |
Browser-only libraries, codecs and DOM access limit what runs natively, and native packaging and device validation take longer than refreshing Vite. Unreal still leads on the depth of its mature AAA subsystems. Read the current challenges.