Get started

Semantic design token generator: choose and verify the right output

Choose a semantic design token generator by the artifact a named consumer needs, not by the word "generator." A tool can create an impressive palette, a valid token document, or a component scaffold without proving that your application resolved and used the intended decisions. Record the generation contract first. Then verify one representative component outside the generator before expanding adoption.

Updated November 7, 2026

Start with the consumer and artifact

The exact query covers several incompatible jobs. DesignSystems.One advertises a configurable browser generator spanning color, typography, spacing, density, radius, shadow, and motion. Figma describes agent-assisted token creation and organization on its canvas. Andrew Flett's Claude Code skill starts with an exported color-token file and scaffolds an opinionated component stack. These routes overlap. They don't end at the same artifact or transfer the same decisions.

Don't rank them with one generic score. First decide whether you need broad token generation, assistance inside a design tool, or implementation scaffolding for a particular stack. Then inspect what remains unresolved when that route finishes.

Compare the captured routes by advertised capability

The matrix below reports what the frozen pages advertise. "Unverified" means the captured evidence doesn't establish that capability. It doesn't mean the product lacks it. No cross-tool quality, speed, interoperability, or consumer benchmark was performed.

DesignSystems.One generatorFigma workflowClaude Code scaffold
Starting inputBrand colors, typography, density, spacing base, radius, shadow, motion, and related settingsA prompt plus preferred semantic or component-oriented organization inside FigmaAn exported Tailwind v3, Tailwind v4, or CSS color-token file, followed by skill instructions
Generated layersPrimitive color scales, semantic light and dark roles, chart colors, typography, spacing, radius, shadow, and motionAdvertised semantic or component-oriented token groups in a design environmentSemantic color usage, component variants, component scaffolding, and documentation for the prescribed stack
Component scopeDashboard, marketing, and component previews are shown; external component implementation is unverifiedComponent-oriented grouping is advertised; external product implementation is unverifiedA named list of ShadCN or Radix-based components and semantic variants is prescribed
ModesLight, dark, and both are explicit in the generator and previewsMode-generation details are unverified in the captured excerptThe skill requires dark and light color-mode adherence when semantic tokens are used
Non-color coverageTypography, density-aware spacing, radius, shadow, motion, and chart colors are advertisedNon-color category breadth is unverified in the captured evidenceSpacing, typography, shadows, and borders appear in the skill instructions; the supplied generator input is color-focused
Contrast signalsAPCA scoring and an accessibility matrix are advertisedGenerated contrast analysis is unverifiedNo generated contrast system is established by the captured skill
Preview surfaceDashboard, marketing, and component previews in light and darkTokens are generated and organized on the Figma canvasA design-system documentation page is prescribed; an executed external preview is not reported
Exports or deliveryTwelve formats are advertised, including Tokens Studio and a Figma Variables scriptWork remains in the Figma environment; exact portable export coverage is unverified hereTailwind or CSS input is consumed by instructions that create project files and components
Intended consumerDesigners and developers needing a broad token source and exportsTeams creating or organizing tokens inside FigmaClaude Code working in the prescribed ShadCN, Radix, Lucide, and Tailwind stack
Still unverifiedExternal consumer adoption, cross-format equivalence, and rendered product acceptancePortable artifact identity, external transformation, project mapping, and rendered product acceptanceRegeneration provenance, stack-independent portability, and observed acceptance in a named product
Advertised capabilities in the captured sources, observed November 7, 2026.

Capability is not acceptance

A preview proves that the generator can present its own output under the displayed conditions. It doesn't prove that an exported file resolves identically after another tool transforms it, or that a product component consumes the intended role.

Route each generator to the job it can support

Use the broad generator when you need to configure several token categories together, inspect its built-in previews and contrast signals, and export a starting artifact. The remaining work is substantial: validate the chosen format, resolve references, transform it for the target stack, identify the emitted artifact, map it into a project, and inspect actual consumers.

Use Figma's route when generation and organization need to happen inside the design environment. That can shorten design-side setup. By itself, though, it doesn't establish which portable artifact is authoritative, how an external build transforms it, or whether a shipped component adopted it.

Use the Claude Code skill when its opinionated stack matches your project and you want instructions for moving an exported color-token file into components and documentation. That specificity is useful, but record the input file, skill revision, generated files, local changes, and unresolved categories. Without that record, the scaffold is difficult to reproduce or audit later.

Don't let generation settle an unowned decision

If the approved source doesn't define an error role, dark-mode relationship, interaction state, component exception, or alias boundary, mark it unresolved and assign an owner. A plausible generated value is still a proposal.

Copy the generation contract before running the tool

A useful contract joins the design authority to the generator run without pretending that the generator owns every decision. Complete it before generation where possible. Add artifact identities only after the files exist, and leave observations open until someone inspects the named consumer.

generation_contract:
  record_id: "SG-001"
  status: "planned | generated | validated | accepted | blocked"

  source_authority:
    name: "[approved design or brand source]"
    revision: "[version, commit, or dated approval]"
    owner: "[person or team allowed to approve semantic decisions]"
    scope: "[decisions this source actually governs]"

  generator:
    name: "[product or workflow]"
    version_or_observed_date: "[version, URL capture date, or skill revision]"
    run_identity: "[run ID, export ID, or not supplied]"
    operator: "[person or automation]"
    settings:
      color_space: "[value or not applicable]"
      brand_inputs: "[recorded inputs]"
      typography: "[recorded settings]"
      spacing_and_density: "[recorded settings]"
      radius_shadow_motion: "[recorded settings]"
      other: "[all settings that can change output]"

  required_output:
    layers: ["primitive", "semantic", "component or explicitly omitted"]
    categories: ["color", "typography", "spacing", "other required categories"]
    modes: ["light", "dark", "other required modes"]
    interaction_and_status_roles: "[required roles and states]"
    alias_policy: "[where aliases are required, allowed, or forbidden]"
    target_schemas: ["DTCG 2025.10", "CSS", "Tailwind", "other declared targets"]

  unresolved_decisions:
    - decision: "[missing or disputed semantic choice]"
      state: "unresolved"
      owner: "[decision owner]"
      blocked_outputs_or_consumers: ["[affected target]"]
      due_or_trigger: "[when it must be decided]"

  artifacts:
    - purpose: "[authored, resolved, transformed, or serialized output]"
      path_or_package: "[file path, package identity, or export identity]"
      version_or_digest: "[immutable version or digest when available]"
      producer: "[generator, resolver, or transformer]"
      schema_or_format: "[declared format and version]"

  named_consumers:
    - name: "[project and surface]"
      environment: "[framework, theme, viewport, and relevant versions]"
      mapping_owner: "[person or team]"
      representative_component: "[component, variant, and states]"

  retest_triggers:
    - "source revision changes"
    - "generator or skill changes"
    - "resolver or transformer changes"
    - "artifact identity changes"
    - "project mapping or component contract changes"
    - "supported mode or consumer environment changes"
A vendor-neutral regeneration record. This is an editorial template, not a DTCG document or a generator-specific configuration file.

The contract makes omissions visible. A color-focused input may be acceptable when typography and spacing are governed elsewhere. It isn't acceptable to imply that those categories were generated. Likewise, a component scaffold may be useful without serving as the authority for brand decisions.

Choose a public artifact, then write its consumer contract

Inspect Ambient Sage as a bounded source artifact. Record the exact public kit revision and delivery format you intend to use, then name one project component that will verify the handoff. Don't approve the project from the kit preview alone.

Keep every evidence stage separate

The Design Tokens Format Module 2025.10 is a final Design Tokens Community Group report for exchanging tokens between tools. It defines structures such as tokens, groups, types, aliases, and composite values. The report explicitly says it is not a W3C Standard and is not on the W3C Standards Track. Use its conformance and reference rules when the declared source format is DTCG 2025.10, but don't turn document conformance into a claim about an application.

  1. 1

    1. Freeze the authored input

    Identify the approved source revision, generator settings, semantic relationships, required modes, alias policy, and unresolved decisions. This is the input authority, not the generated result.

  2. 2

    2. Capture the generated document

    Save the generator's direct output without silently correcting it. Record its format, generator identity, run or export identity when available, and a digest or immutable version.

  3. 3

    3. Validate the declared format

    Check the document against the schema and rules it claims to follow. For a DTCG 2025.10 artifact, inspect required token properties, groups, types, composite values, and reference syntax under that report.

  4. 4

    4. Resolve references

    Run the declared resolver separately. Record missing targets, circular references, incompatible types, and the resolved values. Valid reference syntax doesn't prove successful resolution.

  5. 5

    5. Transform for the target

    Apply the named transformer and version to the resolved input. Record mappings, omitted categories, mode handling, name changes, unit conversion, and any local policy added by the transformation.

  6. 6

    6. Serialize the output

    Write the target representation, such as CSS, Tailwind configuration, or another declared format. Check that serialization preserved the intended names, values, references or flattened values, modes, and categories.

  7. 7

    7. Identify the delivered artifact

    Record the exact file, package, registry item, or export identity consumed by the project. A successful build against an unknown or stale artifact is weak evidence.

  8. 8

    8. Verify project mapping

    Confirm that the named project loads that artifact and maps the intended semantic role to the expected framework variable, utility, component property, or theme slot.

  9. 9

    9. Inspect component consumption

    Check a representative component, variant, mode, and state. Look for hardcoded values, local overrides, detached components, incorrect aliases, and fallbacks that bypass the intended mapping.

  10. 10

    10. Record the rendered observation

    Inspect the declared environment and compare the observed result with the expectation written before the test. Record the first divergent stage and choose accept, revise, or block.

Contrast signals have a narrow boundary

A generator's contrast score is evidence about the pairs and algorithm it evaluated. Application accessibility still depends on the actual component, state, text size and weight, focus treatment, interaction, content, mode, and rendered consumer. Don't convert a generated score into an accessibility guarantee.

Test one representative component with real content

Choose a component that crosses several semantic boundaries. A primary form submission button works well because it can exercise background and foreground roles, focus treatment, disabled behavior, status feedback, typography, spacing, and both color modes. Write the expected behavior before opening the rendered consumer.

Test content and roleInspectFailure condition
Default primary actionButton text: "Create workspace"; primary background and paired foreground rolesResolved tokens, computed styles, readable label, type role, padding, radius, and absence of local hardcoded valuesWrong artifact or role, unresolved fallback, local value, missing label, clipping, or visible mismatch with the approved expectation
Hover statePointer over the enabled "Create workspace" button; declared hover treatmentState selector, mapped role, preservation of label readability, and whether the state changes as specifiedNo visible state when required, accidental primitive use, unexpected mode fallback, or a change owned by neither source nor component contract
Keyboard focusKeyboard focus on the enabled button; declared focus role and geometryFocus visibility, mapped ring or outline role, clipping, overlap, and behavior on surrounding surfacesIndicator absent, obscured, clipped, mapped to the wrong role, or replaced by a local style
Disabled stateDisabled "Create workspace" button with the same labelDisabled mapping, text legibility, state communication, and prevention of an unrelated hover treatmentEnabled appearance, active hover treatment, incorrect semantic role, unreadable content, or state not supported by the component contract
Error contextSubmission failure message: "Workspace could not be created. Try again." beside the actionStatus role, foreground pairing, message wrapping, relationship to the control, and separation from destructive-action stylingError meaning conveyed only by an unverified color, wrong status mapping, clipped message, or destructive role used without source authority
Dark modeRepeat every row under the declared dark mode with identical contentMode-specific resolution, artifact and mapping identity, state differentiation, text and focus presentationLight value leaks into dark mode, missing dark alias, stale transformed file, or a local override masks the intended role
Example inspection matrix for a named consumer. These are test instructions, not completed results.

The matrix doesn't prescribe universal token values or pass thresholds. It makes the team name the content, role, state, and evidence it will inspect. Add quantitative requirements only when an applicable standard, product contract, or approved internal policy supplies them.

Copy a named-consumer acceptance record

Keep the expectation and observation in one record so nobody mistakes a planned check for a passing result. The example below is deliberately unexecuted. Replace the bracketed fields, run the check, and fill in the observations last.

consumer_acceptance:
  record_id: "SG-001-C1"
  evidence_state: "planned"

  source:
    authority_revision: "[approved source revision]"
    required_role: "[semantic role and mode relationship]"

  generated_document:
    identity: "[file plus digest or immutable version]"
    declared_format: "[format and version]"
    format_validation: "not_run"
    reference_resolution: "not_run"

  transformation:
    tool_and_version: "[transformer]"
    configuration_identity: "[config revision]"
    transformed_artifact: "[file or package identity]"
    serialization_check: "not_run"

  consumer:
    name: "[project / surface]"
    environment: "[framework, browser or renderer, theme, viewport]"
    project_mapping: "[source role -> project variable or property]"
    component: "[component / variant]"
    states: ["default", "hover", "focus", "disabled", "error"]
    test_content: "[representative visible content]"

  expectation:
    resolved_output: "[expected resolved value or reference]"
    mapped_property: "[expected component property]"
    visible_result: "[observable result, without claiming it occurred]"
    protected_surfaces: "[what must remain unchanged]"

  observation:
    observed_output: "unexecuted"
    evidence_location: "not_captured"
    first_divergence: "unknown_until_executed"
    notes: "[fill after inspection]"

  ownership:
    source_decision_owner: "[owner]"
    generator_or_artifact_owner: "[owner]"
    transformation_owner: "[owner]"
    project_mapping_owner: "[owner]"
    component_owner: "[owner]"

  disposition:
    value: "block"
    reason: "Required consumer evidence has not been executed."
    allowed_values: ["accept", "revise", "block"]
    next_action: "Run the declared component matrix and record the first divergence."
Unexecuted named-consumer record. Keep the disposition blocked until required observations exist.

Use accept only when the required evidence matches the declared scope. Choose revise when the route is viable but a known layer needs correction and retesting. Use block when required evidence is missing, authority is unresolved, the artifact cannot be identified, or the failure prevents a trustworthy decision.

Find the first divergent layer

When the rendered result differs from the expectation, compare the chain in order. If the authored decision is wrong, fix it at the source. If the generated document differs from the approved input, inspect the generator settings or output. When references fail, fix the source reference or resolver path. If the resolved value is correct but the target file differs, inspect transformation and serialization. When the delivered artifact is correct but the component is wrong, inspect project mapping, component consumption, and local overrides.

This order prevents a common failure: changing an approved source token to compensate for a stale package or incorrect component mapping. Correct the earliest layer that diverged. Then regenerate downstream artifacts and rerun the affected consumer record.

A generated token is a proposal until a named consumer resolves, maps, and renders it as expected.

Ambient Sage is upstream evidence, not a consumer test

Ambient Sage is a bounded public example of a system available for intake. Its public kit page describes a near-white warm-sage canvas, tonal card panels, a sparingly used vivid yellow accent, Plus Jakarta Sans for body and heading roles, JetBrains Mono for technical strings, and semantic light and dark roles. Identity Forge also makes implementation artifacts available for its kits through DTCG, Tailwind, shadcn, and DESIGN.md routes.

Token specimen · real values

Ambient Sage

Live render

Ambient Sage's actual tokens — the same values its exports use.

Color tokensSemantic roles with HEX / HSL / CMYK

Color tokens

Ambient Sage
light · HEX · HSL · CMYK

Core

#F3F4EF

background

H 72 · C0, 0, 2, 4

#1A1C17

foreground

H 84 · C7, 0, 18, 89

#E5E6E0

card

H 70 · C0, 0, 3, 10

#ECEEE8

muted

H 80 · C1, 0, 3, 7

#D8D9D2

border

H 68.57 · C0, 0, 3, 15

Brand

#FEE951

primary

H 52.72 · C0, 8, 68, 0

#1A1C17

primary-fg

H 84 · C7, 0, 18, 89

#E5E6E0

secondary

H 70 · C0, 0, 3, 10

#F7E464

accent

H 52.24 · C0, 8, 60, 3

#FEE951

ring

H 52.72 · C0, 8, 68, 0

Semantic

#C0392B

destructive

H 5.64 · C0, 70, 78, 25

#FFFFFF

destructive-fg

H 0 · C0, 0, 0, 0

#2D7238

success

H 129.57 · C61, 0, 51, 55

#C97D12

warning

H 35.08 · C0, 38, 91, 21

#545651

muted-fg

H 84 · C2, 0, 6, 66

Charts

#FEE951

chart-1

H 52.72 · C0, 8, 68, 0

#4A8FD4

chart-2

H 210 · C65, 33, 0, 17

#6BBF8A

chart-3

H 142.14 · C44, 0, 28, 25

#E07498

chart-4

H 340 · C0, 48, 32, 12

#E8A24B

chart-5

H 33.25 · C0, 30, 68, 9

Type scaleHeading, body, and mono in the kit's fonts

Typography

Ambient Sage

Scale: compact-product

Density: balanced

Heading · Plus Jakarta Sans · 1.875rem

Ship beautiful product faster

Subheading · Plus Jakarta Sans · 1.375rem

A warm-sage neutral-surface mobile kit with a single vivid yellow accent, flat tonal cards, and oversized display numerals.

Body · Plus Jakarta Sans · 1rem

Ambient Sage uses a near-white warm-sage canvas (#f3f4ef) with card panels distinguished only by a tonal shift to #e5e6e0, never by shadows or borders. A single vivid yellow (#fee951) is the only saturated color and appears sparingly at component scale as orbs, button fills, and focus rings. Primary data values render as oversized bold hero numerals with a small superscript unit. Typography is a friendly rounded geometric (Plus Jakarta Sans) with no uppercase and no tight tracking, while JetBrains Mono is reserved for hex codes and technical strings. Generous rounding and luminance-only contrast give the whole system a calm, minimal feel.

Mono · JetBrains Mono · 0.8125rem

npx shadcn add ambientsage.json

Aa

Plus Jakarta Sans · Heading

400500600700

Aa

Plus Jakarta Sans · Body

400500600700

ABCDEFGHIJKLM NOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz

0123456789 & @ # % →

Radius & spacingCorner radius, elevation, and spacing steps

Tokens

Ambient Sage primitives
density: balanced

Radius scale

sm · 0.375rem
md · 0.75rem
lg · 1.25rem
xl · 1.75rem

Component radius

button
card
input

Elevation

level 1
level 2
level 3
level 4

Spacing · base 4px

1x
2x
3x
4x
6x
8x
Ambient Sage as a public upstream specimen. This shows available system decisions; it doesn't certify an external project mapping or rendered consumer.

Those facts support an intake record: kit identity, available semantic roles and modes, typography roles, spacing context, and candidate delivery formats. They don't show that a particular project imported the correct revision, resolved every reference, preserved both modes, mapped a button correctly, or passed accessibility evaluation.

To use Ambient Sage in this workflow, select one delivery artifact and record its identity. Name one project and one component. Write down the expected role mapping and states. Leave observed output, first divergence, and disposition open until someone has inspected that consumer.

Don't infer a tested theme switch

The existence of light and dark semantic roles is upstream evidence. It doesn't prove that an external application switches modes correctly, persists a preference, maps every component, or renders equivalent states. Those require consumer observations.

Make one bounded decision now

Pick the generator route that can produce or feed the artifact your first named consumer requires. Complete the generation contract, preserve unresolved decisions, and generate the required light and dark modes. Then map one representative component and run the matrix with real content.

Expand only after the acceptance record earns an accept disposition. If it doesn't, correct the first divergent layer instead of regenerating blindly. That single trace will tell you more about implementation readiness than another polished preview.

Sources

  • Design Token Generator | Create CSS, SCSS, Tailwind & JSON ...: The captured page advertises generation from brand and typography settings, light and dark semantic roles, non-color token categories, interface previews, APCA contrast signals, and twelve export formats.
  • AI Design Token Generator Built Into Figma: Figma describes prompting an agent to generate and organize semantic or component-oriented token structures within its design environment.
  • A Claude Code skill for scaffolding design systems with semantic ...: The captured skill accepts an exported Tailwind or CSS color-token file and instructs Claude Code to scaffold an opinionated ShadCN, Radix, Lucide, and Tailwind component system.
  • Design Tokens Format Module 2025.10: The final Design Tokens Community Group report defines a portable token exchange format, including tokens, groups, types, aliases, and composite values; it explicitly is not a W3C Standard or W3C Standards Track document.
  • Ambient Sage Design Kit: The public Ambient Sage page documents a warm-sage visual system, semantic light and dark roles, Plus Jakarta Sans and JetBrains Mono typography roles, and publicly available implementation artifacts.