The Determined design language
Status: open/accepted
Summary
Section titled “Summary”- The suite-wide design language is the one
packages/ts/ui(@determined/ui) already implements — the--d-*token system, thedSemanticsintent contract, and theD*component kit. It is named Determined. No new system is built; this one is promoted, governed, and extended outward by descent. - Six laws (below) bind every consumer; S-0010-design-language-consumption is their enforcement standard.
- The survey that grounds this, the full proposal, and the phased execution
plan live in
docs/planning/design-language/.
Context
Section titled “Context”Every live desktop app shares one stack (Tauri 2 + Nuxt 4 + Vue 3 +
Tailwind 4 + Nuxt UI) but diverged below it: four palettes, three icon
sets, three incompatible dark-mode stances, fonts undecided everywhere.
Meanwhile a real design system exists — 94 --d-* tokens in a seed/derived
two-tier layer, five themes × light/dark, orthogonal appearance axes, 35
intent-driven components, a written spec — with deep adoption inside
determined’s experiences and the SDF desktop, and none outside. Nothing at
repo level governed tokens, theming, typography, or components. The full
inventory: docs/planning/design-language/SURVEY.md.
Decision
Section titled “Decision”Identity. The language is Determined. The --d-* prefix,
@determined/ui package name, and D* component prefix stay
(D-0001-project-structure: names never change). It originates in the
determined suite; every other surface inherits by descent — the way
solutions/ontological/desktop already registers its sdf theme.
Architecture — four planes.
- Grammar: the 25-token app-frame contract + the appearance
vocabulary,
dSemanticsintents, theD*kit. - Themes: base themes (platinum, graphite, contrast, flat, mono) → solution themes (registered presets) → product tint (vault-hue generalized to product-hue), × orthogonal user axes (mode, density, radius, shadow, contrast, os). A theme is data, never a component fork.
- Chrome:
@sksizer/app-frameconsumes only the grammar; any host supplying the contract gets the whole workbench. - Projections: derived skins of the same seed tokens for non-Nuxt surfaces — docs sites, report templates, data-viz palettes, static pages.
Six laws.
- Spec-first, spec-true.
packages/ts/ui/docs/design-system.mdis the vocabulary’s canonical spec and is edited in the same change as any token addition or change. - One dark-mode mechanism.
.darkon the root, owned by color-mode, read throughuseDTheme; primitives taking a theme prop are fed from it, never frommatchMedia.prefers-color-schemeonly in standalone static surfaces with no shell. - One icon language. Lucide via Iconify.
- Semantic-first, everywhere. Intents and tokens, not palette classes
or
color/variantliterals, in experiences and products. - Fonts are tokens. System stacks are the default (right for a native pro tool and offline Tauri builds); identity faces enter only as token overrides in themes or projections.
- Themes are data; the registry is the door. Presets registered
through
registerTheme()+ adata-themeCSS block. A theme the vocabulary cannot express means the vocabulary is extended (law 1), never a component forked.
Owner calls (2026-08-26).
- Ring 3 adoption: the live apps adopt — zoo, then agentpants, then
pumice;
solutions/augmented/apps/augmented_webadopts after them. Frozen/legacy apps stay untouched. - Fonts stay pure-system for now; type identity is revisited during the redesign theme.
- Every PR that changes pixels carries before/after screenshot pairs (light + dark) in its description.
Consequences
Section titled “Consequences”- S-0010-design-language-consumption governs all UI surfaces, with named escape hatches (frozen apps, the Obsidian plugin, shell-less static surfaces).
- The execution order is fixed by the plan
(
docs/planning/design-language/PLAN.md): wiring gaps close before the redesign; the redesign lands as a candidate theme preset and flips the default only when it wins; adoption follows the redesign so surfaces migrate once. - The design-system spec was rewritten in place to match the shipped tokens as part of this decision’s Phase 0.
dataVizPaletteand the per-theme data-viz projection, the Starlight docs skin, and the report-template palette become derivations of the seed tokens (plane 4) as the plan reaches them.