Skip to main content

Limits and performance

Read this page as Markdown · All docs for AI agents

Your world must fit every applicable budget. Decimal MB means 1,000,000 bytes.

LimitMaximum
Placed entities1,000,000
Estimated runtime memory500 MB
Total world download100 MB
JSON save request, including the world manifest64 MB
Creator uploaded asset library100 MB
Files in your model and panorama library512
Prop upload attempts60 per rolling hour
Panorama upload attempts12 per rolling hour
Draft save attempts300 per hour, up to 512 MB of submitted documents
MCP JSON request20 MB; use the HTTP draft route for larger documents
Individual GLB, before and after conversion4 MB
Placed triangles, including repeated instances20,000,000
Decoded texture pixels per world32,000,000
Prop render batches2,000
Players in one world50
Worlds per creator3
Upserts / removals in one MCP edit1,000 each

Read the budget after saving​

Draft saves return a budget object. Track entities, bytes and memoryBytes as your AI builds. bytes counts the manifest, a standard-asset allowance and each distinct uploaded GLB once. memoryBytes estimates runtime cost from entities, instance data, collision data, decoded geometry and textures. Your device's actual memory use varies.

Repeated placements reuse an asset's download, geometry and textures. Each placement still adds entity data, instance memory and rendered triangles. A world can reach its memory or download budget before its entity limit.

Prop batches group copies of the same asset within an 8 × 7 × 8 spatial cell. Each mesh/material part adds a batch. Check budget.propBatches after saving; spread-out, multi-material models can reach this limit before the triangle budget.

Upload attempts include failed conversions. Browser, HTTP and MCP uploads share your creator allowance. Send original bytes without HTTP Content-Encoding. Finish sending each request within 30 seconds. When the API returns 429, respect retryAt or Retry-After; do not retry in a loop. A 503 means processing or storage capacity is temporarily unavailable. Asset downloads also share per-client and server byte/concurrency budgets. Keep immutable asset URLs cached and use their ETag for conditional requests.

See the World HTTP API for save responses and world format for document fields. Current values are also available as limits.json.

Build for phones as well as desktop​

  • Reuse GLBs for repeated furniture, trees and architectural pieces.
  • Use a few broad meshes for floors and walls, and keep material counts small.
  • Combine related textures into compact atlases.
  • Keep walkways clear and avoid layers of overlapping geometry.
  • Preview your world on your target devices as you build.

Props render in spatial groups with shared geometry and materials. Their collision follows oriented bounding boxes; split an arch into separate solid pieces when players need to walk through it.

Loading and empty worlds​

Players download your published document and assets with a progress screen before joining. Cached assets can speed up return visits. Switching worlds releases the previous 3D scene's rendering resources.

Empty worlds remain saved and discoverable. Their full scenes and transient room state are unloaded when nobody is playing. Your AI can still download and edit a saved draft. Accepted bets finish settling even if their players leave.

Terrain and panoramas​

Generated terrain is 128–512 units wide with a fixed 192 × 192 grid. A panorama accepts up to 12 MB input and 8 MB canonical WebP output, up to 8192 × 4096 dimensions within a 16,777,216-pixel cap. Models and converted images share the 100 MB library quota. Referenced backgrounds count toward world download, texture and memory limits; generated terrain counts toward geometry and memory. See terrain and backgrounds for the complete contract.