WeWeb lets you export your entire project as a compiled Vue.js SPA — zip file with built files ready for Vercel, Netlify, or Cloudflare. Available on the Essential seat plan and above. Key caveat: plugins that route through WeWeb microservices (Airtable, Stripe, WeWeb Auth) break in self-hosted exports. GitHub sync enables full CI/CD pipelines. Re-export and redeploy any time changes are made.
WeWeb Code Export: Deploy Your App Anywhere
WeWeb's code export feature is its strongest differentiator over competing no-code platforms. Rather than locking you into proprietary hosting, WeWeb generates a standard Vue.js 3 single-page application that you can deploy on any web host — Vercel, Netlify, Cloudflare Pages, AWS S3, or your own server. This tutorial walks through the complete export and deployment process: triggering an export, understanding what's in the zip, configuring SPA routing on major hosts, and setting up GitHub sync so every publish in WeWeb automatically triggers a fresh deployment. You'll also learn which plugins continue working after export and which ones require a backend proxy replacement.
Prerequisites
- WeWeb account on the Essential plan or above (Free plan does not include code export)
- A published WeWeb project (you must publish before exporting)
- A Vercel, Netlify, or Cloudflare Pages account for deployment
- GitHub account if you plan to use GitHub sync for CI/CD
Step-by-step guide
Verify your seat plan includes code export
Verify your seat plan includes code export
Code export is only available on the Essential seat plan ($16/mo) and above. To check your plan, click your workspace avatar in the top-left corner of the WeWeb editor → Workspace Settings → Billing. You will see your current Seat Plan. If you are on the Free plan, you will need to upgrade to Essential before proceeding. The Free plan includes WeWeb Cloud hosting but not the ability to export code or use GitHub sync. Once on Essential or higher, the Export option will appear in your project settings.
Expected result: You can see your current plan is Essential, Pro, or Partner.
Publish your project before exporting
Publish your project before exporting
WeWeb generates your export from the last published version of your project, not from unsaved editor changes. Click the Publish button in the top-right corner of the editor. In the publish dialog, choose your target environment (Production or Staging if on Scale hosting plan) and click Publish. Wait for the build to complete — this typically takes 30-90 seconds depending on project size. The publish step compiles your Vue.js SPA and makes it available for both WeWeb Cloud hosting and code export. If you skip this step, your export will contain the previous published version, not your latest changes.
Expected result: The publish dialog shows a success message and your app is live on WeWeb Cloud or your custom domain.
Trigger the code export from Project Settings
Trigger the code export from Project Settings
From the WeWeb editor, click the gear icon in the left navigation bar to open App Settings. Scroll down to find the Export section (or navigate to your project dashboard at app.weweb.io, select your project, and look for the Export option). Click Export Code. WeWeb will prepare a zip file containing two folders: one with built/compiled files (ready for immediate deployment) and one with raw project files (uncompiled source). The download will start automatically. The zip file is named after your project. Extract it to inspect the contents before deploying.
Expected result: A zip file downloads to your computer containing the built and raw project folders.
Understand what works and what breaks in exported code
Understand what works and what breaks in exported code
Before deploying, audit your project for plugins that route through WeWeb's microservices — these will break when self-hosted. The following plugins stop working after export: Airtable (routes through WeWeb proxy), WeWeb Auth (uses WeWeb's auth servers), OpenAI and Gemini plugins (use WeWeb API key management), Stripe plugin (routes through WeWeb), SQL direct connections, SOAP APIs, and some Google service integrations. Plugins that continue working after export: REST API calls to your own backend, Supabase native plugin (direct to your Supabase project), Xano native plugin (direct to your Xano instance), custom JavaScript, and CSS. If your project uses breaking plugins, you will need to replace them with direct REST API calls to the same services before exporting.
Expected result: You have a list of which plugins in your project require replacement before self-hosting.
Deploy to Vercel with SPA routing configuration
Deploy to Vercel with SPA routing configuration
WeWeb exports a Vue.js SPA — a single-page application where all routes are handled client-side. Most hosting platforms serve static files and will return a 404 error when users navigate directly to a deep URL like /dashboard/settings because no physical file exists at that path. You must configure a fallback that serves index.html for all routes. For Vercel: create a file named vercel.json in the root of your extracted built folder with the rewrite rule shown in the code example below. Then drag-and-drop the built folder onto Vercel, or use the Vercel CLI (npx vercel) from within the built folder. Vercel will auto-detect a static site and deploy it.
1// vercel.json — place in root of your WeWeb built folder before deploying2{3 "rewrites": [4 {5 "source": "/(.*)",6 "destination": "/index.html"7 }8 ]9}Expected result: Your WeWeb app is live on Vercel and all routes (not just the home page) load correctly when accessed directly.
Deploy to Cloudflare Pages
Deploy to Cloudflare Pages
Cloudflare Pages is the recommended self-hosting option for WeWeb projects due to its global CDN, free plan, and zero-configuration SPA support. Log into your Cloudflare dashboard at dash.cloudflare.com. Navigate to Pages → Create a project → Upload assets. Drag and drop your entire built folder contents (not the folder itself, but the files inside it) into the upload area. Click Deploy. Cloudflare Pages automatically handles SPA routing without requiring a configuration file. Once deployed, you will receive a pages.dev subdomain. You can connect a custom domain via Pages → your project → Custom domains. Cloudflare's edge network distributes your app globally, typically resulting in faster load times than other hosts for international users.
Expected result: Your app is live on a pages.dev URL and all client-side routes work correctly.
Set up GitHub sync for automated CI/CD deployments
Set up GitHub sync for automated CI/CD deployments
Instead of manually exporting and uploading a zip file each time, GitHub sync automates the entire process. In the WeWeb editor, navigate to App Settings → Git Integration (or find the GitHub icon in the left navigation bar). Connect your GitHub account via OAuth. Create a new repository or select an existing one. Once connected, every time you publish your WeWeb project, WeWeb automatically pushes the latest compiled code to your connected GitHub repository. You can then configure Vercel or Netlify to auto-deploy when changes are pushed to your GitHub repo. In Vercel: Projects → Import Git Repository → select your WeWeb repo → configure output directory as the built folder → Deploy. Now your workflow is: edit in WeWeb → Publish → GitHub auto-updates → Vercel auto-deploys.
Expected result: Publishing in WeWeb automatically triggers a new deployment on your hosting platform within 2-3 minutes.
Test and validate your self-hosted deployment
Test and validate your self-hosted deployment
After deployment, run through a checklist to verify everything works correctly. Open your deployed URL in a fresh browser window (not the WeWeb editor preview). Test direct URL navigation by typing a deep route like /dashboard directly in the browser address bar — it should load correctly rather than showing a 404. Test all data-fetching features: collections should load from your backend, forms should submit, authentication flows should complete. Open browser DevTools → Network tab and look for any failed requests. Common issues to check: CORS errors from your backend (your deployed domain needs to be whitelisted), any plugin still pointing to WeWeb microservices, and asset loading errors for images or fonts hosted on WeWeb's CDN.
Expected result: All pages load correctly from direct URLs, all data sources return data, and there are no console errors.
Complete working example
1# ============================================================2# WeWeb Export — Deployment Configuration Files3# ============================================================45# --- Vercel (vercel.json) ---6# Place in root of your WeWeb built folder7{8 "rewrites": [9 {10 "source": "/(.*)",11 "destination": "/index.html"12 }13 ]14}1516# --- Netlify (_redirects file, no extension) ---17# Place in root of your WeWeb built folder18/* /index.html 2001920# --- Apache (.htaccess) ---21# For Apache web servers22<IfModule mod_rewrite.c>23 RewriteEngine On24 RewriteBase /25 RewriteRule ^index\.html$ - [L]26 RewriteCond %{REQUEST_FILENAME} !-f27 RewriteCond %{REQUEST_FILENAME} !-d28 RewriteRule . /index.html [L]29</IfModule>3031# --- Nginx (nginx.conf location block) ---32# For Nginx web servers33location / {34 try_files $uri $uri/ /index.html;35}3637# --- Cloudflare Pages ---38# No configuration needed — SPA routing is automatic3940# ============================================================41# GitHub Actions: Auto-deploy WeWeb export to Cloudflare Pages42# ============================================================43# .github/workflows/deploy.yml44name: Deploy to Cloudflare Pages45on:46 push:47 branches: [main]48jobs:49 deploy:50 runs-on: ubuntu-latest51 steps:52 - uses: actions/checkout@v353 - name: Deploy to Cloudflare Pages54 uses: cloudflare/pages-action@v155 with:56 apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}57 accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}58 projectName: my-weweb-app59 directory: ./Common mistakes
Why it's a problem: Deploying the zip file directly instead of the built folder contents
How to avoid: Extract the zip file first. Deploy only the contents of the 'built' subfolder (the files inside, not the folder itself). The built folder contains index.html, assets/, and other static files.
Why it's a problem: Forgetting to configure SPA routing and getting 404 errors on page refresh
How to avoid: Add the appropriate routing fallback for your host: vercel.json with rewrites for Vercel, _redirects file for Netlify, or nginx try_files directive. Without this, refreshing any page other than / returns a 404.
Why it's a problem: Expecting Airtable, WeWeb Auth, or Stripe plugins to work in the self-hosted export
How to avoid: These plugins route through WeWeb's microservices and break when self-hosted. Replace Airtable with direct REST API calls, WeWeb Auth with Supabase Auth, and Stripe with a backend Edge Function that calls the Stripe API server-side.
Why it's a problem: Editing the exported code and expecting changes to reflect back in the WeWeb editor
How to avoid: Export is one-way only — WeWeb editor to code. Any manual edits to exported files will be overwritten on the next export. Use WeWeb editor for all ongoing changes, then re-export and redeploy.
Best practices
- Always publish in WeWeb before exporting — exports are generated from the last published version, not from unsaved editor changes
- Use GitHub sync instead of manual zip exports for any project with ongoing development — it eliminates the manual download-upload cycle
- Test all routes with direct URL access after deployment to catch missing SPA routing configuration early
- Audit your project for WeWeb microservice-dependent plugins before committing to self-hosting — replacing them is easier to plan before you export
- Host static assets (images, fonts) on a CDN like Cloudflare R2 or AWS S3 rather than relying on WeWeb's CDN, since asset URLs in WeWeb's CDN may not be stable long-term
- Set up a staging deployment in addition to production — push to a staging branch first to validate before promoting to production
- Configure your CORS settings on your backend (Supabase, Xano, etc.) to whitelist your new self-hosted domain before going live
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
I exported my WeWeb project as a zip file and deployed the built folder to Vercel. When I navigate directly to any page other than the home page (e.g., typing /dashboard in the browser), I get a 404 error. How do I fix SPA routing on Vercel for a Vue.js single-page application?
My WeWeb project uses the Airtable plugin but I want to self-host the exported code. The Airtable plugin stops working after export because it routes through WeWeb microservices. How should I replace the Airtable plugin with a direct REST API connection in WeWeb so my data fetching continues to work in the self-hosted version?
Frequently asked questions
Can I edit the exported WeWeb code and then re-import it back into the editor?
No. WeWeb export is strictly one-way. Exported code is machine-generated and cannot be imported back. WeWeb is designed to be the single source of truth — make all changes in the editor, then re-export and redeploy.
Do I still need a WeWeb hosting plan if I self-host?
No. If you self-host your WeWeb export (on Vercel, Netlify, Cloudflare, etc.), you do not need a WeWeb hosting add-on plan. You only need a seat plan (Essential or above for code export). Your hosting costs are whatever your chosen host charges.
How do I deploy updates after making changes in the WeWeb editor?
The re-export workflow is: make changes in WeWeb editor → click Publish (top-right) → wait for build to complete → re-export zip (or let GitHub sync push automatically) → redeploy to your host. With GitHub sync enabled, publishing in WeWeb automatically updates your GitHub repo, and if your host is connected to that repo, it auto-deploys.
What is the difference between the 'built' and 'raw' folders in the WeWeb export zip?
The 'built' folder contains compiled, production-ready static files (HTML, CSS, JavaScript bundles) ready to deploy immediately. The 'raw' folder contains uncompiled source files useful for inspection or analysis. Deploy only the 'built' folder. The 'raw' folder does not contain Vue.js components or a complete framework setup.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation