v0.1 · open source · MIT

Your Claude Design exports, editable in Figma.

Real frames, real auto-layout, real components — not a screenshot.

today.fig — landing-page.png screenshot
page.png · 1440 × 2400
Layers
page.png
tomorrow.fig — landing-page editable
Layers
Page
CardGrid
Card
Card
Card
Card
Card
Card
02 · The problem

Claude Design exports to Canva, PDF, PPTX, and HTML — but not Figma.

Design teams live in Figma. The obvious workaround is to screenshot the HTML and paste the PNG — but that produces a dead artifact. No editable text, no swappable components, no design system carry-over.

The moment a designer wants to iterate, they rebuild the entire thing by hand. Every spacing decision, every token, every component boundary — re-derived from a flat image.

Claude Design · Export targets
Canva
supported
PDF
supported
PPTX
supported
HTML
supported
Figma
— gap —
// claude-to-figma fills the last row.
// HTML in → editable .fig out.
03 · How it works

Three steps. One command in the middle.

Step 01

Export from Claude Design.

Standard HTML export. No special setup, no plugin, no flags. Whatever you'd download today.

page.html + assets/
Step 02

Run the CLI.

One command. Resolves CSS, computes layout with yoga, detects components, extracts design tokens.

claude-to-figma convert page.html \
  -o page.ir.json --hydrate
Step 03

Paste into the Figma plugin.

Builds a real scene graph: frames, auto-layout, components with text overrides, paint and text styles in your local styles panel.

⌘V → Build → done.
04 · What "fully editable" means

Four things you get that a screenshot never gives you.

Frames, not raster images.

Every <div> becomes a FrameNode. Change the text — it stays text.

FRAME Hero
FRAME Heading
TEXT "Your Claude Design exports..."

Auto-layout that works.

display:flex; gap:16px; justify-content:space-between becomes a horizontal auto-layout frame.

↳ drop a child in — Figma lays it out.

Components, not duplicates.

Six identical card markups become one Card component plus six instances. Edit the master, all six update.

Named design tokens.

Repeated colors become color/primary. Repeated text combos become heading/lg, body/md.

color/accent#B5471F
color/ink#1C1A16
color/paper#F2EDE0
Aheading/lgFraunces 52/52
Abody/mdDM Sans 17/26
05 · The pipeline

An IR sits in the middle. Both halves are dumb.

Input
Claude Design HTML
page.html
+ inlined styles
+ /assets
CLI
Parse · Cascade · Layout · Detect
parse5
lightningcss
yoga · cascade engine
The product
IR JSON
portable
tool-agnostic
diffable
Builder
Figma plugin
scene graph
auto-layout
local styles
Output
Editable Figma file
frames · components
auto-layout · styles
real text

"Both halves are dumb. The IR is the product. Swap the plugin for a Sketch or Penpot builder later — only that half changes."

06 · Get started

Three commands. No account.

Open source. MIT licensed. The plugin install lives inside the repo's packages/plugin folder.

~/projects/claude-to-figma
# 1 · clone
$ git clone https://github.com/brianleach/claude-to-figma
# 2 · install & build all packages
$ cd claude-to-figma && pnpm install && pnpm -r build
# 3 · convert your export
$ node packages/cli/dist/index.js convert your-export.html \
-o page.ir.json --hydrate
→ wrote page.ir.json (373 nodes · 12 components · 49 tokens)