← Back to Home

Migrate from Supabase to Tacobase

Ready to ditch the SQL migrations and complexity? In this guide, we'll walk through moving your data, files, and users to Tacobase in just a few steps.

Why migrate?

Supabase is powerful, but you might find yourself managing complex RLS policies, tracking SQL migrations for every small change, or dealing with steep pricing cliffs. Tacobase gives you similar realtime and database capabilities without the overhead:

  • Collections are created automatically the first time you write to them
  • No deep SQL knowledge required — intuitive SDK
  • Built for the vibe coder: 3 mins to deploy
  • Much simpler, lower cost starting points ($7/mo vs $25/mo)

Step 1: Export your Supabase Data

Since both platforms are relational at their core, migration is straightforward. Start by extracting your data from Supabase.

  1. Go to your Supabase dashboard → Table editor.
  2. Select the table you want to export.
  3. Click Export in the top right and choose CSV.
  4. Repeat this for all tables.
Pro Tip: If you have many tables, you can also connect to Supabase via its PostgreSQL connection string using a tool like DBeaver or TablePlus and perform a bulk export.

Step 2: Import into Tacobase

Tacobase collections auto-create, but you can also define them ahead of time in the Tacobase Dashboard if you want strict types and rules.

  1. Create a new project in your Tacobase Dashboard.
  2. Navigate to the Collections tab.
  3. For each exported CSV, we recommend a simple script to read the CSV and write it to Tacobase via the SDK.
import.jsjavascript
import { createClient } from '@tacobase/client'
import fs from 'fs'
import csv from 'csv-parser'

const db = createClient('YOUR_URL', 'YOUR_API_KEY')

fs.createReadStream('supabase_users.csv')
  .pipe(csv())
  .on('data', async (row) => {
    // This will auto-create the collection if it doesn't exist
    await db.collection('users').create({
      name: row.name,
      email: row.email,
      created_at: row.created_at
    })
  })

Step 3: Migrating Users and Auth

Supabase salts and hashes passwords differently than Tacobase's underlying engine. The cleanest migration path for authentication is:

  • Import users into the users collection, storing their emails.
  • When users log into your new app, have them trigger a password reset flow, or migrate using OAuth providers (Google, GitHub, etc.) which seamlessly link to existing emails.

Step 4: Update Your Codebase

Swap out the @supabase/supabase-js library for @tacobase/client. You'll notice our API is highly familiar, but even simpler.

Supabase (Before)
const { data, error } = await supabase
  .from('posts')
  .select('*')
  .eq('published', true)
Tacobase (After)
const posts = await db
  .collection('posts')
  .getList(1, 50, {
    filter: 'published = true'
  })

Step 5: File Storage

Download your Supabase bucket files and upload them to tacobase. Since Tacobase attaches files directly to records, you map the files to the respective rows you imported in Step 2.


Need help migrating?

If you have a large dataset or custom requirements, our team can assist you with your migration.

Contact Support