Review & budgets
We publish our review criteria in full, on purpose: if you can see the bar, you can clear it. Every submission — every version — passes the same gates, and the same checks run inside Studio while you author, so a rejection is never a surprise. Machines check safety and performance; a human decides what publishes.
The gates, in order
- Extract — archive sanity and size.
- Static analysis — imports may be the world SDK,
three, and a fixed set ofthree/addons/*only. Noeval, dynamicimport(), network APIs, storage, timers, ambient globals, realm/prototype tricks, or absolute-URL literals;documentonly ascreateElement('canvas'). v1 worlds are fully procedural (no external assets). The full list is in agents.md. - Typecheck — against the pinned world-SDK types.
- Rebuild — with SYQEL's pinned toolchain. The fleet only ever runs bytes SYQEL built.
- Behavioral — your world is built headless under instrumentation; any attempted network or global access fails the gate.
- Budgets — the table below.
Then human review, then publication into the signed channel. Apps verify the channel signature and each module's integrity hash before anything renders. A published world can be delisted by you, or revoked by SYQEL — revocation removes it fleet-wide.
Performance budgets
Calibrated on real TV hardware (Fire TV Stick 4K Max, Apple TV 4K).
| Budget | Limit | Why |
|---|---|---|
| Source archive | ≤ 2 MB | Submissions are source, never bundles — SYQEL rebuilds them. |
| Built bundle | ≤ 256 KB | Weight belongs in CDN assets, not code. |
| Staged build | ≥ 5 slices, no slice > 40% of a real build | TVs take frames between slices. |
| Draw calls (est.) | ≤ 300 | The difference between 57 fps and 25 fps on a TV. |
| Triangles | ≤ 600k | |
| Textures | ≤ 2048×2048 each, ~64 MB total | Procedural — painted in a canvas. |
| Built bundle | ≤ 256 KB | Worlds carry no external assets in v1. |