Skip to Content

Migrate from Auth0 to Faable Auth

Short answer: Migrating from Auth0 to Faable Auth is mostly a mapping exercise, because both are standards-based OAuth 2.0 / OpenID Connect identity servers. You recreate your Auth0 tenant as a Faable Account, your Applications as Clients, and your Connections (social, database, enterprise) one-to-one, then export your users from Auth0 and import them into Faable. Your app code changes only the issuer URL, client ID, and endpoints β€” the OAuth flows stay the same. The main reasons teams move are European data sovereignty (full GDPR), predictable MAU-based pricing, and bundling auth with Faable Deploy hosting in one subscription.

Concept mapping

Auth0Faable AuthNotes
TenantAccountYour isolated identity boundary, at https://<account>.auth.faable.link
ApplicationClientSPA, native, regular web, or M2M
Connection (social/DB/enterprise)Connectiondatabase, social, passwordless, oidc categories
OrganizationsTeams within an accountMulti-tenant by design
Actions / Rules / HooksActions + WebhooksCustom code in the login flow and async events
Management APIManagement APICalled from your backend with client credentials
Universal LoginUniversal LoginHosted login screen, same concept
M2M ApplicationM2M Client (Client Credentials)Service-to-service tokens

Migration steps

  1. Create your Account. Sign up in the Faable DashboardΒ  and note your issuer URL (https://<account>.auth.faable.link, or a custom domain).
  2. Recreate Connections. For each Auth0 connection, create the equivalent Faable Connection β€” reuse the same upstream OAuth client IDs/secrets for social providers so users keep the same accounts.
  3. Recreate Clients. For each Auth0 Application, create a Client of the matching type and copy over your Allowed Callback URLs, Logout URLs, and Web Origins.
  4. Port your custom logic. Translate Auth0 Actions/Rules into Faable Actions (in-flow) and Webhooks (async, e.g. sync to your CRM).
  5. Export and import users. Ask Auth0 support for the password-hash export (NDJSON, not available on Auth0’s Free tier) and import it with faable auth users import export.ndjson --from auth0. Users keep their passwords, with no reset: the bcrypt hashes import as they are and are upgraded to Argon2id on each user’s first sign-in. Social users come with their identities, so their first Google or GitHub login lands on the imported account. Run it with --dry-run first. See Import and export password hashes. Without the hash export, users sign in with an emailed code (passwordless, Hobby and up) or set a password through Forgot password.
  6. Update your app. Point your SDK or OIDC client at the new issuer, client ID, and endpoints. With @faable/auth-js or a framework quickstart this is a few config values.
  7. Cut over. Run both in parallel behind a feature flag if you want zero downtime, then flip traffic to Faable and decommission the Auth0 tenant.

Things that change (and things that don’t)

  • No change: the OAuth 2.0 Authorization Code (+ PKCE) and Client Credentials flows, ID/Access token semantics, and your overall login UX.
  • Changes: the issuer/domain, client IDs/secrets, and the Management API base URL and payloads (similar shape, not identical).

Last updated on