Renderoni
A batteries-included 3D engine for Three.js and Rapier that enables AI agents and humans to build, inspect, and control deterministic game simulations through a built-in Model Context Protocol (MCP) server.
README
๐ Renderoni
3D web games, served al dente.
A batteries-included, agent-native 3D engine for Three.js and Rapier.
Deterministic WebAssembly physics, declarative presets, and built-in Model Context Protocol (MCP) for AI pair programming.
<p align="center"> <a href="https://elemarin.github.io/renderoni/"><strong>๐ฎ Play Live Web Demos โ</strong></a> </p>
โก The Problem & The Solution
Building 3D games with Three.js and Rapier WebAssembly usually means writing thousands of lines of boilerplate: fixed timestep loops, transform interpolation, character controllers, spatial audio, particle systems, and UI projections.
At the same time, AI coding agents (Claude, Gemini, Cursor) struggle with 3D engines because game loops are non-deterministic black boxes that require expensive vision screenshots.
Renderoni gives you both:
- For Humans: A declarative, batteries-included 3D engine. A single
createRenderoni()call spins up physics, rendering, camera controls, spatial audio, animation state machines, and particle systems with typed presets. - For AI Agents & Headless CI: A deterministic simulation kernel with a built-in Model Context Protocol (MCP) server. Agents inspect scenes via lightweight semantic Markdown (<500 bytes / ~120 tokens), dispatch typed actions, and verify game state headlessly in Node.js in under 10ms.
๐ฎ Live Demos
Try the interactive playground live in your browser: elemarin.github.io/renderoni (or run npm run dev locally).
| Demo | What It Does | Controls |
|---|---|---|
| ๐ช Quickstart Demo | Live interactive browser implementation of the README quickstart: hero character, spinning gold coin sensor, audio chime, and particle burst VFX. | WASD / Arrows (Move Hero), Space (Jump), ๐ช Respawn Coin Button |
| โ๏ธ Flight Simulator | Aerodynamic flight physics with lift, drag, runway takeoff & landing, retractable landing gear, and ring course. | W/S (Pitch), A/D (Yaw), Q/E (Roll), Shift/Ctrl (Throttle), Z/X (Max/Cut), G (Gear), C (Cockpit/Chase View), R (Reset) |
| ๐งฑ Vast Voxel Sandbox | Multi-biome procedural world (~2,000+ blocks) with ocean water, sandy beaches, rolling hills, snowy peaks, and trees. | WASD (Walk & Auto-step), Shift (Sprint), Space (Jump), 1-6 (Hotbar), Left/Right Click (Break/Place) |
| ๐ฆ PSX 3rd-Person Horror | Retro PSX survival horror with 3rd-person chase camera, gothic manor corridor, flashlight, key puzzle, and animated iron gate. | WASD (Walk Detective), Mouse (Orbit Camera), E (Pickup Key & Unlock Gate) |
๐ฆ Installation
npm install renderoni three @dimforge/rapier3d-compat
Tree-shakable subpath exports:
import { createRenderoni } from 'renderoni';
import { body, kccPlayer, sensor, light } from 'renderoni/presets';
import { audio } from 'renderoni/audio';
import { animation } from 'renderoni/animation';
import { vfx } from 'renderoni/vfx';
import { ui } from 'renderoni/ui';
import { createMCPServer } from 'renderoni/mcp';
import 'renderoni/testing/matchers';
๐ Quickstart
import { createRenderoni } from 'renderoni';
import { body, kccPlayer, sensor, light } from 'renderoni/presets';
import { audio } from 'renderoni/audio';
import { vfx } from 'renderoni/vfx';
// 1. Initialize engine (runs headlessly in CI or interactively in browser)
const game = await createRenderoni({
mode: 'interactive', // or 'headless'
seed: 42,
loop: { enabled: true, title: 'My Game', subtitle: 'Press Play' },
subsystems: [
audio({ volume: 0.8 }),
vfx({ particles: true }),
],
});
// 2. Add Environment & Lighting
game.add(light({ type: 'directional', position: [20, 40, 20] }));
game.add(body({ shape: 'box', type: 'fixed', size: [100, 1, 100], position: [0, 0, 0] }));
// 3. Add Collectible Item
const coin = game.add(sensor({
id: 'golden_coin',
shape: 'sphere',
radius: 0.6,
position: [4, 1.2, 0],
}));
// 4. Add Player Character
const player = game.add(kccPlayer({
id: 'hero',
position: [0, 1.5, 0],
moveSpeed: 6.5,
}));
// 5. Handle Gameplay Events
game.events.on('sensor.enter', ({ sensor, target }) => {
if (sensor.id === 'golden_coin' && target.id === 'hero') {
game.audio.play('coin_pickup');
game.vfx.spawnParticles({ count: 16, position: [4, 1.2, 0] });
coin.destroy();
}
});
// 6. Run headlessly (CI/Tests) or start interactive render loop (Browser)
game.step(60); // Step 60 fixed ticks in ~1ms (Headless CI)
// game.start(); // Start 60fps presentation loop (Browser)
๐ค AI Agent Integration (MCP Server)
Connect Claude Desktop, Antigravity, Cursor, or any MCP client directly to your simulation:
{
"mcpServers": {
"renderoni": {
"command": "npx",
"args": ["renderoni", "mcp"]
}
}
}
Built-in MCP Tools:
describe: Returns active entities, colliders, tags, and engine schemas.observe: Returns ultra-dense Tier 0 Markdown summaries (<500B / ~120 tokens) with positions, velocities, and game state.act: Injects deterministic semantic gameplay actions (game.act({ name, payload })).step: Advances the simulation by $N$ fixed ticks and returns state hashes.check: Evaluates machine AST assertions.
๐งช Headless Testing with Vitest
Run complete game integration tests headlessly in Node.js in under 10ms with custom Vitest matchers:
import { expect, test } from 'vitest';
import { createRenderoni } from 'renderoni';
import { kccPlayer, sensor } from 'renderoni/presets';
import 'renderoni/testing/matchers';
test('player collects coin and verifies state hash', async () => {
const game = await createRenderoni({ mode: 'headless', seed: 42 });
const hero = game.add(kccPlayer({ id: 'hero', position: [0, 1, 0] }));
const coin = game.add(sensor({ id: 'coin', position: [3, 1, 0] }));
hero.actions.move({ x: 1, z: 0 });
game.step(60);
expect(game).toHaveTick(60);
expect(hero.position[0]).toBeGreaterThan(1.5);
expect(game).toHavePassedDiagnostics();
});
๐๏ธ Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ L3 APPLICATION โ
โ Game Rules, Custom Assets, Levels, Shaders, UI Layouts โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ L2 TOOLING & AGENTS โ
โ Built-in MCP Server (stdio/SSE), Vitest Matchers, Live Inspector โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ L1 BATTERIES & SUBSYSTEMS โ
โ Spatial Audio โข Skeletal Animation โข UI Projections โข VFX Emitters โ
โ Declarative Presets: body, sensor, light, kccPlayer, dynamicPlayer โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ L0 DETERMINISTIC KERNEL โ
โ Integer Tick Clock โข Seeded PRNG โข Dual-Buffer Transform Pipeline โ
โ Quantized State Hashing (XXH3) โข Resource Ownership Tracking โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ NATIVE ENGINES โ
โ Three.js (WebGL / WebGPU) โ @dimforge/rapier3d-compat (WASM) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ License
MIT ยฉ Esteban Leandro Marรญn
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.