// move out
Move your app out of Bolt.new
Where this guide moves it
Other homes work too (GitLab for code, Netlify or Cloudflare for hosting, another Postgres host for data); the order of moves stays the same.
What you own and can take
- Your project's source code, which Bolt can sync to a GitHub repository you own.
- Your Bolt Database: tables and rows. On a Pro or Teams plan you can claim it into your own Supabase account.
- Row data from any table, which you can copy out as CSV or JSON on any plan.
What cannot leave
- Claiming requires a Pro or Teams plan. On the Free plan the documented export is row data as CSV or JSON, one table at a time, with no schema, user accounts, files, server functions or secrets.
- Secret values from the Secrets screen. Server functions read them there, and they are not part of your code, so you add each one again in Supabase and Vercel.
- Stored files. Bolt's docs describe no way to download files from Bolt storage, so after a claim you check your buckets in Supabase Storage instead.
- Bolt's docs only promise that the claimed database appears as a Supabase project. Check yourself that users, storage buckets and server functions are there too.
- Bolt's own database tools for that data. After the claim you manage it in the Supabase dashboard, and Bolt's Version History does not restore Supabase databases.
- Bolt hosting. The site you published on Bolt stays there; the code in GitHub is what you publish on another service.
How to export it
- In your project, click the GitHub icon in the top-right corner, then Log in to GitHub, Authorize, and Install the GitHub App with access to all or selected repositories.
- Click the GitHub icon again, enter a repository name and click Create repository. It starts as a private repository on the main branch, and Bolt commits each working change to it.
- Connect Bolt to Supabase: click the gear icon, then All project settings, then Applications under Account, then Connect in the Supabase row, and authorize your Supabase organization.
- Claim the database: click the database icon, open the Advanced tab and click Claim, then finish the steps in Supabase. You must be an owner of that Supabase organization.
- Do not use Connect on the Advanced tab for this. Connecting a Supabase database replaces the Bolt database connection and may cause data loss.
- Refresh the Projects page in Supabase and confirm the claimed database appears there as a project.
- As a backup, or on the Free plan, click the database icon, open each table, select all rows, click Export and choose CSV or JSON.
The order of moves
-
Code
- Confirm your latest changes are in GitHub. Bolt commits each change that does not break the project, and merges between branches happen on GitHub, not in Bolt.
- Clone the repository and run npm install and npm run dev to confirm the app builds outside Bolt.
- In Vercel, choose Add New > Project and import the repository. Vercel detects Vite or Next.js projects and builds them for you.
- For a single-page Vite app, add a vercel.json rewrite that sends every route to /index.html so deep links work.
-
Database
- With the claim done, the database is already a project in your Supabase organization. Open it in the Supabase dashboard and check the tables in the Table Editor.
- Without a claim, create a new Supabase project, create the tables your code expects in the SQL Editor, then import each CSV through the Table Editor.
- Turn on row-level security for every table you created by SQL, and add policies before the app goes live.
-
Sign-in and file storage
- In Supabase, open Authentication and check the Users list to confirm your users came across with the claim.
- Set the Site URL and Redirect URLs under Authentication > URL Configuration to your Vercel and production URLs.
- If you use Google sign-in, add the new Supabase callback URL to your OAuth client in Google Cloud Console.
- Open Storage in Supabase and check that your buckets and files are there, and that private buckets are still private.
- Add every secret from Bolt's Secrets screen to Edge Function Secrets in Supabase, and check each function's logs after a test call.
- In Vercel, add the Supabase URL and key variables your code reads, with the values from the claimed project in the Supabase dashboard, then redeploy.
-
Domain
- Test the app on its vercel.app address: sign in, save a record, and load a page that reads data.
- In Bolt, click the gear icon, then All project settings, then Domains & Hosting, open the three-dot menu on your domain and click Remove domain.
- In Vercel, open Settings > Domains, click Add Domain and add the DNS records Vercel shows at the registrar where the domain lives.
- Add the final domain to the Supabase Site URL and Redirect URLs, then sign in once on the live domain.
What usually breaks after the move
- The app builds but shows a blank page or cannot reach the database, because the Supabase variables were never added in Vercel. Read the fix
- Code that reads process.env in the browser crashes in a Vite build. Vite exposes only VITE_ prefixed values through import.meta.env. Read the fix
- The build fails on Vercel because an import's letter case does not match the file name. Linux file systems treat them as different files. Read the fix
- Tables recreated by SQL from CSV files start with row-level security off, so anyone with the anon key can read them. Read the fix
- Server functions that call outside services fail until their secrets are added in Supabase.
- Email confirmation and password reset links point to the old bolt.host address until the Site URL is updated in Supabase.