4 shared libs — the vocabulary every template and custom scene resolves to. Curves, text fitting, and the brand tokens. Install any of them into your own project; each ships with its source.
The vocabulary everything else resolves to — curves, text fitting, brand tokens. Read these instead of reinventing values.
animation-utilsCore motion vocabulary — `interpolate`, `spring`, `Easing` (incl. `Easing.bezier`), the `SPRING_*` presets, `stagger`, `cubicBezier`. Every custom scene's curves resolve to these; do not reinvent values.
text-utilsText measurement and fitting helpers — notably `fitTextSize(text, baseSize, maxWidth)` for shrink-to-fit copy in fixed-width containers.
tokensThe canonical brand-token resolver: one derivation path from a config's `style` + `brandKit` to the resolved `accent` / `surface` / `surface_elevated` / `content` / `muted` / `font` / `script_font` tokens, plus `fontStack()`. Read tokens from here instead of hardcoding colors or font stacks.
motion-stdlibThe higher-level motion vocabulary custom scenes compose with — `phase`, `staggerWindow`, `punch`, `cascade`, `typewriter`, `countUp`, `particles`, `burst`, `glow`, `vignette`, `grain`, `drift`, `sweep`, `morph`, `orbit`, `pathDraw`. These are already globals inside a `custom_*` scene; install this item when you want them in your own project.
Inside a custom scene you just reference a primitive by component name — nothing to install. To pull the source into your own React project, map the namespace once in components.json and add what you want.
# in your own React project
npx shadcn add @vanillasky/countUpNumber # a primitive
npx shadcn add @vanillasky/motion-stdlib # the motion vocabularyInstalling into your app does not change what the vanillasky CLI renders — to change a scene there, eject it as componentSource. See Templates & the registry.