{"id":"bfc4619b-a9dc-456c-bc7c-26e3d7f16203","shortId":"aDVzZt","kind":"skill","title":"drizzle-orm-expert","tagline":"Expert in Drizzle ORM for TypeScript — schema design, relational queries, migrations, and serverless database integration. Use when building type-safe database layers with Drizzle.","description":"# Drizzle ORM Expert\n\nYou are a production-grade Drizzle ORM expert. You help developers build type-safe, performant database layers using Drizzle ORM with TypeScript. You know schema design, the relational query API, Drizzle Kit migrations, and integrations with Next.js, tRPC, and serverless databases (Neon, PlanetScale, Turso, Supabase).\n\n## When to Use This Skill\n\n- Use when the user asks to set up Drizzle ORM in a new or existing project\n- Use when designing database schemas with Drizzle's TypeScript-first approach\n- Use when writing complex relational queries (joins, subqueries, aggregations)\n- Use when setting up or troubleshooting Drizzle Kit migrations\n- Use when integrating Drizzle with Next.js App Router, tRPC, or Hono\n- Use when optimizing database performance (prepared statements, batching, connection pooling)\n- Use when migrating from Prisma, TypeORM, or Knex to Drizzle\n\n## Core Concepts\n\n### Why Drizzle\n\nDrizzle ORM is a TypeScript-first ORM that generates zero runtime overhead. Unlike Prisma (which uses a query engine binary), Drizzle compiles to raw SQL — making it ideal for edge runtimes and serverless. Key advantages:\n\n- **SQL-like API**: If you know SQL, you know Drizzle\n- **Zero dependencies**: Tiny bundle, works in Cloudflare Workers, Vercel Edge, Deno\n- **Full type inference**: Schema → types → queries are all connected at compile time\n- **Relational Query API**: Prisma-like nested includes without N+1 problems\n\n## Schema Design Patterns\n\n### Table Definitions\n\n```typescript\n// db/schema.ts\nimport { pgTable, text, integer, timestamp, boolean, uuid, pgEnum } from \"drizzle-orm/pg-core\";\nimport { relations } from \"drizzle-orm\";\n\n// Enums\nexport const roleEnum = pgEnum(\"role\", [\"admin\", \"user\", \"moderator\"]);\n\n// Users table\nexport const users = pgTable(\"users\", {\n  id: uuid(\"id\").defaultRandom().primaryKey(),\n  email: text(\"email\").notNull().unique(),\n  name: text(\"name\").notNull(),\n  role: roleEnum(\"role\").default(\"user\").notNull(),\n  createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n  updatedAt: timestamp(\"updated_at\").defaultNow().notNull(),\n});\n\n// Posts table with foreign key\nexport const posts = pgTable(\"posts\", {\n  id: uuid(\"id\").defaultRandom().primaryKey(),\n  title: text(\"title\").notNull(),\n  content: text(\"content\"),\n  published: boolean(\"published\").default(false).notNull(),\n  authorId: uuid(\"author_id\").references(() => users.id, { onDelete: \"cascade\" }).notNull(),\n  createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n});\n```\n\n### Relations\n\n```typescript\n// db/relations.ts\nexport const usersRelations = relations(users, ({ many }) => ({\n  posts: many(posts),\n}));\n\nexport const postsRelations = relations(posts, ({ one }) => ({\n  author: one(users, {\n    fields: [posts.authorId],\n    references: [users.id],\n  }),\n}));\n```\n\n### Type Inference\n\n```typescript\n// Infer types directly from your schema — no separate type files needed\nimport type { InferSelectModel, InferInsertModel } from \"drizzle-orm\";\n\nexport type User = InferSelectModel<typeof users>;\nexport type NewUser = InferInsertModel<typeof users>;\nexport type Post = InferSelectModel<typeof posts>;\nexport type NewPost = InferInsertModel<typeof posts>;\n```\n\n## Query Patterns\n\n### Select Queries (SQL-like API)\n\n```typescript\nimport { eq, and, like, desc, count, sql } from \"drizzle-orm\";\n\n// Basic select\nconst allUsers = await db.select().from(users);\n\n// Filtered with conditions\nconst admins = await db.select().from(users).where(eq(users.role, \"admin\"));\n\n// Partial select (only specific columns)\nconst emails = await db.select({ email: users.email }).from(users);\n\n// Join query\nconst postsWithAuthors = await db\n  .select({\n    title: posts.title,\n    authorName: users.name,\n  })\n  .from(posts)\n  .innerJoin(users, eq(posts.authorId, users.id))\n  .where(eq(posts.published, true))\n  .orderBy(desc(posts.createdAt))\n  .limit(10);\n\n// Aggregation\nconst postCounts = await db\n  .select({\n    authorId: posts.authorId,\n    postCount: count(posts.id),\n  })\n  .from(posts)\n  .groupBy(posts.authorId);\n```\n\n### Relational Queries (Prisma-like API)\n\n```typescript\n// Nested includes — Drizzle resolves in a single query\nconst usersWithPosts = await db.query.users.findMany({\n  with: {\n    posts: {\n      where: eq(posts.published, true),\n      orderBy: [desc(posts.createdAt)],\n      limit: 5,\n    },\n  },\n});\n\n// Find one with nested data\nconst user = await db.query.users.findFirst({\n  where: eq(users.id, userId),\n  with: { posts: true },\n});\n```\n\n### Insert, Update, Delete\n\n```typescript\n// Insert with returning\nconst [newUser] = await db\n  .insert(users)\n  .values({ email: \"dev@example.com\", name: \"Dev\" })\n  .returning();\n\n// Batch insert\nawait db.insert(posts).values([\n  { title: \"Post 1\", authorId: newUser.id },\n  { title: \"Post 2\", authorId: newUser.id },\n]);\n\n// Update\nawait db.update(users).set({ name: \"Updated\" }).where(eq(users.id, userId));\n\n// Delete\nawait db.delete(posts).where(eq(posts.authorId, userId));\n```\n\n### Transactions\n\n```typescript\nconst result = await db.transaction(async (tx) => {\n  const [user] = await tx.insert(users).values({ email, name }).returning();\n  await tx.insert(posts).values({ title: \"Welcome Post\", authorId: user.id });\n  return user;\n});\n```\n\n## Migration Workflow (Drizzle Kit)\n\n### Configuration\n\n```typescript\n// drizzle.config.ts\nimport { defineConfig } from \"drizzle-kit\";\n\nexport default defineConfig({\n  schema: \"./db/schema.ts\",\n  out: \"./drizzle\",\n  dialect: \"postgresql\",\n  dbCredentials: {\n    url: process.env.DATABASE_URL!,\n  },\n});\n```\n\n### Commands\n\n```bash\n# Generate migration SQL from schema changes\nnpx drizzle-kit generate\n\n# Push schema directly to database (development only — skips migration files)\nnpx drizzle-kit push\n\n# Run pending migrations (production)\nnpx drizzle-kit migrate\n\n# Open Drizzle Studio (GUI database browser)\nnpx drizzle-kit studio\n```\n\n## Database Client Setup\n\n### PostgreSQL (Neon Serverless)\n\n```typescript\n// db/index.ts\nimport { drizzle } from \"drizzle-orm/neon-http\";\nimport { neon } from \"@neondatabase/serverless\";\nimport * as schema from \"./schema\";\n\nconst sql = neon(process.env.DATABASE_URL!);\nexport const db = drizzle(sql, { schema });\n```\n\n### SQLite (Turso/LibSQL)\n\n```typescript\nimport { drizzle } from \"drizzle-orm/libsql\";\nimport { createClient } from \"@libsql/client\";\nimport * as schema from \"./schema\";\n\nconst client = createClient({\n  url: process.env.TURSO_DATABASE_URL!,\n  authToken: process.env.TURSO_AUTH_TOKEN,\n});\nexport const db = drizzle(client, { schema });\n```\n\n### MySQL (PlanetScale)\n\n```typescript\nimport { drizzle } from \"drizzle-orm/planetscale-serverless\";\nimport { Client } from \"@planetscale/database\";\nimport * as schema from \"./schema\";\n\nconst client = new Client({ url: process.env.DATABASE_URL! });\nexport const db = drizzle(client, { schema });\n```\n\n## Performance Optimization\n\n### Prepared Statements\n\n```typescript\n// Prepare once, execute many times\nconst getUserById = db.query.users\n  .findFirst({\n    where: eq(users.id, sql.placeholder(\"id\")),\n  })\n  .prepare(\"get_user_by_id\");\n\n// Execute with parameters\nconst user = await getUserById.execute({ id: \"abc-123\" });\n```\n\n### Batch Operations\n\n```typescript\n// Use db.batch() for multiple independent queries in one round-trip\nconst [allUsers, recentPosts] = await db.batch([\n  db.select().from(users),\n  db.select().from(posts).orderBy(desc(posts.createdAt)).limit(10),\n]);\n```\n\n### Indexing in Schema\n\n```typescript\nimport { index, uniqueIndex } from \"drizzle-orm/pg-core\";\n\nexport const posts = pgTable(\n  \"posts\",\n  {\n    id: uuid(\"id\").defaultRandom().primaryKey(),\n    title: text(\"title\").notNull(),\n    authorId: uuid(\"author_id\").references(() => users.id).notNull(),\n    createdAt: timestamp(\"created_at\").defaultNow().notNull(),\n  },\n  (table) => [\n    index(\"posts_author_idx\").on(table.authorId),\n    index(\"posts_created_idx\").on(table.createdAt),\n  ]\n);\n```\n\n## Next.js Integration\n\n### Server Component Usage\n\n```typescript\n// app/users/page.tsx (React Server Component)\nimport { db } from \"@/db\";\nimport { users } from \"@/db/schema\";\n\nexport default async function UsersPage() {\n  const allUsers = await db.select().from(users);\n  return (\n    <ul>\n      {allUsers.map((u) => (\n        <li key={u.id}>{u.name}</li>\n      ))}\n    </ul>\n  );\n}\n```\n\n### Server Action\n\n```typescript\n// app/actions.ts\n\"use server\";\nimport { db } from \"@/db\";\nimport { users } from \"@/db/schema\";\n\nexport async function createUser(formData: FormData) {\n  const name = formData.get(\"name\") as string;\n  const email = formData.get(\"email\") as string;\n  await db.insert(users).values({ name, email });\n}\n```\n\n## Best Practices\n\n- ✅ **Do:** Keep all schema definitions in a single `db/schema.ts` or split by domain (`db/schema/users.ts`, `db/schema/posts.ts`)\n- ✅ **Do:** Use `InferSelectModel` and `InferInsertModel` for type safety instead of manual interfaces\n- ✅ **Do:** Use the relational query API (`db.query.*`) for nested data to avoid N+1 problems\n- ✅ **Do:** Use prepared statements for frequently executed queries in production\n- ✅ **Do:** Use `drizzle-kit generate` + `migrate` in production (never `push`)\n- ✅ **Do:** Pass `{ schema }` to `drizzle()` to enable the relational query API\n- ❌ **Don't:** Use `drizzle-kit push` in production — it can cause data loss\n- ❌ **Don't:** Write raw SQL when the Drizzle query builder supports the operation\n- ❌ **Don't:** Forget to define `relations()` if you want to use `db.query.*` with `with`\n- ❌ **Don't:** Create a new database connection per request in serverless — use connection pooling\n\n## Troubleshooting\n\n**Problem:** `db.query.tableName` is undefined\n**Solution:** Pass all schema objects (including relations) to `drizzle()`: `drizzle(client, { schema })`\n\n**Problem:** Migration conflicts after schema changes\n**Solution:** Run `npx drizzle-kit generate` to create a new migration, then `npx drizzle-kit migrate`\n\n**Problem:** Type errors on `.returning()` with MySQL\n**Solution:** MySQL does not support `RETURNING`. Use `.execute()` and read `insertId` from the result instead.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["drizzle","orm","expert","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-drizzle-orm-expert","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/drizzle-orm-expert","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34831 github stars · SKILL.md body (10,415 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T06:51:06.165Z","embedding":null,"createdAt":"2026-04-18T21:36:22.702Z","updatedAt":"2026-04-24T06:51:06.165Z","lastSeenAt":"2026-04-24T06:51:06.165Z","tsv":"'+1':246,1061 '-123':862 '/db':958,990 '/db/schema':962,994 '/db/schema.ts':669 '/drizzle':671 '/libsql':770 '/neon-http':740 '/pg-core':267,904 '/planetscale-serverless':806 '/schema':749,779,815 '1':597 '10':508,892 '2':602 '5':553 'abc':861 'action':982 'admin':280,460,468 'advantag':201 'aggreg':121,509 'allus':451,878,969 'allusers.map':975 'api':64,205,238,435,529,1053,1094 'app':137 'app/actions.ts':984 'app/users/page.tsx':951 'approach':112 'ask':89,1246 'async':630,965,996 'auth':789 'author':352,383,921,935 'authorid':350,515,598,603,648,919 'authornam':491 'authtoken':787 'avoid':1059 'await':452,461,476,486,512,541,561,579,591,606,617,628,634,641,858,880,970,1013 'bash':679 'basic':448 'batch':149,589,863 'best':1019 'binari':186 'boolean':260,345 'boundari':1254 'browser':720 'build':22,45 'builder':1118 'bundl':216 'cascad':357 'caus':1106 'chang':685,1172 'clarif':1248 'clear':1221 'client':727,781,795,808,817,819,827,1165 'cloudflar':219 'column':473 'command':678 'compil':188,234 'complex':116 'compon':948,954 'concept':163 'condit':458 'configur':656 'conflict':1169 'connect':150,232,1142,1148 'const':276,286,328,369,378,450,459,474,484,510,539,559,577,626,632,750,756,780,792,816,824,839,856,877,906,968,1001,1007 'content':341,343 'core':162 'count':442,518 'creat':312,361,928,941,1138,1181 'createcli':772,782 'createdat':310,359,926 'createus':998 'criteria':1257 'data':558,1057,1107 'databas':18,26,50,75,104,145,695,719,726,785,1141 'db':487,513,580,757,793,825,956,988 'db.batch':867,881 'db.delete':618 'db.insert':592,1014 'db.query':1054,1133 'db.query.tablename':1152 'db.query.users':841 'db.query.users.findfirst':562 'db.query.users.findmany':542 'db.select':453,462,477,882,885,971 'db.transaction':629 'db.update':607 'db/index.ts':733 'db/relations.ts':367 'db/schema.ts':254,1029 'db/schema/posts.ts':1035 'db/schema/users.ts':1034 'dbcredenti':674 'default':307,347,666,964 'defaultnow':314,320,363,930 'defaultrandom':293,335,913 'defin':1126 'defineconfig':660,667 'definit':252,1025 'delet':572,616 'deno':223 'depend':214 'desc':441,505,550,889 'describ':1225 'design':12,60,103,249 'dev':587 'dev@example.com':585 'develop':44,696 'dialect':672 'direct':395,693 'domain':1033 'drizzl':2,7,29,30,39,53,65,93,107,128,134,161,165,166,187,212,265,272,410,446,533,654,663,688,703,712,716,723,735,738,758,765,768,794,801,804,826,902,1076,1088,1099,1116,1163,1164,1177,1188 'drizzle-kit':662,687,702,711,722,1075,1098,1176,1187 'drizzle-orm':264,271,409,445,737,767,803,901 'drizzle-orm-expert':1 'drizzle.config.ts':658 'edg':196,222 'email':295,297,475,478,584,638,1008,1010,1018 'enabl':1090 'engin':185 'enum':274 'environ':1237 'environment-specif':1236 'eq':438,466,497,501,546,564,613,621,844 'error':1193 'execut':836,853,1069,1205 'exist':99 'expert':4,5,32,41,1242 'export':275,285,327,368,377,412,416,420,424,665,755,791,823,905,963,995 'fals':348 'field':386 'file':402,700 'filter':456 'find':554 'findfirst':842 'first':111,172 'foreign':325 'forget':1124 'formdata':999,1000 'formdata.get':1003,1009 'frequent':1068 'full':224 'function':966,997 'generat':175,680,690,1078,1179 'get':849 'getuserbyid':840 'getuserbyid.execute':859 'grade':38 'groupbi':522 'gui':718 'help':43 'hono':141 'id':290,292,332,334,353,847,852,860,910,912,922 'ideal':194 'idx':936,942 'import':255,268,404,437,659,734,741,745,764,771,775,800,807,811,897,955,959,987,991 'includ':243,532,1160 'independ':870 'index':893,898,933,939 'infer':226,391,393 'inferinsertmodel':407,419,427,1040 'inferselectmodel':406,415,423,1038 'innerjoin':495 'input':1251 'insert':570,574,581,590 'insertid':1208 'instead':1044,1212 'integ':258 'integr':19,69,133,946 'interfac':1047 'join':119,482 'keep':1022 'key':200,326,978 'kit':66,129,655,664,689,704,713,724,1077,1100,1178,1189 'knex':159 'know':58,208,211 'layer':27,51 'li':977 'libsql/client':774 'like':204,241,434,440,528 'limit':507,552,891,1213 'loss':1108 'make':192 'mani':373,375,837 'manual':1046 'match':1222 'migrat':15,67,130,154,652,681,699,708,714,1079,1168,1184,1190 'miss':1259 'moder':282 'multipl':869 'mysql':797,1197,1199 'n':245,1060 'name':300,302,586,610,639,1002,1004,1017 'need':403 'neon':76,730,742,752 'neondatabase/serverless':744 'nest':242,531,557,1056 'never':1082 'new':97,818,1140,1183 'newpost':426 'newus':418,578 'newuser.id':599,604 'next.js':71,136,945 'notnul':298,303,309,315,321,340,349,358,364,918,925,931 'npx':686,701,710,721,1175,1186 'object':1159 'ondelet':356 'one':382,384,555,873 'open':715 'oper':864,1121 'optim':144,830 'orderbi':504,549,888 'orm':3,8,31,40,54,94,167,173,266,273,411,447,739,769,805,903 'output':1231 'overhead':178 'paramet':855 'partial':469 'pass':1085,1156 'pattern':250,429 'pend':707 'per':1143 'perform':49,146,829 'permiss':1252 'pgenum':262,278 'pgtabl':256,288,330,908 'planetscal':77,798 'planetscale/database':810 'pool':151,1149 'post':322,329,331,374,376,381,422,494,521,544,568,593,596,601,619,643,647,887,907,909,934,940 'postcount':511,517 'postgresql':673,729 'posts.authorid':387,498,516,523,622 'posts.createdat':506,551,890 'posts.id':519 'posts.published':502,547 'posts.title':490 'postsrel':379 'postswithauthor':485 'practic':1020 'prepar':147,831,834,848,1065 'primarykey':294,336,914 'prisma':156,180,240,527 'prisma-lik':239,526 'problem':247,1062,1151,1167,1191 'process.env.database':676,753,821 'process.env.turso':784,788 'product':37,709,1072,1081,1103 'production-grad':36 'project':100 'publish':344,346 'push':691,705,1083,1101 'queri':14,63,118,184,229,237,428,431,483,525,538,871,1052,1070,1093,1117 'raw':190,1112 'react':952 'read':1207 'recentpost':879 'refer':354,388,923 'relat':13,62,117,236,269,365,371,380,524,1051,1092,1127,1161 'request':1144 'requir':1250 'resolv':534 'result':627,1211 'return':576,588,640,650,974,1195,1203 'review':1243 'role':279,304,306 'roleenum':277,305 'round':875 'round-trip':874 'router':138 'run':706,1174 'runtim':177,197 'safe':25,48 'safeti':1043,1253 'schema':11,59,105,227,248,398,668,684,692,747,760,777,796,813,828,895,1024,1086,1158,1166,1171 'scope':1224 'select':430,449,470,488,514 'separ':400 'server':947,953,981,986 'serverless':17,74,199,731,1146 'set':91,124,609 'setup':728 'singl':537,1028 'skill':84,1216 'skill-drizzle-orm-expert' 'skip':698 'solut':1155,1173,1198 'source-sickn33' 'specif':472,1238 'split':1031 'sql':191,203,209,433,443,682,751,759,1113 'sql-like':202,432 'sql.placeholder':846 'sqlite':761 'statement':148,832,1066 'stop':1244 'string':1006,1012 'studio':717,725 'subqueri':120 'substitut':1234 'success':1256 'supabas':79 'support':1119,1202 'tabl':251,284,323,932 'table.authorid':938 'table.createdat':944 'task':1220 'test':1240 'text':257,296,301,338,342,916 'time':235,838 'timestamp':259,311,317,360,927 'tini':215 'titl':337,339,489,595,600,645,915,917 'token':790 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'transact':624 'treat':1229 'trip':876 'troubleshoot':127,1150 'trpc':72,139 'true':503,548,569 'turso':78 'turso/libsql':762 'tx':631 'tx.insert':635,642 'type':24,47,225,228,390,394,401,405,413,417,421,425,1042,1192 'type-saf':23,46 'typeorm':157 'typescript':10,56,110,171,253,366,392,436,530,573,625,657,732,763,799,833,865,896,950,983 'typescript-first':109,170 'u':976 'u.id':979 'u.name':980 'undefin':1154 'uniqu':299 'uniqueindex':899 'unlik':179 'updat':318,571,605,611 'updatedat':316 'url':675,677,754,783,786,820,822 'usag':949 'use':20,52,82,85,101,113,122,131,142,152,182,866,985,1037,1049,1064,1074,1097,1132,1147,1204,1214 'user':88,281,283,287,289,308,372,385,414,455,464,481,496,560,582,608,633,636,651,850,857,884,960,973,992,1015 'user.id':649 'userid':566,615,623 'users.email':479 'users.id':355,389,499,565,614,845,924 'users.name':492 'users.role':467 'userspag':967 'usersrel':370 'userswithpost':540 'uuid':261,291,333,351,911,920 'valid':1239 'valu':583,594,637,644,1016 'vercel':221 'want':1130 'welcom':646 'without':244 'work':217 'worker':220 'workflow':653 'write':115,1111 'zero':176,213","prices":[{"id":"7d424cdd-5417-46e9-b4bc-dc3269c56d49","listingId":"bfc4619b-a9dc-456c-bc7c-26e3d7f16203","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:36:22.702Z"}],"sources":[{"listingId":"bfc4619b-a9dc-456c-bc7c-26e3d7f16203","source":"github","sourceId":"sickn33/antigravity-awesome-skills/drizzle-orm-expert","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/drizzle-orm-expert","isPrimary":false,"firstSeenAt":"2026-04-18T21:36:22.702Z","lastSeenAt":"2026-04-24T06:51:06.165Z"}],"details":{"listingId":"bfc4619b-a9dc-456c-bc7c-26e3d7f16203","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"drizzle-orm-expert","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34831,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"8a0ec02e2d01e450bf9577ccbffa0859c42f4957","skill_md_path":"skills/drizzle-orm-expert/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/drizzle-orm-expert"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"drizzle-orm-expert","description":"Expert in Drizzle ORM for TypeScript — schema design, relational queries, migrations, and serverless database integration. Use when building type-safe database layers with Drizzle."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/drizzle-orm-expert"},"updatedAt":"2026-04-24T06:51:06.165Z"}}