Motion pack
A motion pack ships easing tokens, transition presets, and named gestures so motion across a build feels intentional and consistent — even when widgets are composed from different authors.
What you ship
my-motion/
├── manifest.json
├── tokens/
│ ├── easing.json # bezier curves + spring presets
│ ├── duration.json # ms values for "snappy" / "calm" / "luxury"
│ └── gestures.json # named multi-step motions (hover-lift, …)
├── preview/
│ └── reel.mp4 # 10-second motion reel
└── README.md
Key contracts
- Easings are bezier curves or spring physics, not just
ease-in-outstrings. - Durations are ms values keyed by intent (
snappy,calm,luxury) — widgets reference the intent, not the millisecond. - Gestures are multi-step motions (
hover-lift = translate-Y(-2px) + scale(1.02)); the runtime renders them as compound transitions.
Scaffold
vincia create motion-pack my-motion
cd my-motion
vincia preview
vincia publish --dry-run
Approval gates
1. Tokens parse + match the schema in @vincia/sdk-types. 2. Reduced-motion compliance — every gesture defines a prefers-reduced-motion fallback. 3. Preview present — preview/reel.mp4 exists and is ≤ 2 MB.
Where to learn more
- /foundations — KitPreset shape including motion.
- @vincia/registry/motion-tokens — the canonical motion-token contract.