AffinEQ

Product

Platform overview Integrations Verified, not claimed What isn't built yet

Solutions

Mobile-first startups Agencies building for SMEs Fintechs & regulated teams What people build

Migrate

How a move works From Supabase From Appwrite From Firebase From AWS Amplify From any Postgres Pricing

Developers

Documentation Next.js quickstart JavaScript quickstart Changelog Support Contribute Platform status

Company

Why we exist Customers Blog Partners Contact Sign in Start building
Migrate

Moving here shouldn’t mean starting over.

The reason a developer doesn’t switch is rarely a missing feature. It is the move. Every migration answers the same three questions: does my data come across, do my users have to reset their passwords, and does my code change? The honest answers are very different for each source, so here they are, source by source, with how far each path has actually got.

How a move works

A copy, a comparison, and a switch when it is boring.

The same five steps for every source. We do them alongside you today; a self-service button comes later.

  1. Read a dumpWe never point a tool at your live database. It reads a dump taken on your side, so there is no extra load on a system with real users.
  2. Read the planA dry run sorts everything into keep, skip, route and block, and tells you why. Nothing has moved yet.
  3. Load a copyInto an empty project, in one transaction. Every table’s row count is checked against the dump.
  4. Run side by sideA comparison tool says whether the copy and a fresh dump of the original still agree: counts and names, never your rows.
  5. SwitchWhen the comparison is boring, and your backups on our side have been restored in a drill. Scheduled jobs are switched on deliberately, not by accident.
Where each path stands

Five ways in, and the truth about each.

Ready means we have done it on a real app. Planned means the approach is decided and the work is not started. We will not call anything one-click that isn’t.

Supabase

Ready, run with you
Data
Postgres to Postgres. We read a pg_dump, load an empty project in one transaction and verify every row count. Tested on a self-hosted Supabase; a Supabase cloud project is the same dump, and we will say when we have done one.
Users
Imported with their accounts. GoTrue’s bcrypt hashes verify as they are and are upgraded to our own hashing the first time someone signs in, so nobody has to reset. Password reset is there too, if you prefer a clean start.
Your code
The query builder, auth calls and row-level security have the same shape: the import and the key change. Edge functions run on Workers unchanged, through compatibility shims. Cron jobs and the database webhook come across switched off.
Files
Bucket records come across. Moving the files themselves is a separate step we do with you.
Not yet
A self-service import button. The importer is run by us, alongside you. The first app moved this way is described on the customers page.

Appwrite

Planned
Data
Collections and attributes map onto tables and columns cleanly enough. The real work is Appwrite’s permission model: per-document access rules, not SQL. An importer has to translate them into row-level security policies and say plainly where it could not.
Users
Appwrite hashes with Argon2id by default, which is what we use, so passwords may import directly.
Your code
The SDK calls change; the shapes are close enough to be a mechanical rewrite.
Where it stands
Next after Supabase has been proved on more real apps. If you are on Appwrite and want to be the one that shapes it, tell us.

Firebase

Planned
Data
Firestore is schemaless documents with subcollections. There is no schema to move, only one to infer, with choices about how to flatten. We can suggest a schema and show those choices; you decide.
Users
Firebase uses a modified scrypt, and exporting it needs your project’s signer key and salt separator. Possible; it is a separate piece of work. Storage objects can be moved too.
Your code
The queries in your app are rewritten, not repointed, and Cloud Functions are Node, not Deno, so those are rewritten too.
Where it stands
This is an assisted rewrite, and we will never call it one-click. It comes after Appwrite.

AWS Amplify

Not started
Data
Amplify apps usually sit on DynamoDB through AppSync, with a GraphQL schema on top. A document store to a relational one is a design exercise, much like Firebase.
Users
Amplify auth is Cognito, which does not hand out password hashes. Expect your users to reset, which is why the reset flow matters. Their files live in S3, and S3 is a standard API we speak.
Your code
Treat it as a rewrite of the data layer, with the rest of your front end kept.
Where it stands
We have not started and have not tested this against a real Amplify app, so take the above as our reading, not a promise. If you are on Amplify, tell us: it moves it up the list.

Any Postgres

By hand today
Data
Your project is standard Postgres. A pg_dump from RDS, Neon, a server of your own, or anywhere else restores into it with the connection string in Settings → Database. What the importer automates is the Supabase-specific parts, so on other sources you do the restore by hand, and we will help.
Users
If your users live in your own tables, they come with the rest. Add AffinEQ Authentication for new sign-ins and migrate accounts across with a script.
Your code
Anything that speaks Postgres keeps working. The REST API, row-level security and the SDK are additions, not requirements.
Something not on the list? Parse, Hasura, PocketBase, a home-grown backend: tell us what you run. We will say plainly whether we can help, and what it would take.
What we will not pretend

The honest part.

  • Nothing here is one-click. Supabase is the closest, and we still run it with you.
  • A migration changes data you cannot afford to lose. That is why we copy, compare and wait, and why we want your backups on our side restored in a drill before you switch.
  • We say what could not come across. The plan lists what is blocked, so you hear it before the move, not after.

For the full story of one real move, read Moving a live app off Supabase, as a copy.

Start the conversation

Tell us what you’re moving.

The source, roughly how big, and what scares you about it. We will tell you plainly how it would go.

Type to search. Nothing you type leaves this page.