Choosing lite or full
Pick the stack that matches how you ship animation—not just how you author during development.
Decision table
| Need | Full Backstage | Backstage Lite |
|---|---|---|
| Timelines & keyframes on props | Yes | No |
sheet.sequence.play() / scrubbing in production | Yes | No (stub only) |
| GSAP bridge / clip tracks in Studio | Yes | No |
| Page scroll or other sequence modes | Yes | No |
| Static prop values + export JSON | Yes | Yes (primary workflow) |
| Per-sheet variants (breakpoint layouts, quality tiers) | Yes (static + per-variant timelines) | Yes (static overrides only) |
| Smaller production bundle (no interpolation/playback code) | No | Yes |
| Open same JSON in full Studio later and add sequences | — | Yes |
Static + variants JSON workflow (lite sweet spot)
- Develop with
@unseenco/backstage/studio-liteand@unseenco/backstage/core-lite(or studio-lite on full core while prototyping). - Author static values and variant folders in the outline; export project JSON from the outline toolbar.
- Ship with
getProject(id, { state })and no studio package in the bundle. - At runtime, call
declareSequenceVariantswith the same ids you used in Studio, thensetActiveSequenceVariantwhen breakpoints or prefs change. - Wire
onValuesChange(or Three.jsautoAddObject) to apply values.
If you later need one prop to animate over time, migrate to full packages—the exported state stays compatible (Upgrading to full).
When full Backstage is the better default
- Marketing sites with hero timelines, choreographed UI, or audio-synced motion.
- Games or tools that scrub or loop sequences from code.
- Teams already using @unseenco/backstage/gsap or scroll-driven sheets.
When lite fits
- Design-system-driven UIs: spacing, colors, copy, layout per variant.
- Three.js scenes where transforms/materials are tweaked statically per variant, not keyframed.
- Production bundles where every KiB of sequence machinery matters.
See Overview for package names and licenses.