Get started

Design system for Replit: choose the right source and verify the app

For a Replit design system, start with the source that already holds authority over the visual decisions. Use a prompt when important choices remain open, extract from a mockup when an approved design should govern, or provide existing material such as DESIGN.md when a system already exists. Then verify the resulting app. Saving a system or generating files proves that Replit created an artifact. It doesn't prove that the app adopted it correctly.

Updated November 14, 2026

Choose the source before creating the system

Decide where the approved visual decisions live before generating anything. Replit documents prompt-led creation and extraction from a mockup. Its broader design tools also accept material such as Figma sources, websites, screenshots, code, reference images, brand assets, briefs, and existing DESIGN.md. These inputs serve different purposes. A screenshot may show a treatment without explaining its rules. A DESIGN.md may explain intent without containing the exact application mapping. A prompt is useful precisely when no approved system exists yet.

Prompt-led creationApproved mockup extractionExisting-system intake
Use whenImportant visual choices are still unresolved.A reviewed mockup is the intended visual reference.A maintained design system or brand source already governs the product.
Starting authorityThe approved brief, constraints, and answers supplied during creation.The identified mockup revision plus any separate rules it cannot show.The versioned system, such as approved guidelines, token files, assets, or DESIGN.md.
What Replit may generateA proposed system that resolves open visual choices.A reusable interpretation of visible patterns in the mockup.A translated or generated representation for use in Replit.
Main translation riskTaste fills gaps that the brief did not settle.A visual sample is mistaken for a complete rule set.The generated copy diverges from the maintained source or loses unsupported decisions.
Required reviewReview every consequential generated decision.Check extracted rules against the approved mockup and its known exceptions.Compare every required decision with the source revision and keep unsupported fields unresolved.
Regeneration ruleRegenerate when the brief or an approved decision changes.Regenerate when the governing mockup revision changes.Regenerate when the canonical source changes, unless a documented local exception applies.
Pick the route according to what is already approved and what Replit is allowed to decide.

Do not promote output by accident

A generated Replit system can be useful without becoming canonical. Record whether it's a proposal, a maintained derivative, or the approved authority. Without that decision, the next regeneration could overwrite a deliberate correction or preserve a stale translation.

Map the artifacts from source to screen

Replit documents creation, saved-system use, and stored artifacts on separate pages. For implementation work, connect them as one chain. Each layer has its own authority and gives a decision another place to change before it reaches the screen.

What it establishesWhat it does not prove
Approved sourceWhich visual decisions are legitimate and who may change them.That Replit received or preserved those decisions.
Saved Replit systemReusable visual context is available for later work.That the selected project uses the intended revision.
Living style guide and DESIGN.mdGenerated guidance and system intent are present in the project.That every exact value or component rule is mapped correctly.
tokens.jsonNamed token values or references exist in the generated artifact.That the project emits or loads the intended CSS variables.
CSS variables or project mappingThe application can resolve reusable values.That components consume them rather than local values.
Component implementationA component maps properties and states to the project styling layer.That the named screen uses this component without an override.
Local override or exceptionA deliberate or accidental divergence changes a narrower consumer.That the exception is approved, current, or safe in every condition.
Rendered observationA recorded app, component, state, mode, and viewport produced an observed result.That untested screens or future regenerations behave the same way.
Each layer answers a different question. Presence at one layer does not prove the next.

Suppose the approved source assigns a semantic primary action role. The saved system may describe that role, tokens.json may carry its value, CSS may expose it as a variable, and a button may consume it. A screen-level class can still replace the button color. The final screenshot tells you the result is wrong. The chain shows where it first went wrong.

Copy a source and authority record

Write this record before you create or regenerate the system. It gives designers, developers, and reviewers a shared boundary. Mark unknown fields as "unresolved" so the generator doesn't make an invisible policy decision.

DESIGN SYSTEM SOURCE RECORD

Record ID:
Recorded on:
Owner:
Named consumer: [exact Replit app and project]

SOURCE
Source type: [brief | approved mockup | Figma | website | code | screenshot | assets | DESIGN.md | other]
Source identity:
Source revision or date:
Canonical authority: [source name and owner]
Supporting references:

DECISIONS
Approved decisions:
Unresolved decisions:
Replit may propose:
Replit must preserve:
Out of scope:

EXPECTED REPLIT OUTPUT
Saved system name:
Expected DESIGN.md or guidance:
Expected tokens.json roles:
Expected CSS or project mapping:
Expected example components or assets:

PRECEDENCE
If source and generated output disagree:
If tokens and guidance disagree:
Local overrides allowed when:
Approved exception owner:
Exception review date:

VERIFICATION
Representative components:
Required states:
Required modes:
Viewports:
Font-loading conditions:
Expected results:
Evidence location:
Reviewer:

RETEST TRIGGERS
Source revision changes:
System regeneration:
Token or CSS mapping changes:
Component changes:
Local override changes:
Font-delivery changes:
Viewport or mode behavior changes:

FINAL DISPOSITION
[adopt | revise | block]
Reason:
Open findings and owners:
A source record that keeps authority, generated artifacts, application mapping, and observed evidence separate.

Name the consumer precisely

"The app" is too vague. Record the Replit project, screen, component, state, mode, and viewport. A result observed on a wide dashboard in light mode tells you nothing about a narrow form in dark mode.

Use the workflow that matches the source

Route 1: create from a brief

Use this route when the brand or product direction exists as intent but the visual system remains open. Supply the audience, product character, approved assets, constraints, required surfaces, prohibited treatments, and named app. Separate fixed decisions from choices Replit may propose. After generation, treat colors, typography, token roles, spacing, component examples, and guidance as proposals. Approve or revise them before using the saved system as reusable context.

  1. 1

    Freeze the brief

    Record approved constraints, unresolved choices, the named app, and the person who may approve generated decisions.

  2. 2

    Generate a proposal

    Use Replit's current creation workflow, referring to its documentation for current controls and platform behavior.

  3. 3

    Review the system, not only the sample screen

    Inspect the generated roles, typography, tokens, assets, guidance, and representative components. A polished sample screen can hide missing states or vague mappings.

  4. 4

    Save only the reviewed revision

    Record the saved-system identity and the decisions accepted, revised, or left unresolved.

  5. 5

    Verify the named app

    Trace representative decisions into the project and record rendered observations before broader reuse.

Route 2: extract from an approved mockup

Use extraction when a particular mockup has already been approved as the visual reference. Record its exact revision and the surfaces it covers. Then list what it cannot establish. One desktop screen rarely defines narrow layouts, focus states, validation, loading, empty content, dark mode, typography fallback, or the behavior of components absent from the sample.

Review the extracted system against two lists: decisions visibly supported by the mockup and decisions inferred beyond it. The first group still needs accurate translation. The second needs explicit approval. If the generated system assigns a rule to a state the mockup never showed, label it as a proposal instead of claiming it was extracted.

Route 3: seed from an existing design system

Use external-system intake when approved guidelines, tokens, assets, code, or DESIGN.md already govern the product. Record the canonical revision and expected Replit artifacts. Treat Replit's generated files as downstream representations unless the system owner deliberately transfers authority. Compare the generated output with the source, paying close attention to renamed roles, omitted modes, substituted fonts, flattened aliases, and rules that exist only in prose.

Need a structured upstream source?

Explore a published Identity Forge kit to see typography roles, semantic tokens, spacing, and usage guidance in one source. Use it as source material, then perform the Replit mapping and app verification described here.

Bounded example: Ambient Sage as upstream intake

Ambient Sage is a concrete source record, not a compatibility result. Its public kit uses Plus Jakarta Sans for heading and body roles at weights 400, 500, 600, and 700. JetBrains Mono supplies the mono role at weights 400, 500, and 700. The published system has a compact-product typography scale and 28 semantic color tokens across light and dark modes.

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 shows the upstream token, typography, and spacing material. This specimen does not show a Replit import or tested Replit rendering.
Ambient Sage evidenceStatus
Available upstreamPublic typography roles and weights, compact-product scale, and 28 semantic light and dark tokens.Recorded from the published kit.
Supplied to ReplitThe exact source artifact and revision selected for intake.Unexecuted in this example.
Generated in ReplitSaved system, guidance or DESIGN.md, tokens.json, assets, and examples produced by the chosen workflow.Unexecuted in this example.
Mapped by the projectFont resources, CSS variables, token roles, components, and modes connected to the named app.Unexecuted in this example.
Observed in the appRendered components inspected under recorded states, modes, viewports, and loading conditions.Unexecuted in this example.
Record the example by evidence state so upstream facts are not mistaken for downstream proof.

What this example proves

It proves that a bounded, public upstream record exists. It doesn't prove that Replit imports Identity Forge directly, maps the kit automatically, preserves every role, renders the fonts, meets accessibility requirements, or produces a compatible app.

Trace one decision before reviewing the whole app

Start with one decision that crosses several layers, such as the primary action treatment or heading typography. Write the expected result before inspecting the generated app. Then work from the approved source toward the screen. This order stops a plausible rendering from retroactively defining what the system was supposed to do.

  1. 1

    Confirm the approved source

    Find the exact decision, revision, applicable mode, and owner. If the source is silent, stop calling the decision approved.

  2. 2

    Inspect the saved Replit system

    Check whether the intended decision appears in the saved visual context and whether the selected revision is identifiable.

  3. 3

    Inspect the generated artifacts

    Find the corresponding guidance and token entry. Record renaming, translation, omission, or fallback rather than assuming equivalence.

  4. 4

    Inspect the project mapping

    Confirm which CSS variable, font resource, theme value, or other project-level mechanism carries the decision.

  5. 5

    Inspect component adoption

    Check whether the named component consumes the intended mapping in the required state and mode.

  6. 6

    Inspect exceptions and overrides

    Identify narrower styles, wrappers, breakpoint rules, or approved exceptions that can change the result.

  7. 7

    Record the rendered observation

    Capture what happened for the named screen, component, state, mode, viewport, content, and font-loading condition.

If the source and generated token agree but the component uses a local color, the first divergence is component adoption. Editing the upstream token might fix the screenshot, but it would also change unrelated consumers. The narrower fix belongs where the divergence began.

Verify a named Replit app

Saving or selecting a design system confirms configuration. Verification asks whether the intended decisions reached the actual interface. Choose a small, representative set instead of inspecting only the most polished default screen. A useful first pass might include a primary button, text input, card, navigation item, heading, and data value.

What to recordExample or allowed state
ConsumerExact Replit project, route or screen, and component.Example: Account settings, email input.
Source expectationApproved role, value, rule, mode, and revision.Example: input surface and focus treatment from source revision R3.
Generated stateWhether the required rule appears in the saved system and generated artifacts.generated | missing | divergent | unresolved
Mapped stateWhether the project resolves the expected CSS variable, font, asset, or other mapping.mapped | missing | divergent | unresolved
Adopted stateWhether the named component consumes the mapping without an unapproved substitute.adopted | overridden | detached | unresolved
ConditionsState, mode, viewport, content, font status, input method, and relevant environment.Example: focus, dark mode, 390 px, keyboard, fonts loaded.
Expected resultA falsifiable statement written before observation.Example: visible focus treatment uses the recorded role without clipping.
Observed resultWhat actually rendered, with evidence tied to this revision and condition.pass | fail | not run, plus evidence location
Owner and dispositionWho resolves a mismatch and what happens next.adopt | revise | block
Use one row per representative case and fill the observation only after testing.

Include default, hover, focus, disabled, and error states where they apply. Check light and dark modes if both are in scope. Use narrow and wide viewports, with realistic content rather than short labels chosen to fit. For typography, inspect loaded-font and fallback behavior separately. For overrides, record whether each difference is approved, accidental, or unresolved.

Accessibility stays a separate evidence track

Correct token mapping doesn't establish accessibility. Component and product checks still need the relevant keyboard, focus, contrast, zoom, text-spacing, content, and assistive-technology evidence. Attach those results to the exact consumer and conditions tested.

Find the first divergent layer

When a screen looks wrong, inspect the chain in order. Stop at the first layer where the recorded expectation and actual state differ. Later differences may be consequences rather than causes.

  1. Approved source: Is the decision explicit, current, approved, and applicable to this condition?
  2. Saved Replit system: Does the selected system carry the intended decision and revision?
  3. Generated artifact: Do DESIGN.md, tokens.json, assets, and examples preserve or correctly translate it?
  4. Project mapping: Does the app load and expose the intended value, font, asset, or rule?
  5. Component implementation: Does the component use the mapping for this variant and state?
  6. Application override: Does a local class, wrapper, breakpoint rule, or exception replace it?
  7. Rendered observation: Under the recorded mode, viewport, content, and loading conditions, does the result match the expectation?

Fix the earliest layer that owns the mismatch. Revise the source only when its decision is wrong. Regenerate when the derivative is stale or mistranslated. Correct the project mapping when the right artifact exists but isn't connected. Change the component or local override when the divergence begins there.

Finish with adopt, revise, or block

Adopt the system for the named scope when you can trace the required source decisions, the expected artifacts exist, representative components use the intended mappings, and recorded observations match expectations. Revise when the route is sound but a bounded mismatch has an owner and a clear correction. Block when authority is unknown, required decisions disappeared during translation, the app uses a different system, or evidence required for the named scope is missing.

Keep the completed source record with the system revision. When the source, generated artifacts, component implementation, override, font delivery, mode behavior, or viewport behavior changes, rerun the affected cases. Next, choose one named Replit app and complete one acceptance row from approved source to rendered observation before approving the system more broadly.

Sources

  • Create a design system - Replit Docs: Replit documents creating a design system from a prompt or extracting one from a mockup, followed by review and saving.
  • Use a design system - Replit Docs: Replit describes a saved design system as reusable visual context for colors, typography, spacing, components, and later visual work.
  • Design system contents and DESIGN.md - Replit Docs: Replit documents design-system contents and a storage chain in which tokens.json feeds CSS variables consumed by components, and it identifies existing DESIGN.md as possible source material.
  • Design systems, explained - Replit Docs: Replit describes design systems as capturing tokens, colors, typography, components, and supplied brand assets, with several possible creation sources.
  • AI Design Tool - Replit: The Replit Design page presents prompt, URL, Figma, screenshot, and design-system starting routes alongside its interactive design experience.
  • Ambient Sage Design Kit: The public Ambient Sage kit provides Plus Jakarta Sans for heading and body roles, JetBrains Mono for technical strings, a compact product-oriented treatment, and 28 semantic light and dark tokens.