Upgrading lite to full Backstage
Backstage Lite is designed so you can ship static JSON first and adopt timelines later without rewriting object addresses or prop schemas.
1. Swap dependencies
At the same monorepo version line:
yarn remove @unseenco/backstage/core-lite @unseenco/backstage/studio-lite
yarn add @unseenco/backstage @unseenco/backstage/studioUpdate imports:
import {getProject, types} from '@unseenco/backstage'
import studio from '@unseenco/backstage/studio'If you use Three.js, point peers at full core/studio; keep @unseenco/backstage/threejs unchanged.
2. Keep application code mostly the same
These stay identical:
- Project id and
getProject('My App', { state: json }) project.sheet(),sheet.object(key, props),sheet.props()declareSequenceVariants,setActiveSequenceVariant,onValuesChangestudio.initialize(), outline export/import
Remove any reliance on lite’s inert sheet.sequence stub if you start calling sheet.sequence.play() for real.
3. Open state in full Studio
Load the JSON you exported from studio-lite (or from full Studio with only static data). Static overrides and staticOverridesByVariant carry over. Variant folders match the ids you declared in code.
Add sequences when ready: select a prop → Sequence in the Details Panel (Sequences). Existing static values become the starting point for keyframes.
4. Variants and timelines
Full Backstage can attach a separate timeline per variant (sequencesById[variantId]). Lite-only projects have empty or stripped sequence data; you can build per-variant timelines after upgrade without migrating static layers.
Keep calling declareSequenceVariants([...]) with the same ids.
5. Production bundle
Strip @unseenco/backstage/studio from production as you would today; ship @unseenco/backstage with { state } and real sequence playback when needed.