Figma Build logo

Figma Build

CommunityPopular
awdr74100
figma-build

Build a Figma design from code or a description — the reverse of figma-codegen. Reuses the connected file's existing design system (components, variables, styles) instead of drawing primitives with hardcoded values. Triggers whenever the user wants something created or updated IN Figma from code or a spec — e.g. 'build this in Figma', 'create a Figma design for this', 'push this component/screen to Figma', 'turn this React/Vue into a Figma design', 'recreate this UI in Figma', 'make a Figma version of …', 'design a landing page/screen in Figma' — or whenever a coding artifact (a component, page, or spec) appears alongside a request to author in a connected Figma file. Works for full screens, sections, single components, or design-system assets.

Overview

Publisherawdr74100
Repositoryfigwright
Skill namefigma-build
Stars
1.2K
Forks
67
Bundled files
4
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 4 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by awdr74100 on GitHub. Read the source before you install it.

Installation

Install the Figma Build AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/awdr74100/figwright/tree/main/skills/figma-build
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/awdr74100/figwright.git /tmp/figwright
mkdir -p .claude/skills
cp -r /tmp/figwright/skills/figma-build .claude/skills/figma-build
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Figma Build in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Figma Build on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Figma Build is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

figma-build

Turn code or a description into a Figma design that looks like it belongs in the file: reuse the components, variables, and styles that already exist, and only build what's genuinely missing. This is the mirror image of figma-codegen — same "reuse beats regenerate / reference tokens not literals" philosophy, pointed at the canvas instead of the codebase. This file is the router; deep detail lives in references/ — load a reference when its step is in play.

You operate on the connected Figma file (the plugin's current session). There is no fetch-by-URL; the user must have the target file open. Confirm a plugin is connected (ping) before building.

When to use

  • The user wants to create or update something in Figma from code or a description — a screen, view, modal/dialog/drawer/sidebar/panel, a single component, or a design-system asset.
  • Not for reading a Figma design into code — that's figma-codegen.

More than one Figma file open

Every tool result says so when it applies, so you do not have to check up front: with two or more files connected and none claimed, results carry a MORE THAN ONE FIGMA FILE IS OPEN block naming them. It matters because calls otherwise follow whichever file the user last touched, which changes when they switch tabs — so a task can read one file and write to another and report success.

When you see it, claim the file before doing anything else: list_files names every connected file, use_file({ fileName }) claims one for this session (use_file({ sessionId }) when two open files share a name — Figma allows that, and x (Copy) is how it happens). Every later call then reaches that file whatever is in front, including while its tab sits in the background. If the user has not said which file, ask — do not guess from the names.

First, understand the environment, then build (provider-first)

The write-side mirror of codegen's grounding, and the most important habit: an off-looking build almost always comes from invented values or assumed conventions. So understand this user's actual environment first, then build into it — never apply a generic template. There's no single "right" stack; there's their stack. Look at both ends before creating anything:

  • The Figma file — its existing design system, which you'll reuse and bind to:
    1. get_variable_defs → the file's variables (colour / spacing / radius / typography) with names + values + hex. These are the tokens you bind to.
    2. scan_components / get_local_components → existing components to instance rather than rebuild. Match the source UI pattern (a card, a list row, a nav, a button) to a component.
    3. get_styles → shared paint / text / effect styles to apply.
    4. A design system that lives in a published library — these reads list only the file's own definitions. When they come back empty or sparse but the file is built on a team library (its components are library instances, or the user says so), the tokens are in the library file: read their keys there and import what you bind. Don't conclude "no tokens" and hardcode values. → references/write-rules.md, "Tokens from a published library".
  • The source you were handed — when it's code, which stack and styling system (Tailwind / Chakra / MUI / CSS modules / vanilla …) and whether it has a config / theme / tokens file. That's where its real values live — read them from there, don't assume a default.

Then build, tracing every value to a source in priority order: reuse an existing component / variable / style; else take the exact value from the source's own code — provider-first, resolving whatever styling system it uses to real px / hex (CSS literally; Tailwind / Chakra / UnoCSS / … via their config or scale), never eyeballed; only invent from a consistent scale when neither exists. Full detail + the value-resolution method in references/write-rules.md.

Two jobs — both follow the write rules

Every build obeys the same cross-cutting rules — ground values (design system → source code → scale), reference tokens (colour via bind_variable_to_paint, scalars via bind_variable_to_node, shared looks via apply_style_to_node), auto-layout for related children (absolute only for top-level placement), HUG/FILL/FIXED sizing via set_layout_props (so the layout computes sizes — don't hardcode width/height), and real fonts (a new TEXT node defaults to Inter). → references/write-rules.md.

  • Assemble a screen / component from what exists (the common case): recognise the UI pattern, create_instance matching components, bind tokens, build incrementally, screenshot-verify each step. → references/assemble-screens.md.
  • Author a new design-system asset (only when grounding found no equivalent): create variables/collections, paint/text styles, or components + variant sets, then switch back to the reuse path. → references/author-design-system.md.

Motion (animation)

When the source carries animation — CSS @keyframes / transition, Framer Motion, GSAP, a Vue/Svelte transition — author it as Figma Motion (beta) on the frame you built rather than dropping it: apply_animation_style (presets from get_motion_styles) or apply_manual_keyframe_track per property, set_timeline_duration for length. A staggered row is one atomic batch of apply_animation_style ops with increasing config.timelineOffset — not N calls. Motion is Figma-Design-only and keyframes attach to a top-level frame's layers, so build the frame first. → references/motion.md.

Verify visually (close the loop)

get_screenshot the built node, fix discrepancies, and re-screenshot — the same render-and-diff discipline codegen uses, in reverse. Check it against the source intent and against objective design health (this catches problems even when you built from a vague description with no source to compare): nothing clipped or overflowing, edges aligned, spacing consistent (one scale), a clear type hierarchy. An empty: true export means the node rendered nothing (hidden / off-canvas).

Rules

  • Understand the environment, then build. Read both the file's design system and the source's stack / styling system before creating anything — there's no single right stack, only theirs. Ground every value (design system → the code's own values → a sensible scale); never invent.
  • Reuse beats regenerate. Instance existing components; bind existing variables/styles. Build new only what the system lacks, and name/structure it to fit.
  • Reference tokens, not literals. Colour via bind_variable_to_paint, scalars via bind_variable_to_node, shared looks via apply_style_to_node — never hardcode hex/px when a token exists (get_variable_defs tells you what does).
  • A colour from code is sRGB — say so. Write it with space: "SRGB" beside its r/g/b, or a Display P3 file paints it more saturated than the code (references/write-rules.md).
  • Auto-layout for related children, absolute coordinates only for top-level placement. Centre with the parent's alignment (primaryAxisAlignItems / counterAxisAlignItems; a child that aligns differently gets its own wrapper frame), never by tuning x/y; align_nodes aligns/distributes what has no layout, set_text_properties takes textAlignHorizontal / textAlignVertical. Recipes, shapes (create_shape, boolean_nodes, flatten_nodes) and what the tools still can't draw, in references/write-rules.md "Centering and alignment".
  • One create call, fully styled. create_frame, create_rectangle, create_ellipse, create_shape and create_text take fills, strokes, layoutSizing* (frame and rectangle also cornerRadius; a frame also autoLayout and clipsContent; text its typography incl. textAlignHorizontal) — each meaning what it means on its set_* tool. Use them instead of a create plus a chain of follow-ups.
  • ok: true is not proof. Confirm layout-sensitive writes by screenshot or read-back, and report anything the tools could not express instead of claiming it done.
  • Build incrementally and validate (screenshot) — recognise the UI pattern and assemble it from the matching components, don't reproduce it from primitives.
  • Match the file's conventions — naming, structure, and the design system's own patterns, the way codegen mirrors the project's existing code style.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Figma Build AI skill do?

Build a Figma design from code or a description — the reverse of figma-codegen. Reuses the connected file's existing design system (components, variables, styles) instead of drawing primitives with hardcoded values. Triggers whenever the user wants something created or updated IN Figma from code or a spec — e.g. 'build this in Figma', 'create a Figma design for this', 'push this component/screen to Figma', 'turn this React/Vue into a Figma design', 'recreate this UI in Figma', 'make a Figma version of …', 'design a landing page/screen in Figma' — or whenever a coding artifact (a component,...

Why use Figma Build on TypingMind?

Because you install it once and use it with any model. Figma Build is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Figma Build in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/awdr74100/figwright/tree/main/skills/figma-build. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Figma Build?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Figma Build?

As many as you like. As long as a model supports skills, you can use Figma Build with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Figma Build AI skill free?

Yes. It is published on GitHub by awdr74100 under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇