Documentation
Guides for building 3D worlds, games, and apps with the Zero engine and Luau, plus the full engine API reference. Zero is OrigoZero's browser-based 3D game engine, built for AI agents and scripted in Luau, not the DigiPen Zero Engine or the Agent Zero AI framework.
Introduction
- Zero
Welcome. Zero is a 3D engine you drive with Luau, working inside a live, shared world.
- The content graph
Everything you author in a world — a scene, a component, a module, a material, an asset type — is an asset in one shared…
Overview
- Welcome to the Zero docs
Documentation for the Zero engine: guides for building 3D worlds and games with Luau, plus the full engine API reference, all published through ZeroMind.
- ZeroMind, the shared capability network
ZeroMind is the service behind origozero.ai: the shared versioned library where everything built with the Zero engine becomes installable in another world.
- Publishing to ZeroMind
How finished worlds and assets move from the engine into ZeroMind, the shared versioned library other people and agents pull from and build on.
- What makes Zero different
Zero is an agent-first 3D engine where every part of a world is a versioned asset: validated at publish, forkable, and installable into any other world.
- An engine where capability compounds
Zero and ZeroMind are built on one idea: every finished piece of work becomes a reusable capability, so each project makes the next one easier.
- Showcase: built by agents on Zero
What AI agents built on Zero: a Game Boy Color emulator, DOOM's first chapter from the WAD, a JavaScript runtime, unmodified three.js, hundreds of casual games.
Core
- Getting started
This is the one read that shows how the pieces fit together.
- Worlds & ZeroMind
A world is the project you're working in — all of its entities, scenes, components, materials, and code.
- Scenes
A scene is a loadable arrangement of a world — its entities (with their components, transforms, and lighting), plus a startup script — saved as a .scene asset.
- The engine
Working in Zero means working inside a live, shared world.
- ECS
You work with the ECS layer through ecs. and entity. — two views of the same thing. entity. spawns and finds the entities…
- Entities
An entity is a named handle with a stable id, a transform, and a place in a hierarchy. On its own it does nothing — it has no shape, no physics, no behaviour.
- Components
A component is the primary unit of gameplay code: a piece of behaviour + data attached to an entity.
- Requiring modules
require is how one piece of Luau pulls in another. You hand it a string; it hands you back the table that module returned.
- Generating assets & content
You're building something — a scene, a game, a level — and you need an asset that doesn't exist yet: a 3D model of a dragon, a door-slam sound…
- Scripting & tasks
Two kinds of code run in Zero, and it's worth knowing which you're writing:
- Runtime data
runtime_data is a world's persistent, replicated data layer — where you keep state that must survive restarts and reach every player: progression…
- Assets & asset types
The asset system is the backbone of a Zero world.
- The filesystem (VFS)
The engine's state is exposed as a filesystem under /zero.
- The tool system
Tools are how the engine's capabilities become named, discoverable workflow operations.
- Multiplayer
Zero is multiplayer by default — in both edit mode and play mode.
- Discovering the engine
You don't need to memorise this engine. Its surface is discoverable in layers, and the order matters: the jobs it already knows how to do…
- Development & versioning
A world is a shared, multi-user editor session.
- Performance: run each job where it belongs
Zero executes your logic in two very different worlds. Luau is flexible, per-object, and serial. The engine core and the GPU are bulk and parallel.
- Authoring content other people can use
Everything you write here is read by somebody else — another creator, another agent, or you in a month with none of today's context.
- Describing your assets
An asset is only as findable as its description is clear. When you make something, say what it is, in a few plain sentences.
- Home: your own folder, in every world
/zero/home/<username> is a folder that follows you, not the world.
- Observing a running world
You have a running world and a question about a moment in it.
- Building a plugin
A plugin is a WebAssembly component that a world calls the way it calls a module.
- The resource model: asset, CPU, and GPU
Read this before working with any mesh, texture, material, or shader.
- Scenes, authored as code
A scene can say what it holds in code. build.luau inside the scene's folder is where the scene's content is written — all of it…
- Troubleshooting
Something you built doesn't behave — a component never runs, a weapon never equips, a value comes back nil, a mesh isn't where it should be.
- Version control
A world's history, branches and reviews are handled by ZeroMind — Zero's own version control system.
Topics
- Showing an animated image
An animated GIF, APNG or animated WebP imports as one texture carrying every frame: one layer per frame, plus the display time each frame was authored with.
- Animation
Animated models in Zero carry named clips (idle, walk, run, …).
- Audio
Audio in Zero is built from two components. An Audio component makes an entity emit sound from a .soundClip asset.
- The shell
bash is a complete bash shell running inside the engine, over this world's files and the engine's live state.
- Building a game — the play-mode authoring loop
A game in Zero is a scene the world loads: its entities, their components, the player avatar, and the camera.
- Byte streams: talking to things outside the engine
A world often needs to speak to something that is not part of it — a socket on another machine, an external process on localhost…
- Camera input: a webcam or phone camera in the world
The camera global and the Camera component are the world's own cameras, the ones the scene is rendered through.
- Cameras — which one is rendering, with what projection, into what
A camera is an entity carrying a Camera component.
- Cutscenes
A cutscene is the moment your game takes the camera off the player: the opening that establishes where they are, the door that opens once, the ending.
- The editor UI
Everything you see when you edit a world — the menu bar across the top, the dockable panels, the play controls — is world-side Luau content…
- Engine API in an external editor
The engine describes its whole Luau API (every global namespace, method signature, published type alias and asset-category surface) as a Luau definitions file…
- Streaming frames out of the engine
Sometimes the rendered image has to leave the machine.
- Graphics quality on phones and desktops: the device's quality tier
How the engine fits its rendering to the device a world is played on: a phone, a tablet, a laptop, a desktop or a browser.
- Serving HTTP from the running world
Sometimes something outside the engine has to reach in.
- Inverse kinematics
An animation clip stores joint angles. Play it and the character does the same thing every time…
- Input
A player might be at a keyboard, holding a controller, or tapping a phone.
- The player's language
Every engine knows which languages its player reads, on every platform, and picks from one chain.
- The microphone: sound coming in
The audio guide is about sound the world makes. This one is about sound the world hears — audio input from the machine it is running on.
- Physics
Physics in Zero has two surfaces, reached in two different ways:
- Ray tracing
Cast rays against the live scene from a compute shader and shade with the hits — shadows, ambient occlusion, reflections, GI.
- Recording: filming the world and keeping the video
av turns what the engine draws into a video file: a clip a player captures of something fun, a replay, a trailer or cutscene filmed frame by frame…
- Render layers
A render layer is a name. An entity is a member of one or more layers; a camera draws a filter over them ("all !shell").
- Render textures
A render texture is a camera's view drawn into a texture instead of onto the screen.
- Rendering
Most of how a scene looks comes from its content — meshes, materials, and lights.
- Quality tiers, render target cost and loaded content
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Debug camera views
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- What drawing costs: culling, materials and crowds
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Morph targets, clusters and lines
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Per-entity shader data
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Lighting and global illumination
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Material graphs
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Motion blur and the velocity buffer
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Post-process
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Reflections
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Render features
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Asking where the drawn world is along a ray
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Scene-wide renderer settings
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Shadows: budgets, casters and what each light costs
Part of the rendering guide (guides { path = "topics/rendering" }), which lists every part.
- Styling
Every visual property of a widget lives in one table — the style table on the widget node — and the vocabulary is CSS.
- Text and labels
Text in a world comes from one place: a text object the engine holds, laid out against a font database and rasterised into a GPU texture.
- The UI window system
UI in Zero is declarative and immediate-mode: you describe the interface as a tree of widget tables and register it as a named screen…
- Visual effects
A visual effect in Zero (sparks, fire, smoke, magic, an impact, a muzzle flash, a swarm, lightning) is an entry of an effect…
- World detail — terrain, voxels, streaming, LOD
Four systems decide how much of a world stands at any one moment:
API Reference
- agentSessions
agentSessions is a Luau API namespace of the Zero engine, holding 4 functions: forget, get, put and record.
- animation
Observe what the engine is animating: every body it is posing, the clips driving each one and where their playheads are…
- asset
Asset resolver, ref envelope builder, sidecar metadata.
- audio
Engine-native audio: encode audio (or raw PCM) into the ZAUD compressed payload, decode/inspect it, set what the mix is heard at, a level per named channel…
- av
Audio/video encode + mux control: live streaming, recording, encoder/muxer primitives.
- base64
Base64 encode / decode between binary and text Luau strings (standard RFC 4648 alphabet, padded).
- blend
Record-stride blend primitives over Buffer slices: layout registry + weighted/lerp combiners.
- bundle
bundle is a Luau API namespace of the Zero engine, holding 1 function: update.
- camera
Script-facing camera queries: the main scene camera, the on-screen render camera, the editor fly-camera, per-frame view data, and the camera observation…
- cameraInput
Physical cameras as live textures and pixel sources: list the capture devices (a webcam, a phone's front and back cameras), open one as a feed…
- channel
Keyframe-channel sampling primitives: registry + sampleInto variants.
- color
Color construction, conversion, and perceptual ops (RGB / HSL / HSV / Oklch / hex).
- ColorSequence
ColorSequence is a Luau API namespace of the Zero engine, holding 2 functions: deserialize and new.
- component
component is a Luau API namespace of the Zero engine, holding 20 functions, among them data, entity, entityId, instanceId and add.
- compute
GPU compute pipelines: compile shaders, dispatch workgroups, read back results.
- cursor
cursor is a Luau API namespace of the Zero engine, holding 2 functions: clear and set.
- debugger
Luau debugger: breakpoints, stepping, stack inspection, watches.
- ecs
ecs is a Luau API namespace of the Zero engine, holding 40 functions, among them AudioListener, AudioSource, Camera, Collider and CollisionGroups.
- egress
Credential-injecting HTTP for BYO-key world egress (Mechanism B).
- engine
engine is a Luau API namespace of the Zero engine, holding 48 functions, among them discardPlayChanges, editWaiters, engineRecord, gameplayReady and gpuCompute.
- entity
Entity spawn / despawn / query / hierarchy surface.
- Entity
Entity wrapper namespace. Also reachable as the lowercase entity(...) proxy constructor.
- environment
Environment / reflection capture: bake the scene into reflection-probe cube slots from world positions, persist them as faces6.texture assets…
- Field
Field is a Luau API namespace of the Zero engine, holding 24 functions, among them alias, assetRef, bitmask, bool and check.
- font
Font primitive: parse a font file ONCE into a baked, vectorized glyph format (ZFNT), then drive every text surface from it.
- frameStream
Carries an image the GPU drew out to another program: the view a camera renders…
- globals
globals is a Luau API namespace of the Zero engine, holding 1259 functions, among them deserialize, new, Entity, allTypes and distance.
- home
The person's home folder, /zero/home/<username>: their own files, carried from world to world in the editor.
- http
Async HTTP: GET/POST returning JSON or raw bytes.
- httpServer
Serve HTTP from this engine.
- i18n
The player's language, and which of your world's languages to show them. i18n.pick({"en", "pt", "es"})…
- input
input is a Luau API namespace of the Zero engine, holding 41 functions, among them armObservation, backUnanswered, emulateKeyDown…
- jobs
jobs is a Luau API namespace of the Zero engine, holding 21 functions, among them context, dispatch, find, inspect and list.
- layers
Top-level scene-management namespace + Scene proxy. Owns the public layer-management API surface exposed on _G.layers.
- library
Discover, check, and import library assets: the @builtin/ tree the engine ships and the @namespace/ trees imported from other worlds.
- live
live is a Luau API namespace of the Zero engine, holding 1 function: isConnected.
- log
log is a Luau API namespace of the Zero engine, holding 4 functions: debug, error, info and warn.
- logs
Read-only query surface over the engine's in-memory log ring buffer.
- lsp
Embedded Luau language server: check / search / inspect.
- luau_codegen
luau_codegen is a Luau API namespace of the Zero engine, holding 3 functions: chunk, chunks and status.
- luau_profile
Sampling profiler + manual regions for Luau scripts.
- Material
Material helpers namespace.
- mathx
Batch math kernels over buffer slices (damp, lerp/slerp, transform).
- mcp
mcp is a Luau API namespace of the Zero engine, holding 4 functions: call, image, listTools and poll.
- mcpLog
Read-only MCP tool-call log ring buffer.
- microphone
Capture from an input device and read what is arriving: a loudness, a magnitude spectrum, and the raw PCM.
- modelImport
The model-import pipeline: decompose any assimp-supported 3D model (fbx, obj, dae, gltf, glb, stl, ply, 3ds) into meshes, materials, textures…
- modules
modules is a Luau API namespace of the Zero engine, holding 2266 functions, among them getInstructions, getManifest, getReadme, inspect and onChange.
- multiplayer
Multiplayer sync state and operations: connection, peers, ownership, rooms, undo/redo.
- notices
Post an event record that surfaces to the callers it is addressed to on the response of the tool call that posted it, or on their next tool call.
- NumberRange
NumberRange is a Luau API namespace of the Zero engine, holding 1 function: new.
- NumberSequence
NumberSequence is a Luau API namespace of the Zero engine, holding 2 functions: deserialize and new.
- nx
nx is a Luau API namespace of the Zero engine, holding 67 functions, among them add, addStrided, addStridedFrom, applyAbs and applyCeil.
- packages
Discover and inspect registered packages (folders marked with package.yaml).
- physics
Lowercase alias of Physics. Same identity. Prefer this in new code so the convention matches entity, scene, cam.
- Physics
Physics namespace: collisions, joints, raycasts, body manipulation.
- plugins
What the plugin host loaded, and the one way to call a plugin.
- postprocess
Fullscreen post-process effects: register / remove / toggle / named-property updates / list the chain / read one effect's declared property schema…
- preset
Preset namespace: apply named tuning bundles to components.
- profiler
Frame-level profiler capture, EMA stats, and named profiling blocks.
- Random
Seeded random-number generators.
- reflectionProbe
Reflection-probe system: multiple proximity-blended reflection probes in a scene.
- renderer
GPU-resource factory + CPU codec/store wrappers: the GPU/CPU half of the asset↔resource split.
- scopes
Scopes: work you start together and that ends together, tied to what started it (an entity, a component, a scene, another scope)…
- service
Credit-metered service invoke, buffered or streamed.
- settings
settings is a Luau API namespace of the Zero engine, holding 7 functions, among them all, get, getBool, getNumber and getString.
- shader
Shader compilation: turning authored WGSL into registered GPU programs, and the reusable modules those programs include.
- shell
Engine emulated Unix shell: same shell that powers the MCP bash tool.
- skeleton
The skeleton pose-data pipeline: sample a clip into a pose buffer, and bind/apply a pose buffer onto a Skeleton + Model entity.
- sky
Sky configuration: type, time of day, day/night cycle, procedural parameters, presets, explicit sun direction.
- stream
Named byte streams by URL scheme: TCP, tty, Bluetooth Low Energy and loopback transports, dialled out or listened…
- streaming
What the engine has resident of a world's detail right now, and why a piece of it is not on screen.
- stringx
Batch text-scanning kernels: read a whole run of numbers out of a string in one call.
- subscriptions
Runtime inspection and cancellation of component-event subscriptions.
- substrate
Typed data buffers, on the CPU or the GPU: the engine's one buffer primitive.
- task
task is a Luau API namespace of the Zero engine, holding 29 functions, among them active, await, background, batched and bindCaller.
- terminal
terminal is a Luau API namespace of the Zero engine, holding 7 functions, among them create, destroy, kill, list and poll.
- text
Text rasterisation resource: create a text handle, set its content and style, then rasterise it to a texture for display…
- time
time is a Luau API namespace of the Zero engine, holding 6 functions, among them deltaTime, drawnFrameCount, frameCount, realtime and time.
- toml
toml is a Luau API namespace of the Zero engine, holding 3 functions: encode, parse and replaceArrayTables.
- tools
tools is a Luau API namespace of the Zero engine, holding 360 functions, among them __useVia, bind, callable, create and createToolbox.
- Transform
Math helpers for positions, rotations, and directions on transforms.
- typed
typed is a Luau API namespace of the Zero engine, holding 1818 functions, among them build, flushPendingPersists, forgetRuntime…
- ui
UI system: screens, styles, themes, widget responses, focus, custom-widget builders, per-widget state.
- userfile
The files of the person at the screen, both ways. pick opens their own file picker (native OS dialog / Android / web browser) and brings the chosen file(s)…
- vfs
Virtual filesystem: read, write, list, watch.
- video
Video playback: create / play / pause / seek / setRate / setLoop / destroy on render-target-backed video players.
- world
world is a Luau API namespace of the Zero engine, holding 93 functions, among them add, add_all, affirm, args and assetInstallable.
- ws
ws is a Luau API namespace of the Zero engine, holding 6 functions, among them close, connect, liveness, poll and recv.
Types
- agentSkill
A skill packages what an agent needs to do one job well: the instructions, the assets and toolboxes the job runs through…
- animation asset type
A single animation clip, as a composite asset. The folder <name>.animation/ carries:
- assetType (asset type)
The assetType is the type of types — the meta-type that every <typename>.assetType/ folder is an instance of, including itself.
- avatar
A playable character, composed from three independent parts:
- avatarType
An avatar type describes a kind of body: a humanoid, a quadruped, a vehicle.
- Bundle (asset type)
A bundle is a composable, spawnable entity assembly— a saved entity hierarchy plus its components, sub-assets…
- Component (asset type)
A component is a reusable behavior + data unit attached to an entity.
- Compute shader (asset type)
A .computeShader is a GPU compute (GPGPU) program with a zero-scaffolding authoring contract: you write only @compute fn main(...)…
- data (asset type)
A .data instance is a configured value binding to a dataType contract…
- dataType (asset type)
A dataType is a user-authored typed-data contract: it declares a set of fields — names, types, constraints, defaults…
- dynamicAsset (asset type)
A prompt-driven, self-regenerating 3D asset.
- editorLayout
An editor dock arrangement as an asset: a <name>.editorLayout/ folder whose layout.yaml names either the panels the arrangement holds…
- editorPanel
A dock tab in the editor, as an asset. A <name>.editorPanel/ folder carries an init.luau that returns the tab's spec:
- effect
A set of visuals packaged as one thing: every impact a weapon makes, every stage of an explosion, the muzzle flash, impact and tracer of a gun.
- .font asset type
A .font is a first-class font asset: font-file bytes (TTF / OTF / WOFF / WOFF2) converted into a guid-anchored asset via asset.create…
- gaussianSplat
A photographic capture of a real place, stored as a cloud of oriented 3D Gaussians rather than as triangles.
- guide
A guide is a single-file documentation asset: a <name>.guide/ folder whose body is guide.md, surfaced through the guides MCP tool…
- Importer (asset type)
An importer is a Luau function that converts a source file (GLB, PNG, CSV, custom binary) into one or more derived assets registered in the engine.
- inputBinding assetType
One control in a scheme — jump, move, boost — expressed as an asset.
- Input macro (asset type)
An input macro is a recorded or hand-authored sequence of input simulation events — keystrokes, mouse moves, button clicks, scroll wheel deltas…
- inputMap assetType
A control scheme, expressed as an asset.
- lightmapData
A baked-lighting container: ONE asset per scene holding every baked lighting payload the GI bake flow produces…
- loadingScreen
The screen players see while your world loads, as an asset: a <name>.loadingScreen/ folder whose screen.yaml states the title, a line of text or rotating tips…
- Material (asset type)
A material is a named, configured instance of a .shader.
- mesh
A mesh is renderable geometry — vertices and triangle indices, and, for a skinned mesh, the per-vertex skinning data that binds it to a skeleton.
- Module (asset type)
A module is a reusable, stateless (or globally-stateful) Luau library that other code pulls in with require().
- Nodebox (asset type)
A nodebox is a namespace folder that groups related .procNode/ children, the way a toolbox groups .tool/ children.
- Package (asset type)
A package is an asset — a <Name>.package/ folder that bundles components, modules, scenes, presets, tools, and any other typed sub-assets under one identity…
- pixelTemplate (asset type)
A saved, reusable pixel-art sheet. A <name>.pixelTemplate/ folder asset carries a JSON payload template.pixbin…
- plugin
Compiled code in a world, used the way a module is.
- population
A hardware-instanced population at rest: one mesh drawn at every transform of a baked placement, as ONE draw call per variant at any instance count.
- Preset (asset type)
A preset is a named set of typed values for one declarer's settings schema: the texture assetType's, an importer's, a component's…
- procGraph (asset type)
A .procGraph asset is a procedural graph: a description of how to make something, written as code, that can be evaluated over and over with different numbers.
- procNode: one reusable step of procedural generation
A .procNode is a node authored as content: a folder whose init.luau is the node.
- procPack — a family of procedural ops as content
A .procPack is a FAMILY of procedural operations authored as content: a folder whose init.luau returns a pack table.
- procRecord: a kind of record a graph makes and saves
A .procRecord defines a kind of value a procedural graph moves that becomes an asset when it is saved: a material, a mesh, a texture…
- renderFeature
A render feature inserts custom GPU passes into the frame pipeline.
- rig asset type
A skeleton, as a composite asset. A rig is its own primitive — not a mesh and not an animation. The folder <name>.rig/ carries:
- Scene (asset type)
A scene is a saved, loadable snapshot of an entity scenegraph inside a world: the entity hierarchy, transforms, components, lighting…
- sceneModule — a part of a scene, authored as code
A .sceneModule is a recipe for scene content: a folder whose init.luau declares the inputs a placement may set and returns the function that builds the content.
- Service (asset type)
A service generates content you don't have yet — a 3D mesh, an image, a PBR material, a sound effect, a humanoid animation, a navigable splat world…
- serviceRun
The durable record of one service generation — what was asked for, which gateway job is doing it, and what state that job reached.
- Shader (asset type)
A shader is a WGSL program that runs on the GPU.
- Shader module (asset type)
A .shaderModule is a block of WGSL that other shaders include rather than copy — a lighting model, a set of colour-space helpers, one package's shared prelude.
- soundClip
An audio asset — a managed container holding a sound effect or music track, addressed by the .soundClip suffix.
- Style (asset type)
A style is a UI design-token bundle: colour palette, spacing scale, typography pairs, and the widget classes built from them.
- terrainData
A landscape's baked data, as one asset.
- Test Suite (asset type)
A test suite is a registrable asset that bundles one group of automated engine tests.
- texture
An image asset — the raw bytes of a png / jpg / jpeg / hdr / ktx2 / webp / bmp / tga file. Loose image files under a textures/ directory classify as texture.
- Tool (asset type)
A tool is a single agent-callable function whose schema is its typed function signature.
- Toolbox (asset type)
A toolbox is a namespace folder that groups related .tool/ children plus shared helpers.
- Voxel Template (asset type)
A voxel template is a reusable, named voxel grid that live instances link to.
- workflow
A job whose shape is a program.