Skip to main content

choosing & FAQ

Pick the right adapter for your stack and answer common questions about persistence, scoped roles, idempotency, and migration.

Quick comparison

AdapterUse casePersistencePeer depIdempotent assignNative scoped roles
MemoryDev, testingNoneNoneyes (in-memory check)yes
PrismaPrisma appsAny DB@prisma/clientno (throws on dup)yes
DrizzleDrizzle appsPG/MySQL/SQLitedrizzle-ormyes (onConflictDoNothing)yes
RedisDistributed deploysRedisioredis or redisyes (set semantics)yes
HTTPMicroservice splitRemote APINonedepends on backendyes

All adapters are interchangeable. Engine, builder, and middleware code stays the same — migration is data movement only.


Decision tree

Are you in production?
│
├─ No → MemoryAdapter
│
└─ Yes
   │
   ├─ Already use Prisma? → PrismaAdapter
   ├─ Already use Drizzle? → DrizzleAdapter
   ├─ Need distributed cache + multi-instance? → RedisAdapter
   ├─ Splitting auth across services? → HttpAdapter (consume centrally)
   └─ Custom backend? → Implement Adapter (see "Custom" doc)

FAQ