{"id":40834,"library":"drizzle-adapter","title":"Drizzle Adapter for Casbin","description":"Drizzle Adapter v1.4.0 is the official Drizzle ORM adapter for Node-Casbin, enabling policy storage and retrieval from databases supported by Drizzle ORM (PostgreSQL, MySQL, SQLite, Turso, Neon, PlanetScale, Vercel Postgres, Xata, and more). It uses the Drizzle ORM query builder to interact with databases, providing type-safe and efficient policy management. The package follows the Casbin adapter interface and supports all core Casbin features (RBAC, ABAC, ACL). It requires casbin ^5.0.0 and drizzle-orm >=0.29.0. Active development, weekly releases, and full TypeScript support.","status":"active","version":"1.4.0","language":"javascript","source_language":"en","source_url":"https://github.com/node-casbin/drizzle-adapter","tags":["javascript","casbin","node-casbin","adapter","drizzle","drizzle-orm","access-control","authorization","auth","typescript"],"install":[{"cmd":"npm install drizzle-adapter","lang":"bash","label":"npm"},{"cmd":"yarn add drizzle-adapter","lang":"bash","label":"yarn"},{"cmd":"pnpm add drizzle-adapter","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency for enforcer and model functionality","package":"casbin","optional":false},{"reason":"Peer dependency for database interaction via Drizzle ORM","package":"drizzle-orm","optional":false}],"imports":[{"note":"ESM-only package; CJS require is not supported. DrizzleAdapter is the default export.","wrong":"const DrizzleAdapter = require('drizzle-adapter')","symbol":"DrizzleAdapter","correct":"import DrizzleAdapter from 'drizzle-adapter'"},{"note":"Named export, not a default export. Available table schemas include casbinRuleSqlite, casbinRulePostgres, casbinRuleMysql, etc.","wrong":"import casbinRuleSqlite from 'drizzle-adapter/casbinRuleSqlite'","symbol":"casbinRuleSqlite","correct":"import { casbinRuleSqlite } from 'drizzle-adapter'"},{"note":"DrizzleAdapter cannot be instantiated with 'new'. Use the static async factory method newAdapter().","wrong":"new DrizzleAdapter({ db, table })","symbol":"DrizzleAdapter.newAdapter","correct":"await DrizzleAdapter.newAdapter({ db, table })"}],"quickstart":{"code":"import { newEnforcer } from 'casbin';\nimport { drizzle } from 'drizzle-orm/better-sqlite3';\nimport Database from 'better-sqlite3';\nimport DrizzleAdapter, { casbinRuleSqlite } from 'drizzle-adapter';\n\nasync function main() {\n  const sqlite = new Database('casbin.db');\n  const db = drizzle(sqlite);\n  db.run(`CREATE TABLE IF NOT EXISTS casbin_rule (\n    id INTEGER PRIMARY KEY AUTOINCREMENT,\n    ptype TEXT,\n    v0 TEXT, v1 TEXT, v2 TEXT, v3 TEXT, v4 TEXT, v5 TEXT\n  )`);\n  const adapter = await DrizzleAdapter.newAdapter({ db, table: casbinRuleSqlite });\n  const enforcer = await newEnforcer('examples/rbac_model.conf', adapter);\n  await enforcer.loadPolicy();\n  console.log(await enforcer.enforce('alice', 'data1', 'read'));\n}","lang":"typescript","description":"Initializes a SQLite database, creates the casbin_rule table, creates a DrizzleAdapter, and performs a policy enforcement check."},"warnings":[{"fix":"Use await DrizzleAdapter.newAdapter({ db, table }) instead of new DrizzleAdapter()","message":"DrizzleAdapter cannot be instantiated with 'new' - use static factory method DrizzleAdapter.newAdapter()","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Import from drizzle-adapter: { casbinRuleSqlite } instead of 'casbinRule'","message":"as casbinRule is deprecated in commonjs and removed from named exports; use specific table names (e.g., casbinRuleSqlite)","severity":"deprecated","affected_versions":">=0.0.1"},{"fix":"Use const db = drizzle(poolOrClient) before passing to newAdapter","message":"The provided 'db' object must be the result of drizzle() call, not a raw driver instance","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Always pass the table schema exported by drizzle-adapter: { casbinRuleSqlite, casbinRulePostgres, casbinRuleMysql }","message":"The 'table' option is required - missing it will cause a runtime error","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Use import syntax or dynamic import() instead of require()","message":"ESM-only package; require() will throw ERR_REQUIRE_ESM","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'0.29.0':83 '5.0.0':78 'abac':73 'access':103 'access-control':102 'acl':74 'activ':84 'adapt':2,6,13,64,97 'auth':106 'author':105 'builder':46 'casbin':4,17,63,70,77,93,96 'control':104 'core':69 'databas':24,50 'develop':85 'drizzl':1,5,11,27,43,81,98,100 'drizzle-orm':80,99 'effici':56 'enabl':18 'featur':71 'follow':61 'full':89 'interact':48 'interfac':65 'javascript':92 'manag':58 'mysql':30 'neon':33 'node':16,95 'node-casbin':15,94 'offici':10 'orm':12,28,44,82,101 'packag':60 'planetscal':34 'polici':19,57 'postgr':36 'postgresql':29 'provid':51 'queri':45 'rbac':72 'releas':87 'requir':76 'retriev':22 'safe':54 'sqlite':31 'storag':20 'support':25,67,91 'turso':32 'type':53 'type-saf':52 'typescript':90,107 'use':41 'v1.4.0':7 'vercel':35 'week':86 'xata':37","created_at":"2026-06-04T18:49:28.732065+00:00","updated_at":"2026-06-04T18:49:28.732065+00:00","problems":[{"fix":"Use 'await DrizzleAdapter.newAdapter({ db, table })'","cause":"Using 'new DrizzleAdapter()' instead of the static factory method","error":"TypeError: DrizzleAdapter is not a constructor"},{"fix":"Use 'import DrizzleAdapter from \"drizzle-adapter\"' or set type: module in package.json","cause":"Trying to require('drizzle-adapter') in a CJS context","error":"ERR_REQUIRE_ESM"},{"fix":"Run 'npm install drizzle-orm' or install the appropriate database driver","cause":"Missing peer dependency drizzle-orm","error":"Cannot find module 'drizzle-orm'"},{"fix":"Pass the drizzle() returned object: const db = drizzle(poolOrClient)","cause":"Passing a raw driver instance instead of drizzle() result","error":"Error: Cannot read properties of undefined (reading 'column')"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://casbin.org","github":"https://github.com/node-casbin/drizzle-adapter","docs":null,"changelog":null,"pypi":null,"npm":"drizzle-adapter","openapi_spec":null,"status_page":null,"smithery":null,"categories":["security"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-04","next_check":"2026-09-02","install_tag":null}}