100+ animated React components (Aceternity UI) for Next.js with Tailwind. Use for hero sections, parallax, 3D effects, or encountering animation, shadcn CLI integration errors.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
| Type-safe ORM for Cloudflare D1 databases using Drizzle. Use when: building D1 database schemas, writing type-safe SQL queries, managing migrations with Drizzle Kit, defining table relations, implementing prepared statements, using D1 batch API, or encountering D1_ERROR, transaction errors, foreign key constraint failures, or schema inference issues.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Status: Production Ready ✅ Last Updated: 2025-12-14 Latest Version: drizzle-orm@0.45.2, drizzle-kit@0.31.10 Dependencies: cloudflare-d1, cloudflare-worker-base
bun add drizzle-orm drizzle-kit
Create drizzle.config.ts:
import { defineConfig } from 'drizzle-kit';
export default defineConfig({
schema: './src/db/schema.ts',
out: './migrations',
dialect: 'sqlite', // MANDATORY since drizzle-kit 0.21 (D1 = sqlite)
driver: 'd1-http', // D1 HTTP driver for remote migrations/Studio
dbCredentials: { // MANDATORY: drizzle-kit 0.30+ tightened zod validation
accountId: process.env.CLOUDFLARE_ACCOUNT_ID!,
databaseId: process.env.CLOUDFLARE_DATABASE_ID!,
token: process.env.CLOUDFLARE_D1_TOKEN!,
},
});
drizzle-kit 0.30/0.31 note:
dialectanddbCredentialsare now strictly validated. A config that omitsdialector uses the oldconnectionString/urikeys will fail validation. For D1 usedialect: 'sqlite'+driver: 'd1-http'withaccountId/databaseId/token(or wrangler-based credentials). The runtimemigrate()signature indrizzle-orm/<driver>/migratoris unchanged from 0.36 → 0.45 (it changes only in 1.0-beta, which is out of scope for^0.45).
Create src/db/schema.ts:
import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';
import { relations } from 'drizzle-orm';
export const users = sqliteTable('users', {
id: integer('id').primaryKey({ autoIncrement: true }),
email: text('email').notNull().unique(),
name: text('name').notNull(),
createdAt: integer('created_at', { mode: 'timestamp' }).$defaultFn(() => new Date()),
});
export const posts = sqliteTable('posts', {
id: integer('id').primaryKey({ autoIncrement: true }),
title: text('title').notNull(),
content: text('content').notNull(),
authorId: integer('author_id')
.notNull()
.references(() => users.id, { onDelete: 'cascade' }),
});
export const usersRelations = relations(users, ({ many }) => ({
posts: many(posts),
}));
bunx drizzle-kit generate # Generate SQL
bunx wrangler d1 migrations apply my-database --local # Apply local
bunx wrangler d1 migrations apply my-database --remote # Apply prod
import { drizzle } from 'drizzle-orm/d1';
import { users } from './db/schema';
import { eq } from 'drizzle-orm';
export default {
async fetch(request: Request, env: { DB: D1Database }): Promise<Response> {
const db = drizzle(env.DB);
const allUsers = await db.select().from(users).all();
return Response.json(allUsers);
},
};
| Rule | Why |
|---|---|
Use drizzle-kit generate for migrations | Never write SQL manually |
| Test migrations locally first | --local before --remote |
Use .get() for single results | Returns first row or undefined |
Use db.batch() for transactions | D1 doesn't support SQL BEGIN/COMMIT |
Use integer with mode: 'timestamp' for dates | D1 has no native date type |
Use .$defaultFn() for dynamic defaults | Not .default() for functions |
| Rule | Why |
|---|---|
Use SQL BEGIN TRANSACTION | D1 requires batch API (Error #1) |
Mix drizzle-kit migrate and wrangler apply | Use Wrangler only |
Use drizzle-kit push for production | Use generate + apply |
| Commit credentials in drizzle.config.ts | Use env vars |
Use .default() for function calls | Use .$defaultFn() instead |
| # | Error | Solution |
|---|---|---|
| 1 | D1_ERROR: Cannot use BEGIN TRANSACTION | Use db.batch([...]) instead of db.transaction() |
| 2 | FOREIGN KEY constraint failed | Define cascading: .references(() => users.id, { onDelete: 'cascade' }) |
| 3 | env.DB is undefined | Ensure binding in wrangler.jsonc matches env.DB |
| 4 | No such module "wrangler" | Use import { drizzle } from 'drizzle-orm/d1' |
| 5 | Type instantiation excessively deep | Use InferSelectModel<typeof users> for explicit types |
See: references/error-catalog.md for all 12 errors with complete solutions.
| Pattern | Use Case | Template |
|---|---|---|
| CRUD Operations | Basic database operations | templates/basic-queries.ts |
| Relations & Joins | Nested queries, manual joins | templates/relations-queries.ts |
| Batch Operations | Transactions (D1 batch API) | templates/transactions.ts |
| Schema Design | Naming, indexes, soft deletes | references/schema-patterns.md |
| File | Purpose | Template |
|---|---|---|
drizzle.config.ts | Drizzle Kit configuration | templates/drizzle.config.ts |
wrangler.jsonc | D1 binding setup | references/wrangler-setup.md |
package.json | npm scripts for migrations | templates/package.json |
npm scripts:
{
"db:generate": "drizzle-kit generate",
"db:migrate:local": "wrangler d1 migrations apply my-database --local",
"db:migrate:remote": "wrangler d1 migrations apply my-database --remote"
}
| Step | Command | Notes |
|---|---|---|
| 1. Edit schema | Edit src/db/schema.ts | Make changes |
| 2. Generate | npm run db:generate | Creates SQL migration |
| 3. Test local | npm run db:migrate:local | Verify locally |
| 4. Deploy code | npm run deploy | Push to Cloudflare |
| 5. Apply prod | npm run db:migrate:remote | Apply migration |
See: references/migration-workflow.md for complete workflow.
import { InferSelectModel, InferInsertModel } from 'drizzle-orm';
import { users } from './db/schema';
export type User = InferSelectModel<typeof users>;
export type NewUser = InferInsertModel<typeof users>;
| Reference | Load When... |
|---|---|
references/error-catalog.md | Debugging D1 errors, transaction failures, binding issues |
references/schema-patterns.md | Designing schemas, naming conventions, indexes, soft deletes |
references/migration-workflow.md | Setting up or troubleshooting migrations |
references/query-builder-api.md | Complex queries, operators, joins syntax |
references/wrangler-setup.md | Configuring wrangler.jsonc for D1 |
references/common-errors.md | Quick error lookup |
Templates: basic-schema.ts, basic-queries.ts, transactions.ts, relations-queries.ts, prepared-statements.ts, drizzle.config.ts, package.json
References: error-catalog.md, schema-patterns.md, migration-workflow.md, query-builder-api.md, wrangler-setup.md, common-errors.md, links-to-official-docs.md
{
"dependencies": {
"drizzle-orm": "^0.45.2"
},
"devDependencies": {
"drizzle-kit": "^0.31.10"
}
}
When installing Drizzle ORM and D1 driver packages, follow supply chain security best practices:
npm config set ignore-scripts true (or Bun: disabled by default)socket package score npm <pkg> or use socket npm install <pkg> to check packagesLoad the dependency-upgrade skill for full security configuration including Socket CLI integration, cooldown setup, lockfile validation, and CI enforcement.
Token Savings: ~65% (comprehensive patterns in references) Error Prevention: 100% (all 12 documented issues) Ready for production! ✅
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
100+ animated React components (Aceternity UI) for Next.js with Tailwind. Use for hero sections, parallax, 3D effects, or encountering animation, shadcn CLI integration errors.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Secure API authentication with JWT, OAuth 2.0, API keys. Use for authentication systems, third-party integrations, service-to-service communication, or encountering token management, security headers, auth flow errors.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Creates comprehensive API changelogs documenting breaking changes, deprecations, and migration strategies for API consumers. Use when managing API versions, communicating breaking changes, or creating upgrade guides.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Verifies API contracts between services using consumer-driven contracts, schema validation, and tools like Pact. Use when testing microservices communication, preventing breaking changes, or validating OpenAPI specifications.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Master REST and GraphQL API design principles to build intuitive, scalable, and maintainable APIs that delight developers. Use when designing new APIs, reviewing API specifications, or establishing API design standards.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Implements standardized API error responses with proper status codes, logging, and user-friendly messages. Use when building production APIs, implementing error recovery patterns, or integrating error monitoring services.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.