Skip to content

Drizzle SQLite

Install

sh
pnpm add drizzle-orm @libsql/client dotenv
sh
pnpm add -D drizzle-kit

Directory Structure

.
├── db
│   ├── index.ts
│   └── schema.ts
├── drizzle
│   └── migrations
│       ├── ***.sql
│       └── ***
├── drizzle.config.ts
├── local.db
└── package.json

db/index.ts

ts
import { drizzle } from 'drizzle-orm/libsql'
import { createClient } from '@libsql/client'
import dotenv from 'dotenv'

dotenv.config()

const client = createClient({
  url: process.env.DB_FILE_NAME!,
})

const db = drizzle(client)

export default db

db/schema.ts

ts
import { randomUUID } from 'crypto'
import { sql } from 'drizzle-orm'
import { sqliteTable, text } from 'drizzle-orm/sqlite-core'

export const users = sqliteTable('users', {
  id: text('id', { length: 36 })
    .primaryKey()
    .$defaultFn(() => randomUUID()),
  name: text().notNull(),
  email: text().notNull().unique(),
  password: text().notNull(),
  createdAt: text('created_at').notNull().default(sql`CURRENT_TIMESTAMP`),
  updatedAt: text('updated_at')
    .notNull()
    .default(sql`(CURRENT_TIMESTAMP)`)
    .$onUpdate(() => sql`(CURRENT_TIMESTAMP)`),
})

drizzle.config.ts

ts
import 'dotenv/config'
import { defineConfig } from 'drizzle-kit'

export default defineConfig({
  out: './drizzle/migrations',
  schema: './db/schema.ts',
  dialect: 'sqlite',
  dbCredentials: {
    url: process.env.DB_FILE_NAME!,
  },
})

push

sh
pnpm drizzle-kit push

generate

sh
pnpm drizzle-kit generate