If you've ever opened a Figma design and thought "now what?"—you're not alone. Figma is the world's most popular design tool, used by over 90% of product design teams, but the handoff process from design to code remains one of the biggest sources of friction in product development.
Designers work in Figma thinking in visual systems: spacing, colors, typography, and layout. Developers work in code thinking in components, props, state, and logic. Without a clear handoff workflow, you end up with mismatched implementations, constant back-and-forth, and designs that look perfect in Figma but broken in production.
This guide walks you through the complete Figma developer handoff workflow—from opening a shared link to exporting assets and translating Figma's CSS into production-ready code.
TLDR
Figma developer handoff is the process of extracting design specifications from Figma files and implementing them in code. The workflow involves opening shared Figma links, switching to Dev Mode for developer features, inspecting element specs (spacing, colors, typography), copying CSS snippets, exporting assets, and translating Figma's output into maintainable production code with design tokens and responsive behavior.
Key takeaways:
- Figma Dev Mode ($12/month) provides CSS inspection, asset export, and code snippets for developers
- Figma's generated CSS is a starting point, not production-ready (uses px not rem, hardcoded colors, no responsiveness)
- Always request component state frames (hover, focus, error) from designers before implementation
- Translate Figma CSS to token-driven utilities (Tailwind classes or CSS variables) for maintainability
- Export icons as SVG and images as PNG with 2x/3x resolutions for high-DPI displays
Why Figma for Design Handoff?
Figma is one of the most popular tools for design handoff for several reasons:
Browser-based collaboration: No need to download files or sync versions. Designers share a link, developers open it in a browser and see the latest design in real-time.
Built-in developer features: Figma Dev Mode provides CSS inspection, asset export, spacing measurements, and color values—all the specs developers need to implement designs.
Component-based design: Figma's component system mirrors code component libraries (React, Vue, Web Components), making the mental mapping from design to code more intuitive.
Plugin ecosystem: Figma's plugin system enables advanced handoff workflows, including design token extraction, code generation, and integration with tools like Storybook and design systems.
However, Figma's handoff workflow isn't perfect. The generated CSS is verbose and not production-ready, the free Inspect Panel has limited functionality, and Dev Mode requires a paid subscription.
Figma Dev Mode vs Inspect Panel
Figma offers two ways for developers to inspect designs:
| Feature | Inspect Panel (Free) | Dev Mode ($12/month) |
|---|---|---|
| CSS Inspection | Basic | Enhanced (cleaner output) |
| Code Snippets | CSS only | CSS, iOS, Android, React |
| Asset Export | Yes | Yes (with bulk download) |
| Spacing Measurement | Yes | Yes (better UI) |
| Plugin Access | Limited | Full access |
| Version Comparison | No | Yes (compare versions) |
| Best For | Occasional inspection | Daily development work |
What changed? In 2023, Figma split developer features into a separate paid Dev Mode offering. The legacy Inspect Panel remains free but lacks the enhanced features developers need for professional workflows.
Is Dev Mode worth it? If you're working with Figma designs daily, yes. The cleaner CSS output, version comparison, and plugin access significantly improve handoff quality. For occasional inspections, the free Inspect Panel is sufficient.
Step-by-Step Handoff Workflow
Here's the complete workflow from receiving a Figma link to implementing the design in code.
Step 1: Designer shares Figma link
The designer shares a Figma file link with view or developer permissions. The URL looks like:
https://www.figma.com/file/{fileId}/{fileName}
Open the link in your browser (Chrome, Firefox, Safari) or Figma desktop app. You'll see the design canvas with all frames, components, and design elements.
Step 2: Switch to Dev Mode
If you have a Dev Mode subscription or trial, click the Dev Mode toggle in the top-right corner of the Figma interface. The UI will switch to a developer-focused layout with enhanced code inspection features.
Without Dev Mode, you'll use the legacy Inspect Panel (click on an element and view properties in the right sidebar).
Step 3: Inspect element specifications
Click any design element (button, text, card, icon) to view its specifications in the right panel:
Spacing: Padding, margins, and gaps (displayed in px by default)
Colors: Fill colors (hex, RGB, RGBA), stroke colors, and gradients
Typography: Font family, font size, font weight, line height, letter spacing
Layout: Width, height, positioning (absolute, flex, grid), alignment
Effects: Shadows (box-shadow), blur effects, opacity
Take note of these values—you'll use them to implement the design in code. For complex layouts, inspect parent containers to understand the overall layout system (flexbox, grid, absolute positioning).
Step 4: Copy CSS or view code snippets
Click the Code tab in the right panel to see generated code for the selected element. Figma provides multiple output formats:
- CSS: Standard CSS with classes
- iOS (Swift): SwiftUI or UIKit code
- Android (XML/Kotlin): Android View XML or Jetpack Compose
- Tailwind (via plugins): Some plugins generate Tailwind utility classes
Example Figma CSS output for a button:
/* Figma generated CSS */
.button {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
padding: 12px 24px;
gap: 8px;
width: 200px;
height: 48px;
background: #3B82F6;
border-radius: 8px;
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-size: 16px;
line-height: 24px;
color: #FFFFFF;
}This CSS is a useful reference but NOT production-ready. You'll need to translate it into maintainable code (see next section).
Step 5: Export assets as SVG or PNG
Select icons, logos, or images and click the Export button in the right panel. Figma allows you to export in multiple formats:
- SVG: For icons, logos, and vector graphics (scalable, small file size, embeddable in code)
- PNG: For raster images and photos (with 1x, 2x, 3x resolution options for high-DPI displays)
- JPG: For photographic content (smaller file size than PNG but lossy compression)
Best practices:
- Use SVG for icons and logos (can be inlined in React components or imported as React components)
- Use PNG @2x for raster images on high-resolution displays
- Name exported assets with semantic names (
icon-search.svg, notFrame-241.svg)
Step 6: Implement design in code
This is where you translate Figma specs into production code. The key is to convert Figma's output into maintainable, token-driven, responsive code.
See the next section for a detailed example of translating Figma CSS to Tailwind utilities.
Code Example: Figma CSS to Tailwind
Figma generates absolute pixel values and hardcoded hex colors. For production code, you want relative units (rem), design tokens, and responsive behavior.
Figma's generated CSS:
.card {
padding: 24px;
gap: 16px;
background: #FFFFFF;
border: 1px solid #E2E8F0;
border-radius: 12px;
box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.06);
font-family: 'Inter';
font-size: 16px;
line-height: 24px;
color: #0F172A;
}Translated to Tailwind utilities:
<div className="p-6 space-y-4 bg-white border border-gray-200 rounded-xl shadow-sm">
<h3 className="text-base leading-6 text-gray-900">Card Title</h3>
<p className="text-sm text-gray-600">Card description content...</p>
</div>What changed:
| Figma CSS | Tailwind Utility | Reasoning |
|---|---|---|
padding: 24px |
p-6 |
24px = 1.5rem = Tailwind's spacing-6 scale |
gap: 16px |
space-y-4 |
16px gap between children (1rem = spacing-4) |
background: #FFFFFF |
bg-white |
Maps to semantic Tailwind color token |
border: 1px solid #E2E8F0 |
border border-gray-200 |
Gray-200 matches E2E8F0 in Tailwind palette |
border-radius: 12px |
rounded-xl |
12px = 0.75rem = Tailwind's xl border radius |
box-shadow: 0px 2px 4px rgba(0,0,0,0.06) |
shadow-sm |
Closest Tailwind shadow utility |
font-size: 16px |
text-base |
Base font size (1rem) |
color: #0F172A |
text-gray-900 |
Darkest gray for primary text |
Key translation principles:
- Convert px to rem or Tailwind scale values (16px = 1rem = spacing-4)
- Map hex colors to semantic tokens (#3B82F6 →
bg-primaryorbg-blue-500) - Use Tailwind utilities instead of custom CSS (more maintainable, smaller bundle)
- Add responsive breakpoints (Figma shows desktop only, add
sm:,md:,lg:variants) - Add interaction states (Figma shows default state, add
hover:,focus:,active:variants)
Don't forget responsive specs when translating Figma designs—designers often provide only desktop layouts, but production code needs mobile, tablet, and desktop breakpoints.
Extracting Design Tokens from Figma
For large projects with design systems, manually copying color values and spacing from Figma is tedious. You can extract design tokens directly from Figma using plugins like Figma Tokens or Style Dictionary Exporter.
Workflow with Figma Tokens plugin:
- Designer defines color styles, text styles, and effects in Figma
- Developer installs Figma Tokens plugin in Figma file
- Plugin exports tokens as JSON in W3C Design Tokens format
- Developer imports JSON into Style Dictionary or Tailwind config
- Tokens are transformed into CSS variables, Tailwind utilities, iOS constants, etc.
Example exported token JSON:
{
"color": {
"primary": {
"value": "#3B82F6",
"type": "color"
},
"text": {
"primary": {
"value": "#0F172A",
"type": "color"
}
}
},
"spacing": {
"md": {
"value": "16px",
"type": "dimension"
}
}
}This JSON can be fed into your build pipeline to generate platform-specific token files, ensuring consistency across Figma designs and production code. Figma is an alternative to Zeplin's approach for design token extraction and handoff automation.
Common Mistakes to Avoid
1. Forgetting responsive specifications
Figma designs typically show desktop layouts only. Don't assume the design is mobile-responsive—ask the designer for mobile breakpoint specs or infer responsive behavior based on design patterns.
2. Missing hover, focus, and error states
Static Figma frames show default states only. Before implementing, check if the designer created variant frames for hover, focus, active, disabled, error, and loading states. If not, request them.
3. Assuming Figma CSS is production-ready
Figma's generated CSS uses absolute pixel values, hardcoded hex colors, and no semantic class names. Always translate Figma CSS into maintainable code with design tokens, relative units, and responsive utilities.
4. Not asking about interactions and animations
Figma prototypes show interactions (click, hover, scroll), but Dev Mode doesn't export animation timings or easing curves. Ask designers for animation specs: duration (300ms), easing (ease-in-out), and which properties animate (opacity, transform).
5. Skipping accessibility considerations
Figma doesn't enforce accessibility (WCAG color contrast, semantic HTML, keyboard navigation). Developers must add ARIA labels, focus states, keyboard shortcuts, and screen reader support during implementation.
FAQ
Q: Does Figma Dev Mode cost extra?
A: Yes. Figma Dev Mode requires a paid seat at $12/month per developer (as of 2026). However, Figma offers a free 30-day trial for Dev Mode. The free Inspect Panel (legacy) is still available but lacks features like better CSS quality, plugins, and version comparison.
Q: Is Figma's generated CSS production-ready?
A: No. Figma's CSS is a starting point, not production-ready code. It uses absolute px values instead of relative rem units, hardcoded hex colors instead of CSS variables or design tokens, and lacks responsive breakpoints, accessibility attributes, hover states, and semantic HTML structure. Always translate Figma CSS into maintainable, token-driven code.
Q: How do I handle component states in Figma handoff?
A: Request that designers create separate frames or component variants for all states (default, hover, focus, active, disabled, error, loading). In Dev Mode, inspect each state frame individually to extract hover colors, focus outlines, and error styling. If states are missing, communicate with the designer to add them before implementation.