figma-generate-design

Use this skill alongside figma-use when the task involves translating an application page, view, or multi-section layout into Figma. Triggers: 'write to Figma', 'create in Figma from code', 'push page to Figma', 'take this app/page and build it in Figma', 'create a screen', 'build a landing page in

By figma · 4,942 installs

npx skills add figma/mcp-server-guide --skill figma-generate-design

Source repository · Upstream listing

Build / Update Screens and Views from Design System Use this skill to create or update screens, views, and multi section UI containers in Figma by reusing the published design system — components, variables, and styles — rather than drawing primitives with hardcoded values. This includes full pages, modals, dialogs, drawers, sidebars, panels, and any composed view with multiple sections. The key insight: the Figma file likely has a published design system with components, color/spacing variables, and text/effect styles that correspond to the codebase's UI components and tokens. Find and use those instead of drawing boxes with hex colors. MANDATORY : You MUST also load [figma use](../figma use/SKILL.md) before any use figma call. That skill contains critical rules (color ranges, font loading, etc.) that apply to every script you write. Always include figma generate design in the comma separated skillNames parameter when calling use figma as part of this skill. If this skill was loaded via an MCP resource, you MUST prefix the name with resource: (e.g. resource:figma generate design ). This is a logging parameter — it does not affect execution. Skill Boundaries Use this skill when the deliverable is a composed Figma view (new or updated) — full page screens, modals, dialogs, drawers, sidebars, panels, or any multi section container — built from design system component instances. If the user wants to create new reusable components or variants , use [figma use](../figma use/SKILL.md) directly. If the user wants to write Code Connect mappings , switch to [figma code connect](../figma code connect/SKILL.md). Prerequisites Figma MCP server must be connected The target Figma file must have a published design system with components (or access to a team library) User must provide a target Figma file (URL or fileKey ). If they don't have one yet, invoke /figma create new file (or call create new file ) first and reuse the returned file key. Both use figma and generate figma design require an existing fileKey . Source code or description of the screen/view to build/update Parallel Workflow with generate figma design (Web Apps Only) When building a screen from a web app that can be rendered in a browser, the best results come from running both approaches in parallel: 1. In parallel: Start building the screen using this skill's workflow (use figma + design system components) against the target Figma file ( fileKey ). Run generate figma design against the same fileKey to capture a pixel perfect screenshot of the running web app into that file. generate figma design always requires fileKey — if the user does not yet have a Figma file, first invoke /figma create new file (or call the create new file MCP tool) to get one, and reuse that file key for both this skill and the capture. 2. Once both complete: Update the use figma output to match the pixel perfect layout from the generate figma design capture. The capture provides the exact spacing, sizing, and visual treatment to aim for, while your use figma output has proper component instances linked to the design system. If the capture contains images, transfer them to your use figma output by copying imageHash values from the capture's image fills (see Step 5 for details). 3. Once confirmed looking good: Delete the generate figma design output — it was only used as a visual reference. This combines the best of both: generate figma design gives pixel perfect layout accuracy, while use figma gives proper design system component instances that stay linked and updatable. This parallel workflow is MANDATORY when the source contains images. The use figma Plugin API cannot fetch external image URLs — it can only set image fills by copying imageHash values from nodes already in the file. generate figma design rasterizes all visible images into Figma, providing the hashes you need. If you skip the capture when images are present, image frames will be left blank. For non web apps (iOS, Android, etc.) or when updating existing screens, use the standard workflow below. Required Workflow Follow these steps in order. Do not skip steps. Hard gates — forbidden shortcuts: Forbidden: search design system for component keys until 2a i is complete and 2a ii is attempted or logged N/A (e.g. "empty file, no existing screens"). Forbidden: Any use figma call that mutates the canvas (Step 3+) until all Step 2 rows in the checklist below are filled in. Step 1: Understand the Deliverable Before touching Figma, understand what you're building: 1. If building from code, read the relevant source files to understand the structure, sections, and which components are used. 2. Identify the major sections of the view (e.g., for a page: Header, Hero, Content Panels, Footer; for a modal: Title Bar, Form Sections, Action Bar; for a sidebar: Navigation, Content Area, Footer Actions). 3. For each section, list the UI components involved (buttons, inputs, cards, navigation pills, accordions, etc.). 4. Identify the product's font family from the source. Do not default to Inter. Find which typeface the product uses before writing any script. See [references/discover product font.md](references/discover product font.md) for where to look (CSS variables, component files) and how to resolve messy Figma font names. 5. Check whether the view contains any images (e.g., <img , <Image , background images, product photos, avatars, icons loaded from URLs). If it does and this is a web app, you must run the parallel generate figma design capture workflow — start it immediately alongside Step 2 so the capture runs while you discover components. See "Parallel Workflow with generate figma design" above. Step 2: Collect Component Keys, Variables, and Styles You need three things from the design system: components (buttons, cards, etc.), variables (colors, spacing, radii), and styles (text styles, effect styles like shadows). Don't hardcode hex colors or pixel values when design system tokens exist. 2a: Discover components 2a i — REQUIRED: Check Code Connect for needed components. Starting from the component list you built in Step 1, check whether each component has a Code Connect file in the codebase. Code Connect files live next to the component source and are named by platform: TypeScript/JS : .figma.ts , .figma.js React (parser based) : .figma.tsx Kotlin/Compose : .kt files containing @FigmaConnect Swift : .swift files containing FigmaConnect For each component you need (e.g., Button, Card, Input), search for its Code Connect file — glob or grep by component name (e.g., /Button.figma.tsx , /Card.figma.ts ). Only read files that match components you actually need. From each matching Code Connect file, extract the Figma component URL. Parse fileKey and nodeId from the URL (convert hyphens to colons: 123 456 → 123:456 ). Then resolve component keys via use figma : Example: Code Connect file contains // url=https://figma.com/design/ABC123/File?node id=609 35535 . Parse fileKey = ABC123 , nodeId = 609:35535 . Run use figma against the library file (fileKey ABC123 , not the target file) to resolve the key: Batch multiple lookups in a single call. Use the returned keys with importComponentSetByKeyAsync() in Step 4. Mark resolved components. If all components are resolved, skip 2a ii and 2a iii. If none of the needed components have Code Connect files, proceed to 2a ii. 2a ii — REQUIRED if unresolved components remain: Inspect existing screens. Check if the target file already contains screens using the same design system. A single use figma call that walks an existing frame's instances gives you an exact, authoritative component map: Match results against your unresolved components. Mark any newly resolved. If all components are resolved, skip 2a iii. 2a iii — LAST RESORT: search design system . Only if components remain unresolved after completing both 2a i and 2a ii. Before searching, call get libraries to discover which libraries are available for the file. This returns two lists: libraries already added to the file and libraries available to add (community UI kits and org libraries). Each entry includes a libraryKey you can pass to search design system via the includeLibraryKeys param to scope your search to specific libraries instead of searching across everything. Org libraries in libraries available to add are paginated (20 per page). When libraries available to add next offset is non null, more org libraries are available — call get libraries again with offset set to that value to fetch the next page. Community UI kits only appear on the first page. If the user names a specific library you don't see in the current page, page further before giving up. This is especially useful when the file has many libraries and you want targeted results (e.g. searching only within "iOS 26" or "Material 3" instead of getting matches from every library). Search broadly, but one intent per query — search design system does NOT apply OR semantics, so never pack alternatives or synonyms into a single string ("Button IconButton icon" matches nothing useful). Pass each term as a component entry in one queries call: { entity: "component", query: "button" } , { entity: "component", query: "input" } , { entity: "component", query: "nav" } , etc. Multi word names and phrases are fine when they name one thing ("Material Design Icons"). Include component properties in your map — you need to know which TEXT properties each component exposes for text overrides. Create a temporary instance, read its componentProperties (and those of nested instances), then remove the temp instance. Example component map with property info: 2b: Discover variables (colors, spacing, radii) Inspect existing screens first (same as components). Or use search design system with queries entries whose entity is "variable" . WARNING: Two different variable discovery methods — do not confuse them. use figma with figma.variables.getLocalVariableCollectionsAsync() — returns only local variables defined in the current file . If this returns empty, it does not mean no variables exist. Remote/published library variables are invisible to this API. search design system with entity: "variable" query entries — searches across all linked libraries , including remote and published ones. This is the correct tool for discovering design system variables. Never conclude "no variables exist" based solely on getLocalVariableCollectionsAsync() returning empty. Always also run search design system with variable query entries to check for library variables before deciding to create your own. Query strategy: search design system matches against variable names (e.g., "Gray/gray 9", "core/gray/100", "space/400"), not categories. Put multiple short, simple queries in one queries call rather than one compound query: Primitive colors: "gray", "red", "blue", "green", "white", "brand" Semantic colors: "background", "foreground", "border", "surface", "text" Spacing/sizing: "space", "radius", "gap", "padding" If initial searches return empty, try shorter fragments or different naming conventions — libraries vary widely ("grey" vs "gray", "spacing" vs "space", "color/bg" vs "background"). Inspect an existing screen's bound variables for the most authoritative results: For library variables (remote = true), import them by key with figma.variables.importVariableByKeyAsync(key) . For local variables, use figma.variables.getVariableByIdAsync(id) directly. See [variable patterns.md](../figma use/references/variable patterns.md) for binding patterns. 2c: Discover styles (text styles, effect styles) Search for styles