Documentation
Everything you need to export, preview, download, and host your Framer site using FramerExporter.
How to export
Step 1 — Publish your site on Framer
FramerExporter downloads your published Framer site. Before exporting, make sure your site is published in Framer (not just in draft).
Your site must be accessible at a public URL, for example yoursite.framer.website, a custom domain, or any URL that returns your Framer site to visitors.
Step 2 — Paste your Framer URL
Go to the Dashboard or the home page and paste the full URL of your Framer site. You can paste:
https://yoursite.framer.websitehttps://yourcustomdomain.com- Any public page of your Framer project
Then click Export.
Step 3 — Wait for the export to complete
Depending on the size of your site, the export can take from a few seconds to several minutes. You can monitor progress in real time on the dashboard.
The export goes through several phases:
- Fetching all pages (HTML)
- Downloading JavaScript modules
- Downloading images, fonts, and other assets
- Replacing CDN URLs with local paths
- Packaging everything as a ZIP
Plan limits
Each plan has limits on file size and number of projects:
- Free — 1 project, up to 50 MB
- Single — 1 project, up to 250 MB (one-time payment)
- Pro — 10 projects, up to 500 MB per project
- Agency — 30 projects, up to 1 GB per project
If your site exceeds the limit, the export will stop and show an error. Upgrade your plan on the Pricing page.
Preview
What is the preview?
After the export finishes, you get a preview link before you download anything. The preview serves your exported site directly from our server so you can confirm it looks and works correctly.
Check navigation, animations, and interactive elements before downloading. If something is wrong, you can re-export without wasting time deploying broken files.
Preview URL format
The preview URL looks like https://framerexporter.com/abc123xyz/. It is served over HTTPS, which means all JavaScript, animations, and routing work correctly.
Preview vs. opening index.html directly
Do not open index.html by double-clicking it in your file manager. Browsers block JavaScript modules when loaded via file://, which means animations and navigation will be broken.
Always serve the site over HTTP — either using our preview, your hosting, or a local server (see below).
Download & unzip
Downloading the ZIP
Click the Download button on the dashboard to get a ZIP file containing all your site files: HTML, CSS, JS modules, images, fonts, and other assets. No build step required.
What's inside the ZIP
index.html— homepagepage-name/index.html— one folder per additional page*.mjs— JavaScript modules (Framer runtime)images/— all images and SVGsfonts/— web fontsassets/— other files (JSON, CMS data, etc.).htaccess— MIME type fix for Apache servers
Unzipping
Unzip the file and you will get a single folder. That folder is your deployable site. The folder that contains index.html at the top level is the one you upload.
Hosting guides
Vercel
- Go to vercel.com and sign in.
- Click Add New → Project.
- Drag and drop the unzipped folder, or connect a GitHub repo containing the folder.
- Framework preset: Other. No build command. Publish directory: leave blank (root).
- Click Deploy.
Add a custom domain in Project → Settings → Domains.
Netlify
- Go to netlify.com and sign in.
- Click Add new site → Deploy manually.
- Drag and drop the unzipped folder onto the upload area.
- Netlify deploys instantly. Add a custom domain in Site settings → Domain management.
For a Git-based deploy: push the folder to a repo and connect via Netlify's Git integration. Build command: leave blank. Publish directory: the folder root.
GitHub Pages
- Create a new GitHub repository (public or private).
- Push the unzipped folder contents to the
mainbranch. - Go to Settings → Pages → Source: Deploy from branch → main → / (root).
- Your site will be live at
https://username.github.io/repo-name/.
cPanel / traditional hosting (FTP)
- Connect to your server via FTP (e.g. FileZilla) or use cPanel File Manager.
- Upload the entire unzipped folder to
public_html(or your domain's web root). - Make sure the
.htaccessfile is uploaded (it sets the MIME type for.mjsfiles).
If the JavaScript modules are not loading (blank page or console errors), add this to your .htaccess:
<IfModule mod_mime.c> AddType application/javascript .mjs </IfModule>
Local testing (your own computer)
Never open index.html directly. Use a local HTTP server instead:
Node.js:
cd path/to/unzipped-folder npx serve .
Python 3:
cd path/to/unzipped-folder python -m http.server 8000
Then open http://localhost:3000 (Node) or http://localhost:8000 (Python) in your browser.
VPS / self-hosted server (Nginx)
Upload the folder to your server (e.g. /var/www/mysite) and configure Nginx:
server {
listen 80;
server_name yourdomain.com;
root /var/www/mysite;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# Serve .mjs files with correct MIME type
types {
application/javascript mjs;
}
}Known limitations
FramerExporter downloads your published Framer site as static files. Most sites work correctly after export, but some Framer features depend on Framer's cloud infrastructure and cannot be replicated in a fully static export.
Lottie animations (.lottie files)
.lottie file is downloaded correctly, but the browser cannot display it natively — it requires a dedicated player runtime that is part of Framer's proprietary bundle.What you will see: a broken image icon where the animation was.
How to fix: In your Framer project, replace Lottie animations with one of these alternatives before exporting:
- Export the animation as a GIF or MP4 and add it as a media component in Framer.
- Use a Lottie JSON animation (not
.lottie) together with an open-source player component in Framer.
Framer CMS (dynamic content)
If you update your CMS content after exporting, your hosted site will show the old content until you re-export and redeploy.
Framer Forms
How to fix: replace the Framer form with a third-party form service (e.g. Tally, Typeform, Formspree) and embed it as a custom HTML component in Framer before exporting.
Framer Search
FramerExporter downloads the search index JSON file automatically. Search should work on most static hosts. If search is not working, verify that the assets/searchIndex.json file is being served correctly by your host and that the MIME type is application/json.
Password-protected pages
Framer Commerce
FramerExporter automatically removes the Framer Commerce widget from exported HTML to avoid broken UI elements. For e-commerce, consider integrating a third-party solution (e.g. Shopify, Stripe) directly.
Fonts not loading
FramerExporter downloads web fonts from Framer's CDN and replaces all URLs with local paths. On most hosts this works automatically.
If fonts are not loading, check that your server is not blocking access to font files. On Apache/cPanel, add to .htaccess:
<FilesMatch "\.(woff|woff2|ttf|otf|eot)$"> Header set Access-Control-Allow-Origin "*" </FilesMatch>
Animations not working (blank page)
If animations do not work after deploying, the most common cause is that .mjs JavaScript module files are being served with the wrong MIME type.
The exported ZIP includes a .htaccess file that fixes this automatically on Apache servers. For Nginx, add this to your server config:
types {
application/javascript mjs;
}Vercel and Netlify handle this automatically.
Site exported, but some pages are missing
FramerExporter crawls your site up to 3 levels deep, starting from the URL you provided. Pages that are:
- Not linked from any page
- Only reachable after login or interaction
- More than 3 link-clicks away from the homepage
…may not be included. To ensure all pages are exported, start the export from your homepage.
Framer may block exports
Still need help?
If you run into an issue not covered here, open a support request and we will do our best to help.
Open support request