Any webpage, rebuilt as native Figma layers.
UnHTML converts a page into real frames, text, images, vectors, and true auto-layout, mapped from its actual CSS. Not a flattened screenshot. Drop in a file and edit everything the moment it lands.
From file to editable canvas in three moves.
No account, no upload step. The plugin renders and measures your page in its own UI, then writes native layers straight onto the canvas.
Drop a file
A self-contained .html, a Safari .webarchive, or a scene.json. It stages as a chip so you can confirm exactly what is loaded.
Set viewport & options
Choose Desktop 1440, Mobile 390, or type a custom width. Toggle auto-layout conversion and, if you need it, opt in to remote fetching.
Get layers + a report
Real editable layers land on your canvas, with an honest report of every font substituted, frame reverted to absolute, and image skipped.
Drop it straight into the plugin
Drag a self-contained file onto the drop zone. The plugin renders it in a real browser context, measures every node, and builds the layers. No CLI, no setup beyond the plugin itself.
Capture with the CLI or bookmarklet
For live sites, remote assets, or JS-built pages, a real headless browser fetches everything with no CORS limits and full-page scroll, then you drop the scene.json.
Built for editing, not just for looking.
Every layer maps to something you can actually change in Figma. When a mapping cannot be reproduced, the plugin degrades on purpose and tells you why.
Real auto-layout, from real CSS
CSS flex, simple grids, and stacked block sections map to true Figma auto-layout: spacing, padding, wrap, and stretch included. A frame that cannot reproduce the captured geometry falls back to absolute automatically, so the result is never worse than a pixel-faithful import. Toggle it off any time to import everything with absolute positions.
Editable text with real runs
Family, weight, size, and color per run, plus letter-spacing, line-height, text-transform, alignment, underline, and strikethrough, all preserved as live text.
Images & vectors, natively
SVGs become native Figma vectors. WebP and AVIF transcode to PNG. Hero and card background photos become image fills behind their content, and gradients map to Figma gradients.
Fonts you lack, handled
Missing fonts are substituted automatically (default Inter, configurable), and every single swap is listed so nothing changes silently.
Honest reporting
After every import you get a report: fonts substituted, frames reverted to absolute, images skipped. A node-count budget guards against 10k-layer dumps.
JS-rendered pages
Bundled React and Vue pages are detected and re-rendered with scripts on inside a sandboxed frame, an explicit opt-in because it needs the network.
By default, nothing leaves your machine.
Zero network requests with default settings. Self-contained files and web archives carry their own assets, so the import needs nothing from the outside.
Markup is sanitized before it renders: scripts, inline event handlers, and javascript: URLs are stripped.
Remote fetching is opt-in. JS-rendered pages run only in a sandboxed frame, and only when you turn it on deliberately.
One-time pricing. No subscription.
Start on the free plugin and see your first pages land as layers. Pro adds the one-click capture and the auto-layout that makes them worth editing. Pay once; nothing renews.
- Drop HTML, .webarchive or scene.json
- Absolute positioning (auto-layout is Pro)
- Up to 500 layers per import
- Open-source capture CLI & bookmarklet
- Personal use, community support
- Everything in Free
- Auto-layout from real CSS flex & grid
- Unlimited layers per import
- Desktop, Mobile & custom viewports
- Import reports & font-substitution log
- Commercial use, one year of updates
- Everything in Pro
- Up to 5 editors
- Priority support
- One year of updates
Launch pricing, and it may change. A purchase you have already made stays at the price you paid.
Straight answers.
What UnHTML does, what it does not, and where its limits are, stated plainly.
.html file or a Safari .webarchive, since both carry their own images, styles, and fonts. For live sites behind the network, remote stylesheets, or pages built by JavaScript, use the CLI or bookmarklet to capture a scene.json, then drop that into the plugin.Stop screenshotting. Start editing.
Bring any page into Figma as layers you can actually work with, and keep it all on your machine while you do.