How to Create a Design System in Figma: A Beginner’s Walkthrough with Components and Tokens

If you’ve ever opened a fresh Figma file and felt overwhelmed by the idea of building a scalable design system, you’re not alone. Most tutorials skip the practical “where do I actually click?” details. In this walkthrough, we’ll show you how to create a design system in Figma from scratch, using a clear, repeatable process that works whether you’re a solo designer or part of a growing product team.

By the end of this guide, you’ll have a working library with color tokens, text styles, reusable components, and variants ready to power real product screens.

What Is a Design System (and Why Build One in Figma)?

A design system is a single source of truth that brings together your visual language, UI components, and the rules that govern how they’re used. In Figma, this typically includes:

  • Design tokens (colors, spacing, typography values stored as variables)
  • Styles (color styles, text styles, effect styles)
  • Components and variants (buttons, inputs, cards, etc.)
  • Documentation pages describing usage rules

Figma is ideal for this because of native variables, auto layout, variants, and the ability to publish libraries that teams can consume across files.

figma design system

Step 1: Set Up Your Figma File Structure

Before drawing a single rectangle, organize your workspace. A clean structure saves hours later.

  1. Create a new team project called “Design System”.
  2. Inside, create three files: Foundations, Components, and Patterns.
  3. In each file, use Figma pages to separate concerns: Cover, Changelog, Tokens, Colors, Typography, Spacing, etc.

This separation lets you publish foundations independently from components, so updates don’t break everything at once.

Step 2: Define Your Design Tokens with Figma Variables

Tokens are the atomic decisions of your system. In Figma, variables let you store and reuse them across themes and modes (light/dark, brand A/brand B).

Color tokens: a two-tier approach

Use a primitive layer and a semantic layer. This is the most flexible setup and is now considered best practice.

  • Primitive tokens: raw values like blue/500, gray/100
  • Semantic tokens: contextual meaning like background/default, text/primary, border/subtle

Semantic tokens reference primitive tokens. When you switch to dark mode, only the semantic layer changes, not your components.

Naming convention example

Layer Token Name Value
Primitive color/blue/500 #3B82F6
Semantic color/action/primary {color/blue/500}
Semantic color/text/onPrimary {color/white}

Spacing and radius tokens

Create a number variable collection for spacing using a 4 or 8 point scale:

  • space/0 = 0
  • space/1 = 4
  • space/2 = 8
  • space/3 = 12
  • space/4 = 16
  • space/6 = 24
  • space/8 = 32

Apply these variables directly to auto layout padding and gap fields.

figma design system

Step 3: Create Your Color Styles

Even with variables, color styles still help for gradients and complex fills. For solid colors, bind the style fill to a semantic variable so it stays in sync.

  1. Create a frame, fill it with your semantic variable.
  2. Click the four-dot style icon, then “Create style”.
  3. Name it using slashes for grouping: Background/Default, Action/Primary, Text/Primary.

Step 4: Build Your Type Scale and Text Styles

A consistent type scale is what makes a product feel professional. Start with a modular scale (1.125 or 1.25 ratio works well).

Style Name Size / Line Height Weight
Display/XL 48 / 56 700
Heading/H1 32 / 40 700
Heading/H2 24 / 32 600
Body/Default 16 / 24 400
Body/Small 14 / 20 400
Caption 12 / 16 500

Create each as a text style with the same slash naming. Avoid creating a style for every weight variation, group them logically.

Step 5: Build Your First Component (a Button)

The button is the perfect first component because it touches almost every part of your system.

Build the base

  1. Draw a frame, add auto layout (Shift + A).
  2. Set horizontal padding using space/4 and vertical padding using space/2.
  3. Add a text layer using Body/Default, bind the color to Text/OnPrimary.
  4. Fill the frame with Action/Primary, set corner radius to radius/md.
  5. Select the frame and press Create component (Ctrl/Cmd + Alt + K).

Add variants

Select the component and click Add variant. Create the following properties:

  • Variant: Primary, Secondary, Ghost, Destructive
  • Size: Small, Medium, Large
  • State: Default, Hover, Pressed, Disabled
  • Icon: Boolean (true/false)
  • Label: Text property bound to the button text

Naming variants consistently is critical. Use PascalCase or Title Case with comma separation, for example: Variant=Primary, Size=Medium, State=Hover.

figma design system

Step 6: Naming Conventions Cheat Sheet

Consistency beats cleverness. Here’s a reliable convention you can adopt today:

Asset Type Pattern Example
Color variable category/role/weight color/action/primary
Text style Category/Variant Heading/H2
Component Category/Name Form/Button
Variant property Property=Value Size=Medium

Step 7: Publish and Consume Your Library

  1. Open the Assets panel, click the library icon, then Publish.
  2. Write a short changelog entry so consumers know what changed.
  3. In your product file, click the same library icon and enable your design system.
  4. Drag components from the Assets panel into your designs.
figma design system

Step 8: Document as You Go

A design system that nobody understands gets abandoned. For each component, add a documentation frame next to it including:

  • What the component is for
  • When to use it (and when not to)
  • Anatomy with labeled parts
  • Accessibility notes (contrast, focus states, touch targets)

Common Beginner Mistakes to Avoid

  • Skipping the primitive/semantic split, which makes theming nearly impossible later.
  • Creating components too early, before validating patterns in real screens.
  • Over-naming styles, like having ten shades of gray with no semantic meaning.
  • Not using auto layout, which kills scalability.
  • Forgetting to align with code. Token names should match what developers ship.

FAQ

How long does it take to build a design system in Figma?

A minimum viable system covering colors, typography, spacing, and a handful of core components can be done in 2 to 3 weeks for a solo designer. A full production-ready system typically takes 2 to 4 months with iteration.

Should I use Figma variables or styles?

Use both. Variables handle tokens (colors, numbers, booleans, strings) and support modes like dark theme. Styles still shine for gradients, complex fills, and effects. Bind your styles to variables when possible.

What’s the difference between components and variants?

A component is a reusable element. Variants are different states or versions of the same component grouped together (for example, a button in primary, secondary, and ghost styles). Variants live inside a component set.

Can I use an existing design system instead of building one?

Absolutely. Figma Community has excellent starter kits like the Simple Design System or Untitled UI. Forking one and adapting it to your brand is often faster than starting from zero.

How do I keep my Figma design system in sync with code?

Use the same token names in Figma and your codebase. Tools like Tokens Studio, Style Dictionary, or Figma’s REST API can export your variables to JSON, which developers can consume directly.

Wrapping Up

Building a design system in Figma is less about flashy components and more about disciplined naming, smart token architecture, and consistent documentation. Start small with foundations, ship a single button with proper variants, and grow from there. The teams that succeed are the ones that treat the system as a living product, not a one-time deliverable.

Ready to start? Open Figma, create that “Design System” project, and define your first three color tokens today.