Guides / React to Webflow

How to convert React (JSX, Next.js, shadcn/ui) to Webflow

[A]Short answer

Webflow can't run React components as editable elements. Paste a component (JSX or TSX) into FlowPaste: it runs the code in a sandbox, then converts what renders into native Webflow elements, classes and breakpoints. For a whole app, drop the project folder as a .zip, or use Live Capture on the running app (localhost works). Tailwind, CSS modules, styled-components and shadcn/ui styles all come across; React state and logic don't.

Updated · Tested with JSX and TSX components, a Vite project (.zip), Next.js, shadcn/ui, styled-components, Vue, Svelte and Astro test pages.

At a glance

Paste a component
JSX or TSX → rendered in a sandbox → converted. No need to rewrite as HTML.
Whole projects
Drop a .zip (Vite, plain React) or capture the running app, including localhost.
Styling
Tailwind (v3/v4), CSS modules, styled-components, Emotion, shadcn/ui CSS variables.
Class names
Readable: CSS-module and styled-components hashes are replaced (Hero_title__Zx9yQ → hero-title).
Packages
React is built in; other npm imports (lucide-react, framer-motion) load from esm.sh.
Not carried over
State, event handlers, data fetching. You get the design as rendered.

Why React code doesn't paste into Webflow

A React component isn't a page: it's a function that produces one when it runs, often with data, state and styles that only exist at runtime (CSS-in-JS, Tailwind classes, CSS modules with hashed names). Webflow's Designer edits static elements and classes, so there's nothing to paste.

Webflow's code components (DevLink) bring React components in as code you configure with props, not as elements you can style in the Style panel. And most HTML-to-Webflow converters reject JSX outright.

FlowPaste runs the component first. Inside a sandbox it compiles JSX and TypeScript, loads React and any packages, renders, waits for fonts and images, then captures the result with every style the browser applied. That capture is converted like any other page: one class per look, values per breakpoint and state.

Ways to do it, compared

MethodEditable in WebflowResponsiveTime for one pageBest for
Webflow code components (DevLink)Props only; not in the Style panelAs codedDeveloper setupInteractive widgets that need React
Ask the AI for plain HTML, then convertYesYes5–15 minutesWhen you want GSAP as Interactions
Rebuild by hand in the DesignerYesYes, if you build it2–6 hoursSmall pages, or a full redesign
Paste JSX into FlowPasteYes: native elements and classesYesUnder a minutev0, Lovable, Bolt, Claude and your own components

How to convert a React component to Webflow

Time: about 2 minutes per component. You need: the component code (or the project / running app), the FlowPaste Chrome extension, a Webflow site in the Designer.

  1. Copy the component

    Copy the JSX or TSX file: one component with an export default works best. It can import React hooks, lucide-react, framer-motion and other packages.

  2. Paste it into the Convert tab

    Open FlowPaste in the Designer and paste. FlowPaste detects React and shows a live preview that runs the code.

    TipFor a project with several files, zip the folder and drop the .zip. FlowPaste finds index.html or App.jsx and follows relative imports, CSS and images.

  3. Check the preview

    Switch between desktop, tablet and mobile. What you see is what will be converted, in its initial state.

  4. Convert & copy

    Click Convert & copy. FlowPaste renders the component, captures it and converts it.

  5. Paste on the canvas

    Press ⌘V (Ctrl+V) in the Designer. Check the notes for fonts to add and icons that became Embeds.

  6. Or capture the running app

    For a Next.js or full app, run it (npm run dev), open the page in Chrome and use Live Capture on each section.

What comes across

In ReactIn WebflowNotes
JSX elements (<section>, <div>, <h1>, <a>, <img>)Native Webflow elements
Tailwind classNameClasses named from structure (pricing-card)
CSS modules (Hero_title__Zx9yQ)hero-titleReadable part of the name kept
styled-components / EmotionClasses named from structureHashes dropped
shadcn/ui theme variables, oklch() coloursResolved hsla() values
next/fontThe real font nameAdd it in Site settings → Fonts
lucide-react / inline SVG iconsEmbed elements
useState, onClick, data fetchingThe rendered stateRebuild behaviour with Interactions
Vue, Svelte, Astro, web components (live capture)Native elementsShadow DOM is flattened; islands unwrapped

Example: a JSX component in, Webflow out

[IN]JSX
export default function Pricing() {
  return (
    <section className="py-16 px-6 bg-slate-50">
      <h2 className="text-3xl font-bold text-center">Simple pricing</h2>
      <div className="mt-8 grid md:grid-cols-3 gap-6 max-w-5xl mx-auto">
        {["Starter", "Pro", "Team"].map((p) => (
          <div key={p} className="rounded-2xl bg-white p-6 shadow">
            <h3 className="text-xl font-semibold">{p}</h3>
            <a className="mt-6 block rounded-lg bg-blue-600 px-4 py-2 text-white hover:bg-blue-700">Choose {p}</a>
          </div>))}
      </div>
    </section>);
}
[OUT]In the Webflow Designer
Section        simple-pricing
  Heading H2   simple-pricing-heading
  Div Block    simple-pricing-container   (grid, 1 col on mobile)
    Div ×3     simple-pricing-card        (radius 16 · shadow)
      H3       simple-pricing-heading-2
      Link     simple-pricing-button      (+ Hover)

Problems and fixes

"The design didn't render"

The component threw an error or needs props. Wrap it so it renders with sample data, or export a page-level component instead of a child.

An import can't be found

Relative imports need the other files: drop the project as a .zip instead of a single file.

Package imports fail

Packages load from esm.sh, which needs a network connection. Check that esm.sh isn't blocked on your network.

A tab or modal shows the wrong state

FlowPaste converts the initial render. Change the default state in the code before converting.

After you paste

  • Add the fonts in Webflow → Site settings → Fonts. FlowPaste lists them in the notes after each conversion. Until then, text that brought its own font file still shows correctly, but you can't pick the font in the Typography panel.
  • Click through tablet, mobile landscape and mobile portrait in the Designer. Media queries are already mapped to those breakpoints; check anything the notes marked as "snapped".
  • Look for Embed elements (inline SVG icons, pseudo-elements, leftover scripts). They show on every plan; editing their code needs a paid site plan.
  • Images: Webflow publishes images only from its own Assets. Connect your site once in FlowPaste → Account → Webflow images, and every paste uploads its images for you. Without it, images show in the Designer but break on the published site.
  • Add behaviour back with Webflow Interactions where you need it.

Questions

Can I import React components into Webflow?

As editable elements, yes with FlowPaste: it renders the component and converts the result. Webflow's own code components keep them as code you configure with props.

Does it work with v0, Lovable and Bolt output?

Yes. Paste the component or drop the exported project as a .zip. Or capture the preview in a separate tab.

Does it work with Next.js?

Yes, through Live Capture on the running site (localhost or deployed). Single components can be pasted directly.

What about Vue, Svelte or Astro?

Capture the running page with Live Capture. We've tested Vue, Svelte, Astro and web components; their styles and structure come across.

Will my React state work in Webflow?

No. You get the design as it renders. Use Webflow Interactions for toggles, tabs and animations.

Sources

Paste your first component.

Free: 3 free runs each day: 3 conversions, 3 element captures or 1 full-page capture. No credit card.

Add to Chrome, free →