NewsThe Basemode plugin is now on Figma Community

This is an example. Your team gets a page like it, kept current from Figma, the moment you publish.

Try your own tokens
Example design system

Northwind

A made-up product's design system, published from Figma with the Basemode plugin. Every swatch, scale and contrast check below is generated from its tokens.

54 tokens · Updated 2026-11-06

Guidelines

Use semantic tokens first

Reach for surface, text, border and action tokens. They carry the meaning and change with the theme. Use primitives only to define new semantic tokens.

Do
  • background: var(--surface-raised)
  • color: var(--text-muted)
Don't
  • background: var(--slate-50)
  • color: #475569

Never hard-code a value

If a color, space or radius isn't in the system, ask for it instead of typing it in. Run `basemode lint` before opening a pull request.

Do
  • padding: var(--spacing-16)
  • border-radius: var(--radius-md)
Don't
  • padding: 15px
  • border-radius: 7px

Keep text readable

Body text needs 4.5:1 contrast against its surface, and large text 3:1. Check both the light and dark themes.

Do
  • text/primary on surface/default
  • Check light and dark before merging
Don't
  • text/muted for body copy on surface/raised
  • Gray text on a colored button

One primary action per screen

Primary color marks the most important thing to do. If everything is primary, nothing is.

Do
  • One action/primary button, the rest secondary
Don't
  • Three primary buttons side by side

Colors

Click a color for its details. The copy button copies its CSS variable.

Semantic

Palette

Typography

Spacing

Radii

Shadows

Accessibility

Every text color on every surface, with its WCAG contrast.

The quick brown fox
text/muted on surface/default7.58:1 AAA
The quick brown fox
text/muted on surface/raised7.24:1 AAA
The quick brown fox
text/primary on surface/default17.85:1 AAA
The quick brown fox
text/primary on surface/raised17.06:1 AAA

Components

ButtonReady

Starts an action. Primary, secondary and ghost.

import { Button } from "@northwind/ui"
InputReady

Single-line text entry with a label and an error state.

import { Input } from "@northwind/ui"
SelectIn progress

Picks one option from a list.

CheckboxReady

Turns an option on or off.

import { Checkbox } from "@northwind/ui"
CardReady

Groups related content on a raised surface.

import { Card } from "@northwind/ui"
DialogIn progress

Asks for a decision on top of the page.

ToastPlanned

Confirms something that just happened.

Recent changes

  1. 2 renamed, 2 changed
  2. 63 added
Published with Basemode

Keep design and code in step, starting today

Try it with sample tokens in a couple of minutes, then connect Figma, GitHub and your agents when you're ready. No card needed.