// 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

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Do not use Connect on the Advanced tab for this. Connecting a Supabase database replaces the Bolt database connection and may cause data loss.
  6. Refresh the Projects page in Supabase and confirm the claimed database appears there as a project.
  7. 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

  1. Code

    1. 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.
    2. Clone the repository and run npm install and npm run dev to confirm the app builds outside Bolt.
    3. In Vercel, choose Add New > Project and import the repository. Vercel detects Vite or Next.js projects and builds them for you.
    4. For a single-page Vite app, add a vercel.json rewrite that sends every route to /index.html so deep links work.
  2. Database

    1. 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.
    2. 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.
    3. Turn on row-level security for every table you created by SQL, and add policies before the app goes live.
  3. Sign-in and file storage

    1. In Supabase, open Authentication and check the Users list to confirm your users came across with the claim.
    2. Set the Site URL and Redirect URLs under Authentication > URL Configuration to your Vercel and production URLs.
    3. If you use Google sign-in, add the new Supabase callback URL to your OAuth client in Google Cloud Console.
    4. Open Storage in Supabase and check that your buckets and files are there, and that private buckets are still private.
    5. Add every secret from Bolt's Secrets screen to Edge Function Secrets in Supabase, and check each function's logs after a test call.
    6. 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.
  4. Domain

    1. Test the app on its vercel.app address: sign in, save a record, and load a page that reads data.
    2. 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.
    3. In Vercel, open Settings > Domains, click Add Domain and add the DNS records Vercel shows at the registrar where the domain lives.
    4. 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.

Sources