From Clerk.
Same DX. Open OIDC.
Clerk and Synq look almost identical from the React side — same provider shape, same hooks, same `<SignedIn />` / `<SignedOut />` toggle pattern. Synq trades Clerk's proprietary Org-as-Customer model and `Powered by Clerk` for an open OIDC issuer and a Brand surface you own.
Clerk → Synq
| Clerk | Synq |
|---|---|
| ClerkProvider | SynqProvider |
| <SignIn /> (Clerk) | <SignIn /> (@synqid/react/ui) |
| <SignUp /> | Same <SignIn /> (Synq merges sign-up + sign-in) |
| <UserButton /> | <UserButton /> (@synqid/react) |
| <SignedIn /> / <SignedOut /> | Same names (@synqid/react) |
| useUser() / useAuth() | useUser() / useSynq() / useAccessToken() |
| clerkClient (server) | @synqid/nextjs/server (auth, requireAccess, etc.) |
| Clerk Webhooks | Synq Webhooks (HMAC-SHA256, same event catalog shape) |
| Clerk Organizations | Synq Orgs (different scope: Synq Orgs are YOUR account, not your customers’) |
| Clerk Roles | Brand-scoped custom OIDC scopes + your own RBAC |
Direct one-to-one swap
1. Swap the imports
Replace `@clerk/nextjs` with `@synqid/nextjs` (or `@synqid/react` if you are not on Next). The component and hook names match — most of your call sites will work without changing.
2. Move provider config from CLERK_* to SYNQ_*
CLERK_PUBLISHABLE_KEY → SYNQ_CLIENT_ID, CLERK_SECRET_KEY → SYNQ_CLIENT_SECRET, plus SYNQ_ISSUER and SYNQ_REDIRECT_URI. Synq env vars are server-side only — no NEXT_PUBLIC_*.
3. Replace Clerk Webhooks with Synq Webhooks
Clerk’s `user.created`, `user.updated`, `session.created` events all have direct Synq equivalents. Receiver code is structurally identical — the signature header is `x-synq-signature` instead of `svix-id` / `svix-signature`.
4. Decide on Org semantics
Clerk Organizations are Clerk’s name for "your customers’ teams". Synq Orgs are YOUR account. If you were using Clerk Organizations for multi-tenant SaaS, you have two paths: keep tenant data in your own DB (most common), or model each customer as a Brand under your Synq Org (if you offer customer-branded sign-in surfaces).
Read more
@synqid/nextjs
Component / hook shape mirrors Clerk’s Next.js SDK. Most call sites compile without changes.
Orgs / Brands / Apps
How Clerk’s notion of "Organizations" maps to (and differs from) Synq’s model.
Webhooks
Clerk’s webhook receiver code translates one-to-one. Same event shapes, same HMAC pattern.
Common questions
Drop the badge. Keep the DX..
Same imports, similar hooks, no proprietary surface. Move off Clerk in a sprint without touching most of your component code.
