Build on Holoforge
Everything you need to create, publish, and grow browser-based 3D games.
Quick Start
Build a world in 30 seconds
Open Studio, click AI Scene in the top bar, type a scene description, pick your AI provider, and hit Generate. The world appears instantly.
Sculpt by hand
Switch to the Sculpt tool (S key) to push, pull, flatten, or crease geometry. Use symmetry mirrors for organic shapes. The Mask Brush lets you protect areas while sculpting the rest.
Play mode
Press P to enter first-person play mode. WASD to move, Space to jump, Esc to exit. Great for testing your world before publishing.
Publishing Games
Prepare your ZIP
Package your game as a ZIP file with index.html at the root. Any assets (JS, CSS, images) should be relative paths.
my-game.zip/
├── index.html ← entry point
├── main.js
└── assets/
├── sprite.png
└── audio.mp3Upload & publish
Go to Publish in the nav, fill in your game info, drag in your ZIP, and hit Publish. Your game is live at holoforge-web.vercel.app/g/<slug> instantly.
Visibility
Public games appear in Browse. Unlisted games are accessible via direct link only. Private games are only visible to you.
AI Scene Generator
Supported providers
Scene generation: Claude (Anthropic), GPT-4o (OpenAI), Gemini (Google), Mistral, Grok (xAI), Command R+ (Cohere), DeepSeek. 3D model generation: Meshy AI, Tripo3D. Your API keys are stored only in your browser — never on Holoforge servers.
Prompt tips
Be specific about atmosphere, lighting, and materials. The AI understands fog density, ambient light intensity, and material types like neon, glass, metal, and ice.
Example prompts
Try these to get started:
"Foggy mountain valley with glowing cyan crystals"
"Volcanic island — lava-red terrain, pulsing neon formations"
"Sunken ruins — dark teal fog, pale icosahedra floating like jellyfish"
"Neon city rooftop — metallic boxes, spinning torus lights, heavy haze"Holoforge SDK
Installation
The SDK gives your game access to player accounts, leaderboards, storage, marketplace, and server events.
import { HoloforgeSDK } from "holoforge-sdk"
const hf = new HoloforgeSDK()Get current player
Returns the authenticated Holoforge user if the game is being played while logged in.
const user = await hf.user()
// { id, username, avatarUrl? }Leaderboards
Submit and retrieve scores for your game. Scores are scoped to your game ID automatically.
await hf.leaderboard.submit({ score: 1337, player: "Runner01" })
const top = await hf.leaderboard.top(10)
// [{ rank, player, score, ts }, ...]Storage + Marketplace + Server
Use per-player storage, runtime marketplace purchases, and server-side authoritative actions.
await hf.storage.set("checkpoint", { level: 3, hp: 82 })
const checkpoint = await hf.storage.get("checkpoint")
const catalog = await hf.market.catalog({ q: "sword", sort: "popular" })
await hf.market.purchase("item_abc123")
await hf.server.event("score.add", { amount: 100 })REST API
List games
Returns all public games with optional filtering.
GET /api/games?q=neon&tag=Racing&sort=plays
// Response
{ games: [...], total: 42 }Get game
Returns a single game record by slug ID.
GET /api/games/:id
// Response
{ game: { id, title, author, plays, cdnUrl, ... } }Increment plays
Call this when a player loads your game to increment the play counter.
POST /api/games/:id?action=playSubmit a score
POST a score to a game's leaderboard. player defaults to 'Anonymous' if omitted.
POST /api/leaderboard/:gameId
// Body
{ score: 1337, player: "Player1" }
// Response
{ ok: true, rank: 4 }Get top scores
Returns the top N scores for a game (default 10, max 100).
GET /api/leaderboard/:gameId?n=10
// Response
{ scores: [{ rank, player, score, ts }, ...] }AI Scene Generator
Generate scene commands from a natural language prompt.
POST /api/generate
// Body
{
prompt: "foggy mountain valley",
provider: "anthropic",
model: "claude-sonnet-4-6",
skillPreset: "threejs-visualizations", // optional
apiKey: "sk-ant-..."
}
// Response
{ commands: [{ cmd: "addObj", type: "terrain", ... }, ...] }