Reference
Production readiness
Limits, benchmarks and gates.
What is measured, what to design around, and what is not verified yet. The numbers come from the engine's stress suite, which runs nightly in CI under software rendering (SwiftShader), the slowest case. The one-hour export was measured on a developer laptop. Treat them as regression benchmarks, not guarantees for your hardware.
Measured
| Workload | Result | Where |
|---|---|---|
| Playback: 149 clips on 10 tracks, with effects, transitions and captions | Playback keeps tracking the clock: median lag 2 frames, p95 19 frames. Deep seeks recover | CI, software rendering |
| Export: a one-hour timeline (2,641 clips, 86,400 frames, an hour of audio), streamed to disk | 984 MB written, 165 MB JS heap peak, 1.6× realtime | Developer laptop |
| Decoder churn: 20 assets through the 4-decoder cap, plus a 30-seek scrub storm | Every paused seek lands on the exact frame | CI, software rendering |
| Server export: 3 exports in parallel | All outputs valid, no interference between jobs | CI, software rendering |
Memory figures are JS heap, not whole-process memory.
Design around these
| Limit | What to do |
|---|---|
| A buffered export holds the whole file in memory | For long outputs, stream: pass target (a WritableStream) to exportProject in the browser, or out (a file path) on the server. See Browser export and Server export |
| At most 4 assets decode at the same time (engine default) | Sequential timelines of any length are unaffected. The cap is maxActivePipelines on MediaManager; createPlayer doesn't expose it |
| MP4 export needs real Chrome or Edge | Free Chromium has no H.264 encoder. Use WebM there, or install Chrome on export servers |
Not verified yet
Treat these as open until numbers are published:
- Playback smoothness percentiles on real devices
- Seek latency under rapid seeking
- Hour-long source files
- Process-level memory (the figures above are JS heap)
- Failure recovery
- Sustained server concurrency
Run the stress suite
In a clone of the engine repo:
pnpm stress| Env var | Default | Meaning |
|---|---|---|
STRESS_MINUTES | 5 | Length of the long-export timeline |
STRESS_MIN_FPS | 5 | Export throughput floor |
STRESS_MAX_LAG_FRAMES | 30 | Playback tracking tolerance. Tighten it on real hardware |
STRESS_PARALLEL | 3 | Concurrent server exports |
Results append to apps/playground/stress-results.json. Set the knobs to your scale; a run on your hardware tells you more than the CI numbers.