Paste your site's address
Your published site on *.framer.website, *.framer.app or your own domain. Vite is picked for you.
FramerVite
Paste your Framer site's address and get a static Vite and React site in TypeScript: every page prerendered into dist/ at build time, React components with CSS modules, your CMS as JSON. Upload dist/ to any static host.
How it works
The same steps whatever the site. This page picks Vite; the converter lets you change it.
Your published site on *.framer.website, *.framer.app or your own domain. Vite is picked for you.
Conversions take 5.9 seconds on a typical day. Free, and you check the result before paying anything.
A .zip of your Vite project in TypeScript, 303 files. Unzip, install, run. Nothing from Framer inside.
What you get
realmehdi.com in Vite: 17 routes and 303 files. src/routes.tsx lists the routes, and scripts/prerender.ts writes each page's HTML where a static host looks for its URL. The pages, components and styles are the same as in every other framework.
17 routes in src/routes, each a route module, prerendered that sets its own title, description and canonical URL. Unknown paths get the site's 404.
35 components, each a .tsx file with typed props and its own CSS module, keeping the variants and hover states the designer set.
Props
stringstringFiles
Desktop, Laptop and Phone stay three layouts, as media queries. The converted home page is pixel-perfect: 0.00% of pixels differ at 1440, 768 and 390.
11 font stylesheets with @font-face rules, and 17 text styles as shared classes that change size at each breakpoint.
2 of the site's own and 8 from the marketplace, as source in src/code and src/vendor. 3 run only in the browser.
44 transitions, appear effects and hovers keep their springs: 35 of them stiffness 500, damping 60, played by motion.
The code
Unedited files from realmehdi.com's Vite export, 303 files in all.
src/routes/index.tsx
import type { ReactNode } from "react";
import type { RouteHandle } from "@/root";
import { PageHead, type Head } from "@/site/head";
import Template from "@/layouts/template";
import HomePage from "@/views/home";
const head: Head = {
meta: [
{
title: "Mehdi Hassan Portfolio",
},
{
property: "og:title",
content: "Mehdi Hassan Portfolio",
},
{
property: "og:description",
content:
"Helping startups design & develop breathtaking products & websites. 🌟 Expert in copywriting, design, & development.",
},
{
property: "og:url",
content: "https://mehdihassan.framer.website/",
},
{
property: "og:image",
content: "https://framerusercontent.com/assets/h1lpVwE2dPBKzvByiXOr3ANSFDA.jpg",
},
{
property: "og:type",
content: "website",
},
{
name: "twitter:card",
content: "summary_large_image",
},
{
name: "twitter:title",
content: "Mehdi Hassan Portfolio",
},
{
name: "twitter:description",
content:
"Helping startups design & develop breathtaking products & websites. 🌟 Expert in copywriting, design, & development.",
},
{
name: "twitter:image",
content: "https://framerusercontent.com/assets/h1lpVwE2dPBKzvByiXOr3ANSFDA.jpg",
},
],
links: [
{
rel: "canonical",
href: "https://mehdihassan.framer.website/",
},
],
};
export const handle: RouteHandle = {
// Around the page, from the root route (see src/root.tsx).
layout: (page: ReactNode, _params: Record<string, string>) => <Template key="layout">{page}</Template>,
};
function Page() {
return (
<>
<PageHead page={head} />
<HomePage />
</>
);
… 3 more lines
scripts/prerender.tssrc/routes/**/index.tsxpublic/_redirects, vercel.jsonsrc/site/forms.tsRun and deploy
A Vite site is its dist/ folder: upload it to any static host, such as Netlify, Cloudflare Pages, Vercel, GitHub Pages or an S3 bucket behind a CDN. Nothing runs on a server, and production needs no Node.js.
$
Only in Vite
react-router 8.4.0
Every page, CMS items included, is an HTML file in dist/, styled before its scripts run, then hydrated in the browser. Links open the next page in the same document with React Router, and the layout template two pages share stays mounted.
react-router 8.4.0
The site's redirects come as public/_redirects for Netlify and Cloudflare Pages and vercel.json for Vercel, and, for hosts with neither such as GitHub Pages, as a page at each old URL that sends the browser on.
The same in every framework
Next.js, TanStack Start, Astro, React Router, Vite, Nuxt and Static HTML exports share everything below. Only the routes, the document, the server and the build differ.
35 components · 17 pages
Pages, layout templates and design components are React components in src/views, src/layouts and src/components, each with its CSS module. Components keep the designer's folders, variants and hover states.
17 text styles · 11 fonts
Colour styles become CSS variables in src/styles, shared text styles become classes, and every font family gets its @font-face rules.
<collection>.json
Each Framer CMS collection becomes a schema (src/cms/<collection>.ts) and its records as JSON (src/cms/<collection>.json).
api/forms/<form>
Native Framer forms post to the project's own API route, with a rate limit, a honeypot and field checks, and deliver submissions to webhooks you set in environment variables. A Vite site, which has no server, posts them to a form service.
44 effects on motion
Animations and interactions run on motion, the open-source animation library. No Framer runtime: a small, readable kit in src/lib/deframer replaces it.
robots.txt · sitemap.xml
Every page keeps its title, description and social image. The site's redirects, robots.txt and sitemap.xml come with it, and a README lists every route.
Pricing
Convert free and check the Vite result first. Pay only to download: one credit per project, credits never expire. Or pay once for the lifetime deal: unlimited conversions, and every site you verify downloads free.
Launch discount · 50% off until 8 December 2026
Pay once, then convert as many sites as you like and download every site you verify, free, for as long as Deframer runs.
Fair use: up to 100 conversions a day.
Regular price $397$197one-time
Covers sites you verify with the meta tag. Downloading without verification still uses 10 credits (up to 30 for sites over 100 pages), and site protection uses credits too.
Launch prices: 50% off. Every pack doubles in price after 15 November.
One download with site verification.
$10$20one-time
1 credit · $10.00 per credit
Five verified downloads, or save toward a direct download.
$25$50one-time
5 credits · $5.00 per creditSave 50%
For studios moving their clients' sites, with their permission.
$100$200one-time
30 credits · $3.33 per creditSave 67%
Prices in USD. Checkout by Whop, our payment provider, which adds sales tax or VAT where it applies. Credits and the lifetime deal are added as soon as you pay and aren't refundable; see the refund policy.
Compare packs on the pricing pageLimits
Plain facts before you convert.
FAQ
Limits, files and verification are in the main FAQ, credits on the pricing page.
Yes. Deframer converts a published Framer site into a static Vite and React site written in TypeScript, which you download as a .zip and own: npm run build prerenders every page into dist/, with the same animations, interactions and CMS content, and any static host serves it.
Anywhere that serves static files: Netlify, Cloudflare Pages, Vercel, GitHub Pages or an S3 bucket behind a CDN. Each page is an HTML file at its URL (about.html for /about); Netlify, Cloudflare Pages and GitHub Pages serve it at /about, and the project's vercel.json turns that on for Vercel.
Each native form posts its fields to a form service, such as Formspree or Basin, whose URL you set in VITE_FORM_ENDPOINT (or a form's own variable) when you build. On Netlify, set it to netlify and Netlify Forms receives them.
Redirects come as public/_redirects (Netlify, Cloudflare Pages), vercel.json (Vercel) and a redirect page at each old URL for hosts with neither. A split test needs a server to pick each visitor's variant, so the static site ships the tested page's original version.
Converting is free. Downloading the code is for your own site, or one whose owner allows it: verify the site for a 1-credit download, or confirm you own it or have permission and download for 10 credits. See pricing.
Get started