About generate-component-doc-figma
A Figma skill that collects data for a component and converts it into structured Markdown documentation. Designers and developers can generate consistent pages covering anatomy, variants, tokens, typography, and accessibility; the Node converter makes output deterministic.
Key features
- 01Collects component and variant data
- 02Documents anatomy and design tokens
- 03Generates variant and state matrices
- 04Includes typography and accessibility sections
- 05Optional code parity and YAML frontmatter
Use cases
- 01Create Markdown docs for a Figma component
- 02Document variants and configurable properties
- 03Add implementation and design-code parity details
MCP support
Collects Figma data via `use_figma`; a separate Node script converts the collected JSON into Markdown. Collection requires the Figma Desktop app.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ southleft/ skills-for-figma --skill generate-component-doc-figmaAfter installing, type/generate-component-doc-figmain Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/doc-template.mdscripts/collect-component-data.jsgenerate-doc.mjsDetails
From the project READMEgenerate-component-doc-figma — Figma component → Markdown docs
Produce a complete documentation page for one component or component set: overview, anatomy tree,
design tokens, variants/states matrix, typography, accessibility, content guidelines, and (optionally)
design-code parity and YAML frontmatter. This skill collects structured data from the file via
use_figma, then a deterministic Node converter (scripts/generate-doc.mjs) emits the Markdown —
the same collected JSON always produces identical Markdown. Do not freehand the doc from prose.
Skill boundaries
use_figmarules — load the officialfigma-useskill first; it is the full Figma Plugin API reference. Essentials these scripts rely on: plain JS with top-levelawait+return(no IIFE, nofigma.closePlugin();console.logis not returned), inputs inlined asconstat the top of each script, colors in 0–1 range, load fonts before any text op,await figma.getNodeByIdAsync(...), and atomic errors (a failed script applies nothing — read the error, fix, retry).- The collect script runs anywhere (
use_figma); the converter is Node and runs in a terminal (node scripts/generate-doc.mjs ...). Same split asexport-tokens-figma. If you can't run Node, you can't produce the doc — say so rather than freehanding it. - Markdown section layout + the
cleanVariantNamerule → references/doc-template.md. The converter already implements every rule in that file; treat it as the spec, not a checklist for hand-assembly. - Reading/writing annotations as standalone specs → use the
annotations-figmaskill. - Exporting the whole token system (not just one component's tokens) → use
export-tokens-figma.
Workflow
- Identify the target. Get the component or component-set node ID from the current selection or a
URL/ID the user provides. Component sets (with variants) produce the richest docs. Set
NODE_IDin the collect script. Also note the file URL (for thefigma:link / frontmatter). - Collect data → save JSON. Run
scripts/collect-component-data.jsviause_figma(skillNames: "generate-component-doc-figma"). It returns the anatomy tree, per-variant colors (with bound token id + name), typography (font family, numeric weight + name, size, line height, letter spacing), spacing tokens, component property definitions (variants/booleans/text props), the description, and annotations (with category names). Save the returned JSON to a file (e.g.collected.json). - Generate the Markdown (deterministic). Run the Node converter in a terminal:
It ports the source generator's section logic exactly: Overview (+ When to / When NOT to Use parsed from the description), Component Anatomy, Variants (matrix + icon mapping + configurable props), Token Specification (color + spacing tables), Typography, Content Guidelines, Accessibility, Design Annotations, and — withnode scripts/generate-doc.mjs collected.json [--code-info codeInfo.json] [--out docs/components/Button.md] [--frontmatter] [--file-url <figma-url>]--code-info— Implementation, Design-Code Parity, and Changelog.cleanVariantNameis applied automatically (Type=Image, Size=12→Image / 12). Same input → identical output. - Optional code parity. To add Implementation / Parity /
[View Source]&[Storybook]links, read the component source and write acodeInfo.json(props, importStatement, sourceFiles, baseComponent, changelog, …), then pass--code-info codeInfo.json. - Optional frontmatter. Pass
--frontmatterto prepend YAML frontmatter (title, status, version, tags, figma URL, lastUpdated). - Review & deliver. Read the emitted Markdown, sanity-check it, then write/return it. Report the path and a one-line summary (variant count, token count).
Notes
- Font loading: if you add a step that writes text into Figma (e.g. stamping the doc back onto the
canvas),
await figma.loadFontAsync(...)first. Pure documentation generation reads only. - The collect script uses
MAX_DEPTHto keep payloads small for deep trees — raise it only if the anatomy looks truncated. - Token names come from
boundVariables; a color/spacing with no bound variable renders as—in the token tables (a hardcoded value to replace with a token). - The converter is dependency-free (Node 18+, ESM). It exits non-zero with a clear message if the JSON is missing or malformed.
- These collect tools require the Figma Desktop app (the Plugin API isn't available in the browser).