Versioning
The Guide (Introduction + Getting Started) is versioned by route — each release
is its own file under content/<version>/, so a release's guide stays one readable page
instead of being threaded through <Version> blocks. The picker swaps the version
segment and navigates; / redirects to the default. Reference pages (Theming,
Components, Dashboard, Shape Studio, and this page) are shared across versions.
Per-version pages (the routing model)
content/
1.0/ index.mdx getting-started.mdx _meta.ts → /1.0, /1.0/getting-started
0.9/ index.mdx getting-started.mdx _meta.ts → /0.9/…
canary/ index.mdx getting-started.mdx _meta.ts → /canary/…
theming.mdx components.mdx … → shared (no version segment)
- The picker (top-right) swaps the leading
/<version>/segment and routes there. ThemeScriptreads the version from the URL before paint and sets<html data-version>, so the sidebar shows only the active release's Guide group (the others are hidden inneumorphic.css) with no flash.- The install snippet pins to the version you're reading — try the picker:
npm install soft-ui-docs@1.0pnpm add soft-ui-docs@1.0yarn add soft-ui-docs@1.0bun add soft-ui-docs@1.0npx jsr add soft-ui-docs@1.0To add a versioned page, drop the same filename in each content/<version>/ folder.
To add a shared page, put it at the content/ root.
In-page differences (when a whole new page is overkill)
For shared pages, or a sentence-level difference, gate inline with the global
<html data-version> (set by the picker). You're viewing the v1.0 docs.
Blocks — <Version> with is / since / until / not:
since="1.0").
- 📦 Shown on every released version, not canary (not="canary").
A word or two — data-doc-version (CSS-only, no JS, no flash):
useShape() now returns a Promisereturns the value synchronously in this version.