Skip to main content

The making of the Figma Pattern Library

UI3 prompted us to rebuild our own design system from the ground up. Here’s how designers and engineers came together to create a new foundation for building consistent, accessible products.

Hero animation by Julia Schimautz

When we set out to redesign Figma’s interface with UI3, we faced a revealing truth: Our team—despite building the go-to tool for designers worldwide to create their own design systems—had been working with a fragmented design system of our own. Our internal system had become disjointed over years of rapid growth and product expansion. Detached instances ran rampant. Components that should have been consistent showed subtle but meaningful differences.

Learn about the Figma Pattern Library (FPL) team's ethos and approach to design systems and lessons learned from building the latest iteration of Figma's internal design system.

This fragmentation became impossible to ignore, especially as we started gearing up to launch UI3 across all Figma products by Config 2024. We needed more than just new designs—we needed a robust foundation that would empower teams across the organization to build consistently and efficiently at scale.

Taking a paired approach

“We realized that to truly make Figma more flexible, responsive, and accessible, we needed to start from the ground up,” says Wayne Sun, a product designer on the Product Foundations team. “That meant creating a system that could serve as both a source of truth and springboard for our UI overhaul.”

Pair programming is a collaborative software development technique where two programmers work together at a single workstation, with one actively writing code (the “driver”) while the other reviews and provides real-time feedback (the “navigator”).

Wayne and Engineering Manager Tom Williams assembled a tight-knit team of five designers and engineers. From day one, the team embraced an unusually collaborative approach. “It was like paired programming, except between engineering and design,” describes Josh Ferrell, one of the engineers tapped to build out the updated component and token system. This close partnership was necessary for establishing a shared system that would bridge the gap between design intent and technical implementation—and which would result in a brand new design system called Figma Pattern Library (FPL).

Creating a shared language with variables

The team’s first challenge was cleaning up years of accumulated technical debt. The original design system predated Figma’s variables feature, which meant designers relied on styles while engineers maintained color tokens in a separate Google Sheet. Predictably, the spreadsheet often lagged behind product updates, leading to inconsistencies between design files and shipped code.

Variables, combined with Figma’s REST API, offered a path forward by keeping designs and code aligned and automatically in sync. The team built new typography variables that could be aliased via existing typography styles, and migrated from color styles to color variables that would serve as a centralized source of truth. They even added CSS definitions to color variables so when developers use Dev Mode, the correct variable names appear in the inspection tab.

A comparison of color palettes for light mode and dark mode. The light mode palette on the left features a white background, while the dark mode palette on the right has a dark background. Each palette includes gradients for twelve colors: white, black, grey, blue, purple, pink, red, orange, yellow, green, and teal. The gradients range from light to dark shades of each color.A comparison of color palettes for light mode and dark mode. The light mode palette on the left features a white background, while the dark mode palette on the right has a dark background. Each palette includes gradients for twelve colors: white, black, grey, blue, purple, pink, red, orange, yellow, green, and teal. The gradients range from light to dark shades of each color.

Color ramps are systematic sequences of colors that progress from light to dark (or vice versa) while maintaining consistent hue and saturation.

The team created two essential collections of color variables:

  • Primitive variables based on color ramps, organized by hue from 100 to 1000
  • Semantic variables following the schema established with dark mode, including modes for different themes (light/dark) and products (Figma Design, FigJam, Slides, Dev Mode)
A Figma color management interface showing two panels with color variables. The left panel lists color categories like “black,” “white,” and “blue,” while the main panel shows color details, with columns for different themes such as “Light,” “Dark,” and “FigJam-Light.” An arrow points from one color setting to another, highlighting customization across themes.A Figma color management interface showing two panels with color variables. The left panel lists color categories like “black,” “white,” and “blue,” while the main panel shows color details, with columns for different themes such as “Light,” “Dark,” and “FigJam-Light.” An arrow points from one color setting to another, highlighting customization across themes.
Primitive variables are aliased by semantic variables for easy batch color management.

This structure allowed shared components to adapt seamlessly across different contexts while maintaining consistency. The team also established variables for radius and spacing to ensure a more consistent look and feel across products.

A Figma design interface displayed on a purple background, showing a table of sizing variables. The table is divided into two sections: "Spacers" with values ranging from 0 to 40, and "Radius" with values from 0 to 9999.A Figma design interface displayed on a purple background, showing a table of sizing variables. The table is divided into two sections: "Spacers" with values ranging from 0 to 40, and "Radius" with values from 0 to 9999.
FPL’s spacer and radius variables.

Automating consistency with APIs

Rather than rely on manual updates, the team used Figma’s REST API to automate synchronization between design tokens in code and variables in the Figma library.

The team set up a GitHub Action that runs when variable changes are published, in turn creating a pull request that the team can then review and merge. “We were able to add all of the new brand colors for slides with almost no engineer time,” says Josh. Moving forward, designers only need to make the color definitions and—so long as developers are using the correct tokens “...which is very easy thanks to Dev Mode,” adds Josh—their colors will just work when new brands are added to the mix.

Four side-by-side mobile UI designs displaying a comment thread with different background colors: light blue, light purple, light green, and light orange. Each UI shows comments from two users, "Hoi Fung Ho" and "Wayne Sun," discussing a potential UX research session. The comment backgrounds differ to illustrate various color-coded themes or states, while header icons and buttons remain consistent across the designs.Four side-by-side mobile UI designs displaying a comment thread with different background colors: light blue, light purple, light green, and light orange. Each UI shows comments from two users, "Hoi Fung Ho" and "Wayne Sun," discussing a potential UX research session. The comment backgrounds differ to illustrate various color-coded themes or states, while header icons and buttons remain consistent across the designs.
Color variables allowed the team to re-brand the comment sidebar for each product, including Figma Slides.

From audit to action

With their foundation in place, the team embarked on a five-month sprint to rebuild their components using the new variable system. They identified which components needed the most immediate attention, particularly those with high usage and impact on accessibility. “Components that appeared frequently in the app and had accessibility considerations needed more of our focus and attention,” Josh explains.

They started with checkboxes—a relatively straightforward component that helped build momentum—before tackling more complex elements like buttons and tabs with their multiple states and interaction patterns.

Bridging the implementation gap

Figma’s Director of Advocacy Tom Lowry and Developer Advocate Jake Albaugh talk about how to drive design system adoption with Code Connect at Config 2024.

The team discovered early on that perfect one-to-one mapping between Figma components and coded components wasn’t always possible or desirable. Rather than work around this challenge, they partnered closely with the team building Code Connect, a tool to help organizations boost design system adoption by making code more accessible and useful for developers.

“Code Connect was built in-sync with FPL,” Tom explains. “We met weekly to talk through features we wanted, how we could build them to get the most out of the project, and making sure we were using the product as intended.” As the first beta testers, the FPL team’s feedback helped evolve Code Connect into the tool we know today.

This close collaboration led to a new requirement: Every FPL component must have Code Connect support before it can be considered complete. “This helps with adoption,” Josh notes. “New hires and existing team members learn to inspect designs in Dev Mode and immediately see if an FPL component exists for the design.”

Besides supplying engineers with the code they need, Code Connect allowed the team to build components that were easy for designers to use. “Code Connect's extensibility lets us generate the right code from design components,” Tom adds. “This frees the design team up to create components that are intuitive for designers to use, even when they don't match engineering structures exactly. The translation between design and code components lives in Code Connect.”

A Figma interface displaying a checkbox component labeled “On, Normal,” outlined in blue with a checkmark. To the right, there is a “Code Connect” section showing a snippet of React code for rendering a checkbox. The code imports the Checkbox component, sets up a checkboxState using React.useState(false), and returns the Checkbox element with checked and onChange properties, as well as a label reading “Helpful label text.”A Figma interface displaying a checkbox component labeled “On, Normal,” outlined in blue with a checkmark. To the right, there is a “Code Connect” section showing a snippet of React code for rendering a checkbox. The code imports the Checkbox component, sets up a checkboxState using React.useState(false), and returns the Checkbox element with checked and onChange properties, as well as a label reading “Helpful label text.”
The checkbox was the first component the team re-built and supported with Code Connect.

Results that scale

After five months of intensive work, the team created:

  • 680+ tokens for color, typography, sizing, spacing, and radius
  • 22 component sets with more than 670 variants
  • Comprehensive design documentation in the main Figma library
  • A new documentation site for engineering teams, complete with use cases, APIs, and UI2-to-UI3 conversion guides
FPL’s internal engineering documentation site.

The impact extends beyond numbers. “Teams are reporting better component discoverability, more consistent experiences, and an easier path to building accessible features,” Tom notes. “We’re giving people the tools to create inclusive experiences without starting from scratch each time.”

A comparison between two user interfaces, UI2 and UI3, showing different icon designs for buttons that either change states or open menus. UI2 icons include an eye, chain links, and a four-dot grid, while UI3 features similar symbols but with subtle differences in design and color, such as a highlighted blue state for some icons in UI3.A comparison between two user interfaces, UI2 and UI3, showing different icon designs for buttons that either change states or open menus. UI2 icons include an eye, chain links, and a four-dot grid, while UI3 features similar symbols but with subtle differences in design and color, such as a highlighted blue state for some icons in UI3.
The UI2 and UI3 icon buttons in their default, hover, and pressed states.

This improved consistency is visible throughout the UI. One clear example is the icon button transformation, where the team consolidated four different buttons with varying visual treatments and behaviors into a consistent, cohesive component set. Similarly, in the design panel, they re-designed the input fields and added a new combo input component to create a more consistent layout and support additional interactions.

A side-by-side comparison of two design panels in Figma, both showing frame properties. The left panel shows position, layout, fill, and stroke settings, while the right panel displays similar properties with slightly different labels and organization. Both panels allow adjusting dimensions, layout, and appearance of selected elements.A side-by-side comparison of two design panels in Figma, both showing frame properties. The left panel shows position, layout, fill, and stroke settings, while the right panel displays similar properties with slightly different labels and organization. Both panels allow adjusting dimensions, layout, and appearance of selected elements.
The design panel for UI2 and UI3.

Paving the way for future growth

FPL continues to evolve. The team has opened the library file for designers to propose changes via branches and is launching an internal advocacy program to strengthen collaboration between the FPL team and the wider design organization. For engineers, they’re providing unstyled primitives that enable experimentation while maintaining consistency.

“We want FPL to provide a strong foundation, but not at the cost of stifling creativity,” Josh explains. “It’s about finding the right balance between consistency and flexibility, allowing teams to experiment and push boundaries while still maintaining a coherent user experience.”

Wayne offers this advice for teams embarking on similar journeys: “Have an abundance mentality. Give your time. Give your attention. Give your ability. Building a truly effective design system is as much about fostering collaboration as it is about the technical details.”

This foundation is already transforming how Figma teams work together. As we continue to evolve our products, FPL stands as proof that sometimes moving forward requires taking a step back to build something stronger. The real power of a design system isn’t just in its components or documentation—it’s in its ability to bring teams together to build better products.

Ana Boyer is a designer advocate at Figma, where she is building community and empowering design teams across industries. She believes in collaboration and iteration and is always looking to build systems and establish processes where there is ambiguity.

Subscribe to Figma’s editorial newsletter

By clicking “Submit” you agree to our TOS and Privacy Policy.

Create and collaborate with Figma

Get started for free