@astryxdesign/lab
Experimental Astryx components — published to npm only under the @canary dist-tag for early testing; never released as a stable (latest) version.Experimental Astryx components. This package is a staging area for components being developed before graduating to
@astryxdesign/core. It ships to npm only under the @canary dist-tag — there is never a stable (latest) release.Purpose
Components in lab:
- Are importable in storybook and sandbox for testing
- Are publishable for early external testing via the
@canarytag only - Can be iterated on freely without worrying about breaking stable consumers
- Compose with
@astryxdesign/corecomponents (use the theme, follow naming conventions) - Graduate to
@astryxdesign/coreafter thorough engineering review
See the Component Lifecycle wiki for how a component moves from lab → core (and the promotion gates), and the Component Hardening Protocol for the bar a component must clear to graduate.
What's here vs what's in core
Lab: Works, has basic props, maybe has stories. API might change. Not accessibility-hardened, not vibe-tested, not fully themed. Canary-only — no stability promise.
Core: Full keyboard/a11y, hover guards, theming story, status states, spec compliance, vibe tested. Shipped to consumers on
latest.Promotion gate: accessibility
The Accessibility Checklist is a hard requirement for graduating to core — every item, verified in the promotion PR, alongside the hardening bar linked above.
Lab components get the same scan coverage as core (the
pr-a11y axe audit and the weekly full scan run against lab too), but a11y findings on a lab component do not block lab merges — they block promotion. Iterate freely in lab; clear the checklist to graduate.Usage
Inside the monorepo (storybook/sandbox), imports resolve via pnpm workspaces:
tsximport {CodeEditor} from '@astryxdesign/lab';
Trying lab components in your own project (canary)
Lab is published only under the
@canary dist-tag, so you must request that tag explicitly. There is no latest version to install.bashnpm install @astryxdesign/lab@canary @astryxdesign/core@canary
tsximport {CodeEditor} from '@astryxdesign/lab';import '@astryxdesign/core/astryx.css';import '@astryxdesign/lab/lab.css';
Canary builds track the latest commit onmain(0.x.y-canary.<sha>). They can break between any two versions — pin an exact version if you need stability.
Why no stable release?
package.json keeps "private": true plus an "astryx": { "canaryOnly": true } marker. The release workflow's stable (latest) job skips both private and canaryOnly packages, while the canary job strips private in its ephemeral CI checkout only (never in git) to publish the @canary tag. The committed private: true is npm's hard guarantee that no stable publish can ever happen — do not remove it.