To integrate Replit with Figma, use the Figma REST API to access your design files from your Replit project — generating design tokens, exporting assets, or reading component data. Store your Figma Personal Access Token in Replit Secrets (lock icon 🔒), then call api.figma.com from your server-side code. For design handoff, use Figma's Dev Mode to inspect CSS values and export SVG/PNG assets directly into your Replit project.
Bridging Figma Design to Replit Code
Figma is where most product teams create their UI designs, component libraries, and design systems. Replit is where the code lives. The handoff between these two tools is one of the most common workflow friction points for development teams — designers export specs, developers try to translate them to code, and details get lost in translation.
The Figma REST API provides programmatic access to the design file structure, including nodes, styles, components, and image exports. This enables automation that reduces manual handoff work: a Replit script can read your Figma file, extract all color styles as CSS variables, download icon components as SVG files, or generate a Tailwind theme configuration from your typography and spacing tokens. This is particularly valuable for design systems where consistency between Figma and code must be maintained as the design evolves.
For simpler projects, Figma's built-in Dev Mode (available in Figma's paid plans) provides an inspection panel where developers can view exact CSS property values for any element, copy computed CSS, and export assets in any format. This manual workflow works well for one-off handoffs and small teams, while the API integration is better for teams that need to keep code and design in sync automatically.
Integration method
The Figma-Replit integration connects your design workflow to your code workflow in two ways: manual design handoff (inspecting Figma components and copying CSS/measurements into your Replit project) and programmatic API access (using the Figma REST API to extract design tokens, generate color palettes, or download exported assets automatically). Both workflows bridge the gap between what designers create in Figma and what developers build in Replit.
Prerequisites
- A Figma account (free accounts can use the Figma REST API with limited Dev Mode access)
- A Figma Personal Access Token — generate it in Figma Account Settings → Security → Personal Access Tokens
- The Figma file key from the URL of your design file (the alphanumeric string in the URL after figma.com/file/)
- A Replit account with a Node.js or Python Repl
Step-by-step guide
Get Your Figma Personal Access Token and File Key
Get Your Figma Personal Access Token and File Key
The Figma REST API uses Personal Access Tokens (PATs) for authentication. To generate one, log into Figma and click your profile picture → Settings. Scroll to the 'Security' section and find 'Personal Access Tokens'. Click 'Create new token', give it a descriptive name like 'Replit Integration', and copy the token immediately — Figma only shows it once. You will also need your Figma File Key — the unique identifier for the design file you want to access. Open your Figma file in the browser. The URL looks like: https://www.figma.com/file/XXXXXXXXXXX/Your-Design-File-Name. The alphanumeric string between /file/ and /Your-Design is your File Key (e.g., 'abc123def456'). Note: The Figma REST API allows read-only access with a Personal Access Token. To write to Figma files (creating or modifying designs), you would need OAuth-based authentication with write scope. For the common handoff use case (reading design data and exporting assets), read-only access is sufficient.
Pro tip: Find your Figma File Key in the URL when you have the file open: figma.com/file/{FILE_KEY}/{file-name}. The file key is case-sensitive and typically 22 characters long.
Expected result: You have a Figma Personal Access Token and a File Key for the design file you want to access programmatically.
Store Figma Credentials in Replit Secrets
Store Figma Credentials in Replit Secrets
Click the lock icon (🔒) in the Replit sidebar to open the Secrets panel. Add two secrets: FIGMA_TOKEN — your Personal Access Token FIGMA_FILE_KEY — the File Key from your design file URL These are all you need to call the Figma REST API from Replit. The base URL for all Figma API calls is https://api.figma.com/v1/. Access them in code: - Node.js: process.env.FIGMA_TOKEN and process.env.FIGMA_FILE_KEY - Python: os.environ['FIGMA_TOKEN'] and os.environ['FIGMA_FILE_KEY'] The Figma API uses the token as an 'X-Figma-Token' request header — unlike most APIs that use 'Authorization: Bearer'. Make sure to use the correct header name.
Pro tip: Store different FIGMA_FILE_KEY values in separate secrets (FIGMA_FILE_KEY_DESIGN, FIGMA_FILE_KEY_ICONS) if your project accesses multiple Figma files.
Expected result: FIGMA_TOKEN and FIGMA_FILE_KEY appear in the Replit Secrets panel and are accessible in your code via the environment.
Fetch File Data and Extract Design Tokens
Fetch File Data and Extract Design Tokens
The Figma API's primary endpoint for file data is GET /v1/files/{file_key}. It returns the full document tree including pages, frames, components, and styles. For design token extraction, the most useful endpoint is GET /v1/files/{file_key}/styles, which returns all named styles (colors, typography, effects) defined in the file. The script below fetches all color and text styles from your Figma file and formats them as CSS custom properties that you can paste into your project's stylesheet or export as a JSON tokens file. Install node-fetch if using Node.js older than 18: npm install node-fetch. For Node 18+ (Replit's default), built-in fetch works.
1// figma-tokens.js — Extract design tokens from Figma2const FIGMA_API = 'https://api.figma.com/v1';34function headers() {5 const token = process.env.FIGMA_TOKEN;6 if (!token) throw new Error('FIGMA_TOKEN not set in Replit Secrets');7 return { 'X-Figma-Token': token };8}910function fileKey() {11 const key = process.env.FIGMA_FILE_KEY;12 if (!key) throw new Error('FIGMA_FILE_KEY not set in Replit Secrets');13 return key;14}1516// Fetch file metadata and page structure17async function getFileMeta() {18 const res = await fetch(`${FIGMA_API}/files/${fileKey()}`, {19 headers: headers()20 });21 if (!res.ok) throw new Error(`Figma API error ${res.status}: ${await res.text()}`);22 return res.json();23}2425// Fetch all named styles (colors, typography, effects)26async function getStyles() {27 const res = await fetch(`${FIGMA_API}/files/${fileKey()}/styles`, {28 headers: headers()29 });30 if (!res.ok) throw new Error(`Figma API error ${res.status}: ${await res.text()}`);31 const data = await res.json();32 return data.meta?.styles || [];33}3435// Get node data for a list of node IDs36async function getNodes(nodeIds) {37 const ids = nodeIds.join(',');38 const res = await fetch(`${FIGMA_API}/files/${fileKey()}/nodes?ids=${encodeURIComponent(ids)}`, {39 headers: headers()40 });41 if (!res.ok) throw new Error(`Figma API error ${res.status}: ${await res.text()}`);42 return res.json();43}4445// Convert Figma RGBA (0-1 range) to CSS hex46function rgbaToHex({ r, g, b, a = 1 }) {47 const toHex = v => Math.round(v * 255).toString(16).padStart(2, '0');48 return a < 149 ? `#${toHex(r)}${toHex(g)}${toHex(b)}${toHex(a)}`50 : `#${toHex(r)}${toHex(g)}${toHex(b)}`;51}5253async function extractColorTokens() {54 const styles = await getStyles();55 const colorStyles = styles.filter(s => s.style_type === 'FILL');5657 if (colorStyles.length === 0) {58 console.log('No color styles found in this Figma file.');59 return;60 }6162 // Fetch the actual node data to get fill colors63 const nodeIds = colorStyles.map(s => s.node_id);64 const nodeData = await getNodes(nodeIds);6566 const tokens = [];67 for (const style of colorStyles) {68 const node = nodeData.nodes?.[style.node_id]?.document;69 if (!node) continue;70 const fill = node.fills?.[0];71 if (fill?.type === 'SOLID' && fill.color) {72 const hex = rgbaToHex(fill.color);73 const cssVar = `--color-${style.name.toLowerCase().replace(/[\s/]+/g, '-')}`.replace(/[^a-z0-9-]/g, '');74 tokens.push({ name: style.name, cssVar, hex });75 }76 }7778 // Output as CSS custom properties79 console.log(':root {');80 tokens.forEach(t => console.log(` ${t.cssVar}: ${t.hex};`));81 console.log('}');8283 return tokens;84}8586extractColorTokens().catch(console.error);Pro tip: Run this script with 'node figma-tokens.js' in the Replit Shell to print CSS custom properties to the console. Redirect the output to a file: 'node figma-tokens.js > tokens.css'
Expected result: Running node figma-tokens.js outputs a :root CSS block with color variables named after your Figma color styles (e.g., --color-primary: #1a73e8;).
Export Assets from Figma to Your Replit Project
Export Assets from Figma to Your Replit Project
The Figma API's image export endpoint lets you programmatically download components as PNG or SVG files. This is useful for exporting icon libraries or illustration assets without manually clicking 'Export' for each one in the Figma app. The export workflow has two steps: first, request export URLs for specific nodes using POST /v1/images/{file_key}?ids={node_ids}&format=svg; second, download the generated file URLs (which are temporary S3 URLs valid for a short time). You need to know the Node IDs you want to export. Find these in Figma by right-clicking a component → 'Copy/Paste as' → 'Copy link' — the URL contains the node ID as ?node-id=XXX.
1// export-assets.js — Download Figma components as SVG files2const fs = require('fs');3const path = require('path');45const FIGMA_API = 'https://api.figma.com/v1';6const OUTPUT_DIR = './assets';78function headers() {9 return { 'X-Figma-Token': process.env.FIGMA_TOKEN };10}1112async function exportNodes(nodeIds, format = 'svg') {13 const ids = nodeIds.join(',');14 const url = `${FIGMA_API}/images/${process.env.FIGMA_FILE_KEY}?ids=${encodeURIComponent(ids)}&format=${format}`;15 const res = await fetch(url, { headers: headers() });16 if (!res.ok) throw new Error(`Export error ${res.status}: ${await res.text()}`);17 const data = await res.json();18 return data.images; // { nodeId: 'https://s3.amazonaws.com/...' }19}2021async function downloadFile(url, filepath) {22 const res = await fetch(url);23 if (!res.ok) throw new Error(`Download failed: ${res.status}`);24 const content = await res.text();25 fs.writeFileSync(filepath, content, 'utf8');26}2728async function exportIcons(nodeIdMap) {29 // nodeIdMap = { 'icon-home': '123:456', 'icon-user': '123:789' }30 const nodeIds = Object.values(nodeIdMap);31 const imageUrls = await exportNodes(nodeIds, 'svg');3233 if (!fs.existsSync(OUTPUT_DIR)) fs.mkdirSync(OUTPUT_DIR, { recursive: true });3435 for (const [name, nodeId] of Object.entries(nodeIdMap)) {36 const url = imageUrls[nodeId];37 if (!url) {38 console.warn(`No export URL for node ${nodeId} (${name})`);39 continue;40 }41 const filepath = path.join(OUTPUT_DIR, `${name}.svg`);42 await downloadFile(url, filepath);43 console.log(`Downloaded: ${filepath}`);44 }45}4647// Example: replace these with your actual node IDs from Figma48const icons = {49 'icon-home': process.env.FIGMA_NODE_HOME || '1:23',50 'icon-user': process.env.FIGMA_NODE_USER || '1:24'51};5253exportIcons(icons).catch(console.error);Pro tip: Export URLs returned by the Figma API are temporary S3 links that expire after a short time. Download the files immediately after requesting them — do not store the URLs for later use.
Expected result: Running node export-assets.js downloads SVG files to the assets/ directory in your Replit project, named after the keys in your nodeIdMap.
Common use cases
Design Token Extractor
Build a Replit script that reads your Figma file's color styles, text styles, and effect styles, then generates a design-tokens.json or tailwind.config.js file that your frontend project can import. Run this script whenever your Figma design system is updated to keep your code tokens in sync.
Write a Node.js script that fetches a Figma file using the Figma API, extracts all color styles (name and hex value), text styles (font family, size, weight), and spacing variables, and writes them to a design-tokens.json file. Store FIGMA_TOKEN and FIGMA_FILE_KEY in environment variables.
Copy this prompt to try it in Replit
Automated Icon Asset Export
Create a Replit script that exports all icon components from your Figma file as SVG files into your project's public/icons directory. Instead of manually exporting each icon one at a time, this script downloads the entire icon library in one run — useful when the icon set is updated frequently.
Create a Node.js script that finds all components in a Figma page called 'Icons', requests SVG export URLs for each one using the Figma API, downloads the SVG files, and saves them to a local icons/ directory with the component name as the filename. Read FIGMA_TOKEN and FIGMA_FILE_KEY from environment variables.
Copy this prompt to try it in Replit
Component Spec Documentation Generator
Build a tool that reads Figma component properties and auto-fills a structured component documentation template. For each component in a design system, the tool extracts the component name, description (from Figma's description field), and variants, then generates markdown or JSON documentation.
Write a Python script that fetches all components from a Figma file, reads each component's name and description, and writes a components.md file with a section for each component including its properties. Store FIGMA_TOKEN and FIGMA_FILE_KEY as environment variables.
Copy this prompt to try it in Replit
Troubleshooting
HTTP 403 — 'Forbidden' when calling the Figma API
Cause: The Personal Access Token is missing, expired, or the X-Figma-Token header is not being sent (note: it is NOT 'Authorization: Bearer' — Figma uses its own header name).
Solution: Open Replit Secrets and verify FIGMA_TOKEN is set. Double-check that your code uses 'X-Figma-Token' as the header name, not 'Authorization'. If the token was deleted in Figma, generate a new one from Figma → Settings → Security → Personal Access Tokens.
1// Correct Figma auth header2const res = await fetch(url, {3 headers: { 'X-Figma-Token': process.env.FIGMA_TOKEN } // NOT Authorization: Bearer4});HTTP 404 — 'Not found' when fetching a Figma file
Cause: The FIGMA_FILE_KEY is incorrect or the token does not have access to that file.
Solution: Confirm the file key from the Figma URL: figma.com/file/{FILE_KEY}/file-name. Verify the Personal Access Token belongs to an account that has view or edit access to the file. For team files, ensure the account is a member of the team.
Empty styles array — getStyles() returns no results
Cause: The Figma file has no named color or text styles, or the styles exist as local styles not published to the team library.
Solution: In Figma, styles must be named and created using the 'Styles' feature to appear in the API response. Frames with fill colors that are not saved as styles will not be included. Create named styles in your Figma file by clicking the four-dot grid icon in the design panel.
Best practices
- Store FIGMA_TOKEN in Replit Secrets — never hardcode it in your scripts or commit it to version control
- Use the Figma Dev Mode (inspect tab) for one-off CSS value lookups rather than writing API code for simple handoff tasks
- Cache Figma API responses locally when running design token extraction scripts — the file structure rarely changes within a single work session
- Name your Figma color styles with consistent, CSS-friendly names (e.g., 'Primary/500' or 'Text/Primary') to make automated CSS variable generation clean and predictable
- Run asset export scripts as one-time Replit scripts rather than web servers — they do not need to be deployed, just executed when the design is updated
- Keep Figma node IDs in a configuration file or environment variables so you can update them without changing your export script code
- Test your API integration with a simple file metadata request first (GET /v1/files/{key}) before building complex extraction logic
Alternatives
Framer generates production-ready React code with built-in interactions, making it a better choice if you want to go directly from design to deployed web components rather than just exporting assets.
Miro is better for collaborative planning and diagramming workflows rather than UI design handoff — use Figma for UI specs and Miro for product planning.
Tailwind CSS is a complementary tool rather than an alternative — use Figma for design and Tailwind in your Replit project to implement the design system with utility classes.
Frequently asked questions
How do I connect Replit to Figma?
Generate a Personal Access Token in Figma Settings → Security → Personal Access Tokens. Store it in Replit Secrets as FIGMA_TOKEN. Then call api.figma.com from your Replit server-side code, passing 'X-Figma-Token: your-token' as a header. The base URL for all Figma API requests is https://api.figma.com/v1/.
Does Replit have a native Figma integration?
Replit does not have a built-in Figma connector, but the Figma REST API works with standard Node.js or Python HTTP requests from any Replit project. The design-to-code workflow is primarily manual inspection (Dev Mode) supplemented by scripted API calls for asset export and token extraction.
Can I export Figma assets directly into my Replit project?
Yes. Use the Figma API's image export endpoint to generate download URLs for components or frames in your Figma file, then download those files into your Replit project using a Node.js or Python script. The script can be run manually whenever your design assets change.
Do I need a paid Figma plan for API access?
The Figma REST API is available on all plans including Free. Dev Mode (the in-app inspection panel for developers) requires a paid Figma plan. For automated token extraction and asset export via the API, the Free plan is sufficient.
What is a Figma File Key and how do I find it?
The Figma File Key is the unique identifier for a design file. Open your Figma file in the browser and look at the URL: figma.com/file/{FILE_KEY}/your-file-name. The alphanumeric string between '/file/' and the next '/' is your File Key. Store it in Replit Secrets as FIGMA_FILE_KEY.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation