Self-hosting guide for your exported Framer site.
This export requires an internet connection to load Framer's React bundles from their CDN. The custom code injector waits for React hydration before executing your custom code.
- HTML files: Pages with Framer React runtime intact
- assets/: Downloaded images, custom CSS, custom JS, and fonts
- custom-code/: Extracted custom code reference (JSON format)
Simply open index.html in your browser. Requires internet connection for Framer bundles.
# Using Node.js
npx serve .
# Using Python
python -m http.server 8000Then visit http://localhost:8000
Upload to any static hosting service that allows external scripts:
- Netlify
- Vercel
- GitHub Pages (already optimized!)
- Cloudflare Pages
If you pushed this directly to GitHub, enable GitHub Pages:
- Go to your repository Settings → Pages
- Source: Deploy from a branch
- Branch:
main/ (root) - Save
Your site will be live at https://[username].github.io/[repo-name]/
- Framer React runtime (interactive components)
- CMS content (embedded)
- Code components (require Framer runtime)
- Code overrides (require Framer runtime)
- Custom page code (injected after hydration)
- Form submissions (custom handlers)
- All downloaded assets
The export keeps Framer's React bundles as external references because:
- Custom code components are React components that need the Framer runtime
- Code overrides are HOCs that wrap Framer components
- Framer uses SSR + hydration architecture
- Custom code needs to run AFTER React hydration completes
The custom code injector waits for:
window.__FRAMER_HYDRATED__flag, ORdata-framer-hydration-idattribute + document ready
Custom code is injected via the #framer-custom-code-injector script at the bottom of each HTML file.
See custom-code/*.json for reference of extracted code.
- Requires internet to load Framer React bundles (~300KB)
- Not fully offline (Framer runtime is CDN-hosted)
- CMS is static (no live updates)
If you need a fully offline version:
- You'll need to rewrite custom code components as vanilla JS
- Remove Framer React dependencies
- Rebuild interactive elements manually
This is complex and loses Framer's dynamic features.