Tutorial · 8 min read

Vue to Figma: Import Vue.js Components into Figma

Vue renders to HTML and CSS — and that output converts to native, editable Figma layers in seconds. Here's the exact workflow for Vue 3 developers, including Nuxt, Vite, and Tailwind projects.

HF

HTML to Figma Team

Last reviewed: April 2026

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

Step-by-Step: Convert a Vue Component to Figma

Step 1

Run your Vue app locally

Start your Vue development server as you normally would:

# Vite + Vue 3 (most common) npm run dev # Nuxt 3 npm run dev # Vue CLI (legacy) npm run serve

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.

Step 2

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.

Step 3

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:

<div data-v-3f9a2b1c class="rounded-2xl bg-white border border-gray-100 p-6 flex flex-col gap-4 shadow-sm"> <div data-v-3f9a2b1c class="flex items-center gap-3"> <img data-v-3f9a2b1c src="/avatar.jpg" class="w-10 h-10 rounded-full object-cover" alt="..." /> <div data-v-3f9a2b1c> <p data-v-3f9a2b1c class="font-semibold text-gray-900 text-sm">Sophie Martin</p> <p data-v-3f9a2b1c class="text-xs text-gray-500">Lead Designer</p> </div> </div> <p data-v-3f9a2b1c class="text-gray-700 text-sm leading-relaxed">Saved hours on our design sync process.</p> </div>

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.

Step 4

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.

Step 5

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:

Step 6

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:

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:

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:

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


Related Articles

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

← Back to Blog