Converting Vue.js components to Figma means capturing a rendered Vue component's DOM output and computed CSS and importing it into native, editable Figma layers. Because Vue compiles to standard HTML, you can copy the rendered output from any running Vue app — Nuxt, Vite, Vue CLI, localhost — via browser DevTools, then paste it into html2design without touching any source code. The workflow takes approximately 30 seconds per component.
The Vue-to-Figma Problem
Vue teams run into the same design-dev gap that affects every modern front-end stack. Your component library lives in .vue single-file components — buttons, modals, data tables, navigation — carefully built and tested over months. Meanwhile, the Figma file is a relic: a snapshot of an old design pass that no longer matches the running app.
Designers work from stale mockups and spend half their time reconciling the "Figma version" with what the dev team actually shipped. Every sprint, the gap widens.
The obvious fix is to pull the real components into Figma. But Vue components aren't static assets — they're JavaScript modules that need a browser to compile and render. Most "design system sync" tools require you to add special annotations to your Single File Components, integrate a build plugin, or maintain a parallel Storybook configuration.
There's a simpler path. Vue already renders to HTML and CSS. You can capture that output from any running Vue app — no code changes, no extra tooling — and convert it to editable Figma layers using html2design. The workflow takes about 30 seconds per component.
Why This Works
When a Vue Single File Component renders, the browser compiles the template, executes the script, and produces a standard HTML DOM with computed CSS. At that point, it is just HTML — identical in structure to what any other website produces.
The html2design Figma plugin processes raw HTML and CSS, reading the computed styles the browser has resolved and mapping them to native Figma layers. The plugin does not care how that HTML was generated — whether by Vue 3's Composition API, the Options API, Nuxt's server-side rendering, or a Vue CLI project. The rendered output is the same.
Key insight: You don't need a "Vue to Figma" plugin. You need an "HTML to Figma" plugin — because that's exactly what Vue produces. html2design is built for this workflow.
Prerequisites
- A Figma account (free or paid)
- The html2design plugin installed from Figma Community
- An active html2design subscription ($12/mo or $96/yr)
- A running Vue dev server (localhost:5173, localhost:3000, or similar)
Step-by-Step: Convert a Vue Component to Figma
Run your Vue app locally
Start your Vue development server as you normally would:
Navigate to the page or component you want to convert. If your app uses Vue Router, go directly to the route that renders the component you are targeting.
Open DevTools and locate the component
Open browser DevTools with Cmd+Option+I (Mac) or F12 (Windows/Linux). Switch to the Elements panel.
Use the element picker (Cmd+Shift+C on Mac) to click directly on the component you want to capture. DevTools highlights and selects the matching DOM node.
Navigate up the DOM tree to find the component's root element. For a card component, you want the outermost <div> of the card — not a wrapping layout container from the page. Vue 3 supports multiple root elements per component, so identify the root element that contains the full visual component you want to capture.
Copy the rendered HTML
In the Elements panel, right-click the root element → Copy → Copy outerHTML.
This copies the fully rendered HTML — with all resolved class names, data attributes, and inline styles. For a Vue component styled with Tailwind, the output looks like:
Vue adds data-v-xxxxxxxx scoped CSS attributes when using Scoped Styles. These are harmless — html2design ignores unknown attributes and reads the computed styles instead.
Open html2design in Figma
Switch to your Figma file. Open the plugin via Main Menu → Plugins → html2design. The plugin panel appears on the right side of the canvas.
Make sure you are signed in with an active subscription. If not subscribed yet, install the plugin from Figma Community and start a subscription — it takes about two minutes.
Paste and convert
Paste the copied HTML into the plugin's input field (Cmd+V on Mac, Ctrl+V on Windows). Click Convert.
The plugin generates a native Figma frame on the canvas with:
- Positioned frames preserving the visual layout of every Flexbox container
- Text layers with font, size, weight, line-height, and color preserved
- Fills and strokes matching background colors, borders, and box shadows
- SVG vector paths for icons and inline SVG elements
- Border radius mapped from CSS or Tailwind utility values
Clean up and promote to a component
Select the generated frame. Review the layer names in the Layers panel — auto-generated names like div.rounded-2xl should be renamed to reflect your Vue component vocabulary (ReviewCard, UserAvatar, etc.).
When the layers look right, select the root frame and press Cmd+Alt+K (Mac) or Ctrl+Alt+K (Windows) to promote it to a Figma Component. Capture additional component states (hover, loading, empty, error) separately and combine them as Figma Variants.
Vue-Specific Workflows
Working with Nuxt.js
Nuxt 3 server-renders Vue components before they reach the browser. By the time you inspect a Nuxt page in DevTools, the full rendered HTML is already in the DOM — including content from server-side data fetching. Copy it exactly as you would for a client-side Vue app.
For Nuxt layouts and shared components (nav, footer, sidebars), navigate to a page that includes that component, pick the element in DevTools, and copy just that section's outerHTML. This gives you a clean import without full page noise.
Nuxt tip: Nuxt DevTools (the floating panel in development mode) shows you which Vue components are active on the current page. Use it to quickly identify which DOM elements belong to which component before switching to the Elements panel to copy them.
Vue Scoped Styles and CSS Modules
Vue's Scoped Styles add a data-v-xxxxxxxx attribute to each element and generate matching CSS selectors. When you copy a component's outerHTML, the browser has already applied those scoped styles as computed values. html2design reads the computed output — not the original selectors — so Scoped Styles, CSS Modules, and plain global CSS all produce identical results in the converted Figma frame.
Working with Vue UI component libraries
Many Vue projects use Vuetify, PrimeVue, Quasar, Naive UI, or Element Plus for UI components. These libraries render to standard HTML with framework-specific class names. The import workflow is identical: open the component in the browser, copy its outerHTML, and paste it into html2design. The converted Figma frame will visually match the rendered output regardless of which library generated it.
One nuance: UI library components often wrap their content in deep DOM trees — a Vuetify button might be three nested divs deep. After importing, you may need extra time cleaning up the layer hierarchy: removing extraneous wrapper frames and flattening the structure to match your component vocabulary.
Capturing different component states
Vue components built with v-if, v-show, reactive props, or Pinia/Vuex state often have multiple visual states. Capture each separately:
- Default state — the base render
- Loading state — trigger via a mock API delay or a
:loading="true"prop injected through Vue DevTools - Error state — inject an error via Pinia or directly modify the reactive ref in the Vue DevTools panel
- Hover state — use DevTools' Force element state → :hover before copying
In Figma, create each state as a separate imported frame, then combine them as Variants under a single Component. This gives you a Figma component library that mirrors your Vue component API.
Vue DevTools tip: The Vue DevTools browser extension lets you inspect component props and data directly and modify reactive state in real time. Use it to trigger specific component states before switching to the Elements panel to copy the rendered output.
Vue 3 Composition API and script setup
Whether your component uses <script setup>, the Options API, or class-based components, the rendered HTML output is identical in structure. html2design does not read Vue source files — it only processes the DOM that the browser produces. Any valid Vue component will work.
What Gets Converted from Vue Components
html2design accurately converts the vast majority of what Vue components produce. Here's what to expect:
- Flexbox layouts → Accurately positioned Figma frames (spacing, padding, and alignment preserved visually; Auto Layout not applied automatically)
- Typography → Font family, size, weight, line-height, letter-spacing, color, text alignment
- Colors → Fills, gradients, box shadows, borders — all preserved as Figma styles
- Border radius → Mapped from CSS or Tailwind values to Figma corner radius
- SVG icons → Native Figma vector paths, fully editable
- Background images → Captured as image fills where accessible
- CSS Grid → Approximated with nested frames (partial support; positions preserved, no Auto Layout)
- CSS animations / Vue transitions → Static snapshot only; capture the component at rest
- Scoped styles / CSS Modules → Fully supported via computed style resolution
Component-level beats full-page. Convert one component at a time rather than copying the entire page body. Smaller input produces a cleaner layer tree that's easier to name, organize, and promote to a Figma Component.
Compared to Dedicated Vue-to-Figma Tools
The Vue ecosystem does not have a widely adopted dedicated "Vue to Figma" converter. Most teams either maintain Figma manually or use screenshot-based tools that produce flat, uneditable images.
Some design-system tooling (like Supernova or Zeroheight) can sync design tokens between Figma and code, but they don't import component structure — they handle tokens (colors, typography, spacing), not component layout and composition.
The html2design approach fills the gap: it imports real rendered component structure — frames, text layers, fills, SVG paths — as editable Figma layers. The trade-off is that you capture one component state at a time rather than generating all variants in a single automated pass.
For most Vue teams, the manual-capture workflow is practical and fast enough. For teams needing to auto-generate hundreds of variants from a component catalog, a dedicated introspection tool may be worth the significant setup cost. See our full comparison of HTML-to-Figma tools for more context.
Building a Vue Design System in Figma
Once you have a workflow for converting individual Vue components, you can systematically build a Figma design system that mirrors your Vue component library. A practical sequencing:
- Primitives first — buttons, inputs, badges, chips, avatars. Small, composable, and easy to convert and clean up.
- Compound components next — cards, modals, forms, data tables. These use the primitives you have already captured.
- Page sections and layouts last — hero, pricing, navigation, sidebars. Bigger and denser layer trees, but changed less often in design work.
For each component, capture three or four key states: default, hover (force via DevTools), disabled, and loading or error. These cover the vast majority of what designers need to produce accurate mockups and handoff specs.
Once your core component set is in Figma as reusable Components, publish the Figma file as a Team Library. Designers can use components from the library in new mocks — and you can update the library by re-importing components after shipping changes, keeping Figma in sync with the live codebase. See our guide on keeping Figma designs and code in sync for the full maintenance workflow.
Frequently Asked Questions
Can I convert a Vue component to Figma?
Yes. Vue renders to standard HTML and CSS in the browser. You copy that rendered output using DevTools and paste it into the html2design Figma plugin. No special Vue plugin or code annotation is needed.
Does Vue to Figma work with localhost?
Yes. html2design works from HTML you paste directly into the plugin — it does not need to reach a URL. Your Vue dev server on localhost:5173 (Vite default) or localhost:3000 works exactly the same as a live URL. See our guide on converting HTML to Figma for the general workflow.
Does html2design work with Vue 3 Composition API?
Yes. html2design operates on the rendered DOM output, not the source code. Whether you use the Composition API with <script setup>, the Options API, or any other Vue 3 pattern makes no difference — what the plugin processes is the HTML and computed CSS the browser produces.
Can I import Nuxt.js pages into Figma?
Yes. Nuxt pages render to HTML that you can inspect and copy in DevTools. Because Nuxt server-renders to the browser, the DOM in DevTools is the fully resolved output. Copy it and paste it into html2design as you would for any client-side component. See our guide on importing a website into Figma for full-page strategies.
What about Vue UI libraries like Vuetify or PrimeVue?
All Vue UI libraries render to standard HTML. html2design does not know or care which library generated the output — it reads the computed DOM. Vuetify, PrimeVue, Quasar, Naive UI, and Element Plus all work. You may need to clean up the resulting layer tree more than you would for a hand-rolled component, since UI libraries often produce deeper DOM hierarchies.
Key Takeaways
- ✓ Vue.js renders to HTML — capture any component state from Vite, Nuxt, or localhost in ~30 seconds
- ✓ No code changes, no build plugins — works from your existing running dev server without touching
.vuefiles - ✓ Scoped Styles, CSS Modules, Tailwind, Vuetify, PrimeVue — all work identically via computed style resolution
- ✓ Capture specific states (hover, loading, error) using Vue DevTools reactive state manipulation before copying
- ✓ Nuxt SSR, Options API, Composition API, and
<script setup>all work — plugin only sees the rendered DOM
Related Articles
The Complete Guide to HTML to Figma Conversion (2026) →
The pillar guide covering every framework, every method, and every use case — all in one place.
How to Convert HTML to Figma: A Developer's Guide →
The core workflow — DevTools, code paste, and cleaning up the output in Figma.
How to Convert React Components to Figma Designs →
The same workflow for React — Storybook, Next.js, Vite, and Tailwind all covered.
Tailwind to Figma: Build a Design System from Your Tailwind Components →
Pairs naturally with Vue + Tailwind projects — extract tokens as Figma Variables and import your component library.
How to Keep Figma Designs and Code in Sync (2026 Guide) →
The full maintenance workflow: design tokens, component sync, and the html2design reverse-sync loop.
How to Import a Component Library into Figma →
Scale the single-component workflow into a full library import — batch import, token extraction, and Figma library publishing.
How to Import a Website into Figma →
Full-page import strategies and the two methods compared: Chrome extension vs code paste.
Try it now
Convert your first Vue component in 30 seconds
Open DevTools on your running Vue app. Copy the component's outerHTML. Paste into html2design. Get editable Figma layers instantly.
Install from Figma Community →$12/mo · $96/yr · Cancel anytime