Changelog
What shipped in each release.
Releases follow the project’s phases. Every number here comes from a script; the command is next to it.
v0.5 — Agents
In progressTools for AI coding agents, and a measurement of whether they help.
- Renamed: the project is Syntara, and the name changes everywhere it was the project's own (ADR-029). Packages move to the
@syntarascope, every custom property is--syntara-*instead of--strata-*, the theme scope writesdata-syntara-*, and server-driven UI schema ids areurn:syntara:sdui:v1:*. No token value and no component behaviour changed. There is no codemod for the token prefix yet, so a consumer rewrites imports, token references and attribute selectors by hand. @syntara/audit: the drift auditor. It finds off-system code, suggests a fix for every finding and applies the ones with a single right answer —pnpm drift <path>.@syntara/mcp: a read-only MCP server with seven tools. See MCP server.AGENTS.md: the rules for agents, and what they may change without a person.- Brand fidelity: every theme reports how far its brand fill is from the colour the brand asked for. Across 1,000 random brands the primary is kept exactly for 89.2% in light and 80.0% in dark —
pnpm test:themes. - The agent eval: 25 prompts, 100 runs. With the server, 88% of runs were fully on-system, against 64% without. It didn’t help with type errors. The first attempt was thrown out because of a fault in the harness; both are in the repo.
- After the eval:
find_icon, andimportsandtypeNotesinget_component. The eval also found that ToggleButtonGroup overflows at 390px, which is a component bug and still open. - Server-driven UI: a JSON Schema per component, a validator and a reference renderer for the web (ADR-023). See Server-driven UI. It covers 26 node types; forms, overlays, tables and charts aren’t on the wire yet.
- Native token files for Compose and SwiftUI, with every contrast pair re-checked on the exported values —
pnpm tokens(ADR-025). The Swift files are type-checked against the macOS SDK. The Kotlin files haven’t been compiled. - A sixth tenant, Haat, in Hindi, with a Devanagari type pair whose line heights were set by measuring for clipping —
node scripts/check-script-clipping.mjs --pairs=bilingual-devanagari(ADR-024). Its Hindi copy is a draft until a Hindi reader has reviewed it. - The docs app scores 98.8 on the drift auditor, with 60 findings, and CI fails below 95 —
pnpm drift apps/docs.
v0.4 — Governance
In progressHow the system changes, and the first change made that way.
GOVERNANCE.md: who decides what, the four outcomes for a request, and the deprecation policy. Deprecated APIs keep working until 1.0.0. See Governance.- Requests for comments, with a template. RFC-001 is the first.
- Deprecated: Button’s
variant="danger". Usetone="danger", which also works on outline and ghost buttons (ADR-021). The old prop renders the same and warns once in development. @syntara/codemods: a new package.npx @syntara/codemods button-variant-danger-to-tone <path>rewrites literal usages and reports the ones it can’t be sure of.- Deprecations are records in
meta.json. Component pages show them, andpnpm check:metafails if a record names a codemod or RFC that doesn’t exist. - The engine now solves success, warning, danger and info text on the canvas and raised surfaces too: 118 contrast checks per brand, up from 102 —
pnpm test:themes.
v0.3 — Craft
In progressThe finish pass: motion, depth, our own icons and charts, and an editorial voice.
- Tactile motion: a damped spring token, press and hover lift, sliding selection, and entrances. Everything respects
prefers-reduced-motion(ADR-013). - Glass for floating layers, with the opacity solved so text stays 4.5:1 over any backdrop. Rim light and brand glow tokens.
@syntara/icons: 235 curvy, minimal icons across 8 groups, drawn to one spec (ADR-014). See Icons.- Charts: AreaChart, LineChart, BarChart and Sparkline, keyboard-navigable with a table view. Each brand gets a chart palette that is checked for colour blindness (ADR-016).
- New components: Sidebar, IconTile, Eyebrow, Amount, Meter, Tag, PersonChip. Card gains
featureandinset, Button gainscontrast, Badge gainsstatus. - Soft-outline fields that still meet WCAG 1.4.11 (ADR-017). Fields and buttons now share heights and radii.
- An editorial type pair and a paper neutral (ADR-015). Geist is now the house font.
- A fourth tenant, Care, built from Anuj's KYB web prototype, and new blocks: Benefits overview and Portfolio.
- The engine checks 102 contrast pairs per brand (focus ring and brand text on selected rows added after the colour page found a 2.97:1 gap), and chart palettes on top —
pnpm test:themes.
v0.2 — Components
ShippedPhase 2.
- Components built on React Aria Components, styled with CSS Modules and
--syntara-*tokens only. Each one has a maturity label. - One
meta.jsonper component — props, examples, accessibility, guidelines, tokens — driving these docs (ADR-007). - Distribution through npm:
@syntara/reactbuilds to ESM with one module per component,'use client'kept, onestyles.cssand type declarations (ADR-011). - Overlays copy their opener’s theme attributes, so portaled dialogs and popovers keep the tenant, scheme and density;
ThemeScopetakes alocalethat sets React Aria’s locale,langanddir(ADR-012). - The house brand the docs use lives in
tenants/house/brand.json. - This docs site, themed by the engine, with live previews in every tenant.
v0.1 — Tokens and theme engine
Phase 1.
- The theme engine: OKLCH ramps, semantic roles for light and dark, and a contrast solver that explains each change in plain English. No runtime dependencies.
- Exporters for CSS variables, DTCG 2025.10 JSON and Figma variables.
- Three tenants — Vela, Harbor and Qamar — each one
brand.jsonand onecontent.json. - The Brand Generator: six inputs, a live preview, export.
| Result | Value | Command |
|---|---|---|
| Random brands fuzzed, light and dark | 1,000 | pnpm test:themes |
| Contrast checks passed | 78,000 of 78,000 | pnpm test:themes |
| Tokens per theme | 316 | pnpm tokens |