Skip to content

$99 lifetime on AppSumo · Limited time

Get deal
wpgraft
v0v0A component or page v0 generated
InstaticInstaticSelf-hosted CMS, filled through its own Import HTML

How to move a page from v0 to Instatic

Move a page from v0 to Instatic as real, editable Instatic elements, not a screenshot. What comes across, and what does not.

wpgraft reads the page as your browser rendered it, the real elements and the real computed styles, at every breakpoint you ask for, and rebuilds it as Instatic’s own native elements with the styles in Instatic’s own fields. It does not care that a language model wrote the HTML, and it does not care what framework the page was built with: by the time wpgraft looks, all of that has already become computed styles.

The awkward part of building a page with v0 was never the generating. It is that what comes out is HTML, and what you need is something you can edit in Instatic next month without opening a code editor. This closes that gap: the generated page is rebuilt as real Instatic elements, so the next change is a click in a panel rather than a prompt and a re-paste.

Before you start

What to have ready

  • 01An Instatic site you host, and an account on it that can open the Site editor.
  • 02No plugin. Instatic is not WordPress, and nothing is installed on it: the copy goes in through Instatic’s own Import HTML.
  • 03In the extension’s Copy into menu, pick Instatic, listed under Other builders.Get the extension
Phase 1 · Set up
  1. 01

    Install the wpgraft extension in Chrome

    wpgraft is a Chrome extension. Get it from wpgraft.com/releases. Install it, click the icon, sign in. Copying needs an account with a paid plan, which you can choose from wpgraft.com/#pricing. On your very first copy it asks you to confirm you have the right to reuse what you are copying, once, and does not ask again.

    Get the Chrome extensionwpgraft.com/releases → Get the Extension
  2. 02

    No plugin: Instatic needs nothing installed

    Instatic is a self-hosted CMS, not WordPress, so there is no wpgraft plugin in this story and nothing to install on your Instatic server. The extension works with the Site editor directly, through Instatic’s own Import HTML.

Phase 2 · Copy, in v0
  1. 03

    Open the v0 page you want

    The preview beside the chat is a frame. v0 gives every generation its own URL; open that in a tab and copy it there.

    Open the preview in its own tab
  2. 04

    Choose Instatic in the extension

    Click the wpgraft icon on the source tab and pick your destination under Copy into. There is one Instatic entry, labelled Instatic. Switch Also copy tablet & phone on unless you only want the desktop layout: it is off until you turn it on, and it captures three viewports instead of one, so the copy arrives responsive.

  3. 05

    Point at what you want and copy it

    Select element starts a picker: hover to highlight, press ↑ to widen the selection to the parent and ↓ to narrow it again, click to confirm, Esc to cancel. Whole page takes the entire document in one pass. wpgraft scrolls the page for you first so lazy images and scroll-triggered effects have fired, then waits for the fonts and images to finish before it reads anything.

    click copies · ↑ widen · ↓ narrow · Esc cancels
Phase 3 · Insert, in Instatic
  1. 06

    Open the page in the Instatic Site editor

    Sign in to your Instatic admin and open the page you want the copy on in the Site editor; its address contains /admin/site. Instatic runs on your own domain, so the extension has no address to look for: it works on the editor tab you open its popup from. There is no wpgraft panel inside the editor. As with Webflow, the extension’s own popup is the insert surface.

    Open the page in the Instatic Site editor
  2. 07

    Add it in Instatic

    With the Site editor tab in front, click the wpgraft icon. In the extension popup the queued copy carries an Add in Instatic button. Pressing it puts the copy’s HTML on your clipboard first, then opens Instatic’s own Import HTML dialog with the copy already in it and presses Insert, so Instatic’s own importer builds the nodes and classes. A section goes inside the container you have selected in the editor; with none selected, and for a whole-page copy, it goes at the page root, after whatever the page already holds. If the button cannot reach the editor, the HTML is already on your clipboard: right-click a container, choose Paste HTML here…, and press Insert.

    Add in Instatic → Import HTML → Insert
  3. 08

    Check the fonts, then publish

    Published Instatic pages load fonts from your own domain only, so wpgraft installs the Google fonts the copy uses through Instatic’s own font installer during the insert. Any other typeface is listed in the popup; add it under Site → Fonts. The copy lands as a draft, so the last thing is Instatic’s own Publish.

Phase 4 · Edit
  1. 09

    Edit it like you built it

    This is where the product earns its keep. Click anything in the copy and Instatic’s own panel opens with real values in it. There is no wrapper you may not touch, no “generated, do not edit” block and no code view. Change the heading, swap the image, drag the padding.

The result

What lands in Instatic

Real Instatic nodes

Containers, text, links, images, SVG and forms, each keeping its HTML tag, built by Instatic’s own importer, the same one behind Paste HTML here…. Not an embed and not a block of raw HTML.

Classes in the Selectors panel

Styles arrive as Instatic classes you edit in the Selectors panel, with the tablet and phone values in Instatic’s own viewport contexts. The page’s body and root styles go onto one wrapper class, so a copy never restyles the rest of your site.

Fonts served from your own domain

Google fonts the copy uses are installed through Instatic’s own font installer during the insert, with the character sets the page’s text needs, because published Instatic pages load fonts from your own domain only.

After the insert: The copy lands as a draft. Look it over, then press Instatic’s own Publish when it is right. Everything the copy added sits inside one wrapper container, which is selected when the insert finishes: delete it and the copy is gone.

The source side

Copying out of v0

The preview beside the chat is a frame. v0 gives every generation its own URL; open that in a tab and copy it there.

  • Open the preview on its own URL. The pane in the chat is a frame, and wpgraft copies the tab’s own page.
  • v0 output is React with Tailwind and often shadcn/ui. None of that survives into the destination and none of it needs to: wpgraft reads the rendered result, so what lands is builder-native elements with real values in real fields.
  • v0 is at its best for one component at a time, which suits the element picker: point at the card, the pricing table or the hero and take just that.
  • Interactive components copy in whatever state is showing. Open the accordion, pick the tab, then capture.
Honest limits

What does not carry over

A guide that only lists what works will waste your afternoon. These are the things that surprise people, set out before you start rather than discovered afterwards.

  • What is on screen is what is copied. A closed accordion is copied closed; an inactive tab is copied inactive; a carousel is copied on whichever slide was showing. Put the page into the state you want before you pick.
  • Behaviour does not travel; appearance does. A slider arrives as its markup and its styling, not as a working slider; a form arrives as a form that has had its submit target deliberately removed, so your copy can never post to v0’s endpoint. Wire interactive things up with Instatic’s own tools.
  • Anything driven by a query arrives as a design. A post grid copies as the posts that were on the page at that moment, not as a loop that keeps querying.
  • Links that pointed at code are disabled. A javascript: link in the source page is emptied during the capture, before anything reaches Instatic. It is the one thing wpgraft will not carry across for you.
  • Only the page in the tab is copied; never what is inside a frame. An <iframe> comes across as the frame it is, pointing at the same address. wpgraft does not descend into it, same origin or not, which is also why a builder’s own editor canvas and an AI chat’s artifact preview have to be opened on their own URL before you can copy them.
  • Images stay at their original URLs. They render in the editor and on the published page, but they are not in your Instatic media, and because Instatic keeps alt text on its media assets, the alt text does not come across. Re-upload anything you intend to keep.
  • Only Google fonts are installed for you. Any other typeface is named in the copy and listed in the popup; add it under Site → Fonts. Until you do, the next family in the font stack renders. wpgraft never ships a text face’s files.
  • Embedded frames show in the editor only. A map or any other <iframe> comes across as an element, but Instatic’s published pages block frames from other sites, so it does not appear on the live page. A YouTube embed is the exception: it becomes an Instatic video.
  • Instatic classes are site-wide. The copy’s class names are made from what they style, so they never collide with classes you already have. Insert the same copy twice and both share them, so restyling one restyles the other.
  • Add in Instatic drives Instatic’s own dialog. If a future Instatic renames it, the button falls back to the clipboard, where the HTML already is: right-click a container, choose Paste HTML here…, and press Insert.
Questions

v0 to Instatic: FAQ

Do I need a plugin or anything installed on my Instatic site?

No. There is no wpgraft plugin for Instatic and nothing to configure on your server. The extension opens Instatic’s own Import HTML dialog in the Site editor with the copy in it, and Instatic’s own importer does the building.

Add in Instatic says to open the Site editor. What is wrong?

The extension could not reach an Instatic Site editor. Instatic runs on your own domain, so the extension works on the tab you open its popup from: open the page in the Site editor, click the wpgraft icon from that tab, and press Add in Instatic again. If it still cannot insert, the HTML is already on your clipboard: right-click a container, choose Paste HTML here…, and press Insert.

Why does a font look wrong after the insert?

Published Instatic pages load fonts from your own domain only, so a font has to be installed in Instatic before it renders. wpgraft installs the Google ones through Instatic’s own font installer during the insert. A typeface that is not on Google Fonts, or one the installer turned down, is listed in the popup; add it under Site → Fonts.

Does moving from v0 to Instatic change anything on the v0 side?

No. wpgraft reads the generated page and writes to Instatic. Nothing is sent back to v0 and nothing there is altered.

Will the Instatic copy still need v0 installed?

No. What lands in Instatic is Instatic’s own elements with the styles in Instatic’s own fields. There is no shortcode, no embed, no wrapper block and no stylesheet borrowed from v0. The copy is fully yours and stands on its own.

Is the result editable, or is it a locked block?

Editable. The copy is built by Instatic’s own HTML importer, so what lands is ordinary Instatic nodes wearing ordinary Instatic classes: select anything and edit it in Instatic’s own panels. wpgraft’s Instatic test inserts a copy into a real Instatic and fails unless every inserted node is one of Instatic’s own modules and every class it wears is in Instatic’s own class registry.

Does it copy the mobile and tablet layouts too?

Yes, once you switch Also copy tablet & phone on. It is off by default, and with it off you get the desktop layout only, slightly faster. With it on, wpgraft measures the page three times: at your window’s own width, then at 768px, then at 375px. The narrow layouts arrive in Instatic’s own viewport contexts. Before the insert, wpgraft adds a context for each width it measured, so the phone styles apply at the width they were captured at instead of folding into the nearest context your site already had. One honest caveat about the measurement: the Web Store build produces the narrow viewports inside the page rather than by resizing the window. It re-evaluates every media query at the target width, pins the layout width, resolves vw units and clamps position: fixed boxes to it, and the result is measured at 100% of the property values a real 768px and 375px window produces on getbootstrap.com and on a stock WordPress theme. What it cannot do is re-run the source site’s own JavaScript for the new width, so a layout a script computes on resize is copied as the desktop script left it, and the capture says so in a warning.

What does this cost?

Every plan is paid; there is no free tier and no trial. Pro is $20 a month or $180 a year, and Lifetime is $299 once. Each one includes every destination, whole-page copies as well as sections and elements, and unlimited copies at full fidelity, with nothing watermarked or downgraded. If it does not work for what you build, ask within 7 days of the charge and 90% of the plan price comes back.

Is copying a page from v0 legal?

A page you generated yourself is yours to use, subject to the terms of the tool that generated it. Fonts, images and icons that the page pulled in from somewhere else carry their own licences and those follow them into the copy.

Read more

Try a single section first.

Every destination unlocked, full fidelity, on every plan. Point at one v0 section, put it in Instatic, and judge the result inside the refund window.