Canopy 0.1.2
First fully-automated release of the Canopy design system. Both packages are published to npm under the @rogueoak scope via the new tag-driven pipeline.
π¦ Packages
| Package | Version | Install |
|---|---|---|
@rogueoak/roots |
0.1.2 |
pnpm add @rogueoak/roots |
@rogueoak/canopy |
0.1.2 |
pnpm add @rogueoak/canopy |
@rogueoak/canopy depends on @rogueoak/roots@0.1.2. React 19 is a peer dependency.
π What's new β tag-driven publishing (spec 0023)
Publishing is now on, and a git tag is the release:
- Push a strict bare-SemVer tag (
X.Y.Z, novprefix) β CI publishes both packages at that version, lockstep, in dependency order (roots β canopy). - Authenticated with npm trusted publishing (OIDC) β no long-lived
NPM_TOKEN. - A
pnpm testgate runs before publish; the build is always fresh (no staledist);workspace:*is rewritten to the real version on publish. - Changesets has been retired in favour of this flow.
See docs/specs/0023-npm-publishing.md.
π³ What's inside
- Roots π± β design tokens (colour, type, spacing, radii, elevation, motion) as CSS variables, a typed TS export, and a Tailwind v4 preset. Light/dark theming lives entirely in the token layer.
- Seeds (atoms) β Button, Input, Label, Badge, Checkbox, Switch, RadioGroup, Textarea, Select, Tooltip, Avatar, Separator, Spinner, Skeleton, Keyboard.
- Twigs (molecules) β FormField, SearchBar, Card.
Exposed via subpath exports: @rogueoak/canopy/seeds, @rogueoak/canopy/twigs, and @rogueoak/roots/tokens.css Β· @rogueoak/roots/tailwind-preset.css.
β‘ Quick start
```bash
pnpm add @rogueoak/canopy @rogueoak/roots react react-dom
```
```css
/* global stylesheet */
@import '@rogueoak/roots/tokens.css';
@import '@rogueoak/roots/tailwind-preset.css';
```
```tsx
import { Button } from '@rogueoak/canopy/seeds';
export const App = () => Plant a seed;
```
Note: @rogueoak/roots@0.1.1 exists as an interim artifact from bootstrapping the pipeline and is unused β start from 0.1.2, the first matched release of both packages.