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.
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:
Since both platforms are relational at their core, migration is straightforward. Start by extracting your data from Supabase.
Tacobase collections auto-create, but you can also define them ahead of time in the Tacobase Dashboard if you want strict types and rules.
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
})
})Supabase salts and hashes passwords differently than Tacobase's underlying engine. The cleanest migration path for authentication is:
users collection, storing their emails.Swap out the @supabase/supabase-js library for @tacobase/client. You'll notice our API is highly familiar, but even simpler.
const { data, error } = await supabase
.from('posts')
.select('*')
.eq('published', true)const posts = await db
.collection('posts')
.getList(1, 50, {
filter: 'published = true'
})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.
If you have a large dataset or custom requirements, our team can assist you with your migration.
Contact Support