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.website
  • https://yourcustomdomain.com
  • Any public page of your Framer project

Then click Export.

Note: The exporter automatically discovers and downloads all pages linked from your site (up to 3 levels deep). Hidden or password-protected pages will not be included.

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:

  1. Fetching all pages (HTML)
  2. Downloading JavaScript modules
  3. Downloading images, fonts, and other assets
  4. Replacing CDN URLs with local paths
  5. 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.

Note: The preview URL is temporary. Depending on your plan, exports expire after 7 days (Free), 30 days (Single), or 90 days (Pro). Agency plan exports are kept for the duration of your subscription.

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.

Note: Free plan users must be signed in to download. Paid plans can download from any device.

What's inside the ZIP

  • index.html — homepage
  • page-name/index.html — one folder per additional page
  • *.mjs — JavaScript modules (Framer runtime)
  • images/ — all images and SVGs
  • fonts/ — web fonts
  • assets/ — 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

  1. Go to vercel.com and sign in.
  2. Click Add New → Project.
  3. Drag and drop the unzipped folder, or connect a GitHub repo containing the folder.
  4. Framework preset: Other. No build command. Publish directory: leave blank (root).
  5. Click Deploy.

Add a custom domain in Project → Settings → Domains.

Netlify

  1. Go to netlify.com and sign in.
  2. Click Add new site → Deploy manually.
  3. Drag and drop the unzipped folder onto the upload area.
  4. 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

  1. Create a new GitHub repository (public or private).
  2. Push the unzipped folder contents to the main branch.
  3. Go to Settings → Pages → Source: Deploy from branch → main → / (root).
  4. Your site will be live at https://username.github.io/repo-name/.
Note: GitHub Pages does not support custom 404 pages for Framer's client-side routing. For multi-page Framer sites, Vercel or Netlify are recommended.

cPanel / traditional hosting (FTP)

  1. Connect to your server via FTP (e.g. FileZilla) or use cPanel File Manager.
  2. Upload the entire unzipped folder to public_html (or your domain's web root).
  3. Make sure the .htaccess file is uploaded (it sets the MIME type for .mjs files).

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)

⚠ Limitation: Framer renders Lottie animations using its own internal JavaScript player. When exported, the .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)

⚠ Limitation: Framer CMS content is fetched at runtime from Framer's servers. FramerExporter downloads a static snapshot of the content at the time of export.

If you update your CMS content after exporting, your hosted site will show the old content until you re-export and redeploy.

Framer Forms

⚠ Limitation: Framer's native form component submits data to Framer's backend. This will not work on a self-hosted static export.

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

⚠ Limitation: Pages protected by Framer's password feature are not accessible to FramerExporter and will not be included in the export.

Framer Commerce

⚠ Limitation: Framer Commerce checkout and cart functionality requires Framer's cloud backend. These features will not work in a static export.

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

⚠ Limitation: Framer may update their platform at any time, which can affect how FramerExporter downloads your site. If an export fails unexpectedly, try again — or open a support request.

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