Better Drizzle
almeidazs/better-drizzle
Write, review, and debug code that uses better-drizzle, the typed repository layer over Drizzle ORM 1.x (better(db), client.users.findMany, paginate, cursor, upsertMany, relation include/connect…
Scaffolds Drizzle ORM + SQLite boilerplate — a new drizzle.config.ts, a singleton client with the right pragmas, per-table schema files with explicit primary keys/indexed foreign…
$ npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pproenca/dot-skills drizzle-sqlite-scaffold --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/pproenca/dot-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.experimental/drizzle-sqlite-scaffold .claude/skills/drizzle-sqlite-scaffold && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "drizzle-sqlite-scaffold" agent skill from https://github.com/pproenca/dot-skills/tree/master/skills/.experimental/drizzle-sqlite-scaffold into .claude/skills/drizzle-sqlite-scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drizzle-sqlite-scaffold", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pproenca/dot-skills/tree/master/skills/.experimental/drizzle-sqlite-scaffoldType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pproenca/dot-skills drizzle-sqlite-scaffold --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pproenca/dot-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/.experimental/drizzle-sqlite-scaffold .agents/skills/drizzle-sqlite-scaffold && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "drizzle-sqlite-scaffold" agent skill from https://github.com/pproenca/dot-skills/tree/master/skills/.experimental/drizzle-sqlite-scaffold into .agents/skills/drizzle-sqlite-scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drizzle-sqlite-scaffold", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pproenca/dot-skills drizzle-sqlite-scaffold --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pproenca/dot-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/.experimental/drizzle-sqlite-scaffold .cursor/skills/drizzle-sqlite-scaffold && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "drizzle-sqlite-scaffold" agent skill from https://github.com/pproenca/dot-skills/tree/master/skills/.experimental/drizzle-sqlite-scaffold into .cursor/skills/drizzle-sqlite-scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drizzle-sqlite-scaffold", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pproenca/dot-skills.git --path skills/.experimental/drizzle-sqlite-scaffold--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pproenca/dot-skills drizzle-sqlite-scaffold --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pproenca/dot-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/.experimental/drizzle-sqlite-scaffold .gemini/skills/drizzle-sqlite-scaffold && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "drizzle-sqlite-scaffold" agent skill from https://github.com/pproenca/dot-skills/tree/master/skills/.experimental/drizzle-sqlite-scaffold into .gemini/skills/drizzle-sqlite-scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drizzle-sqlite-scaffold", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pproenca/dot-skills drizzle-sqlite-scaffoldInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pproenca/dot-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/.experimental/drizzle-sqlite-scaffold .github/skills/drizzle-sqlite-scaffold && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "drizzle-sqlite-scaffold" agent skill from https://github.com/pproenca/dot-skills/tree/master/skills/.experimental/drizzle-sqlite-scaffold into .github/skills/drizzle-sqlite-scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drizzle-sqlite-scaffold", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pproenca/dot-skills drizzle-sqlite-scaffold --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pproenca/dot-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/.experimental/drizzle-sqlite-scaffold .opencode/skills/drizzle-sqlite-scaffold && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "drizzle-sqlite-scaffold" agent skill from https://github.com/pproenca/dot-skills/tree/master/skills/.experimental/drizzle-sqlite-scaffold into .opencode/skills/drizzle-sqlite-scaffold/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "drizzle-sqlite-scaffold", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
drizzle-sqlite-scaffoldScaffolds Drizzle ORM + SQLite boilerplate — a new drizzle.config.ts, a singleton client with the right pragmas, per-table schema files with explicit primary keys/indexed foreign…
Drizzle Sqlite Scaffold is an agent skill from pproenca/dot-skills. Scaffolds Drizzle ORM + SQLite boilerplate — a new drizzle.config.ts, a singleton client with the right pragmas, per-table schema files with explicit primary keys/indexed foreign keys/relations()/inferred types, per-table repository modules with .returning() + inArray() + .onConflictDoUpdate(), or drizzle-zod validators. Produces convention-enforced templates for three drivers (better-sqlite3, libsql/Turso, bun:sqlite). Trigger even when the user doesn't say "scaffold" — phrases like "add a table for X", "set up…
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 17 other files, including reference files and assets (for example `config.json`, `gotchas.md` and `metadata.json`).
It sits in Databases, covering ORMs and data access, Project scaffolding and Forms and validation. It works with SQLite, Turso, Zod and Drizzle ORM. The repository describes itself as: A collection of AI agent skills following the Agent Skills open format. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit cf93c57. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmnpxFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
orm.drizzle.teamFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Drizzle Sqlite Scaffold loads about 4k tokens when it runs, and up to ~6.6k if it reads all its reference files. Until then it costs about 200 tokens; SKILL.md has 1,475 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from pproenca/dot-skills at commit cf93c57, republished under its MIT licence (© pproenca). 1,475 words, ~4,011 tokens.
.claude/skills/drizzle-sqlite-scaffold/SKILL.md (or your agent's skills folder). This skill also uses 14 other files; get the full folder from GitHub.Parameterized templates for bootstrapping Drizzle + SQLite in a fresh project, or adding a new table/repository to an existing one. Every output bakes in the conventions documented in references/conventions.md — explicit primary keys, indexed foreign keys, relations() declarations, $inferSelect/$inferInsert exports, timestamp_ms dates, boolean-mode bools, WAL + foreign_keys=ON + busy_timeout pragmas, singleton client with HMR guard, and CRUD helpers using .returning() + inArray() + .onConflictDoUpdate().
Reach for these templates when:
relations(), or has hand-written User types that drift from the schemaconfig.json)| Parameter | Required | Default | Values |
|---|---|---|---|
driver | yes | — | better-sqlite3 | libsql | bun-sqlite (D1 has a different lifecycle — see "Cloudflare D1" below) |
db_url_env | no | DATABASE_URL | env var name |
schema_dir | no | ./src/db/schema | per-table schema files |
repository_dir | no | ./src/db/repository | per-table CRUD modules |
validators_dir | no | ./src/db/validators | drizzle-zod schemas (when with_zod=true) |
client_path | no | ./src/db/client.ts | singleton client module |
migrations_dir | no | ./drizzle | drizzle-kit output |
If config.json already exists with values, this skill uses them; otherwise it asks via AskUserQuestion.
| Parameter | Required | Default | Description |
|---|---|---|---|
name | yes | — | Kebab-case singular: user, order-item. Used for filenames and TS identifiers (name_camel, name_pascal derived). |
table_name | no | snake_case plural of name | SQL table name: users, order_items |
pk | no | serial-int | serial-int | uuid | cuid2 | text |
timestamps | no | true | adds createdAt/updatedAt columns |
soft_delete | no | false | adds nullable deletedAt + partial index |
relations | no | [] | list of related table names — expands relations() body |
with_zod | no | true | emits a drizzle-zod validators file |
| Template | Output File | When |
|---|---|---|
drizzle.config.local.ts.template | drizzle.config.ts | driver is better-sqlite3, bun-sqlite, or libsql with a file: URL |
drizzle.config.turso.ts.template | drizzle.config.ts | driver is libsql against Turso (remote libsql: URL) |
client.better-sqlite3.ts.template | {{client_path}} | driver is better-sqlite3 |
client.libsql.ts.template | {{client_path}} | driver is libsql |
client.bun-sqlite.ts.template | {{client_path}} | driver is bun-sqlite |
schema-index.ts.template | {{schema_dir}}/index.ts | Always (initially empty; append exports as tables are added) |
gitignore.template | .gitignore (append) | Always |
| Template | Output File | When |
|---|---|---|
table.ts.template | {{schema_dir}}/{{name}}.ts | Per table |
repository.ts.template | {{repository_dir}}/{{name}}.ts | Per table |
validators.ts.template | {{validators_dir}}/{{name}}.ts | Per table when with_zod=true |
Resolve project parameters. Read config.json. For any required field that's empty, ask the user via AskUserQuestion (driver is the only strictly required one; the rest have sensible defaults).
Install runtime + tooling first so the rendered files type-check immediately:
# Pick the driver-specific runtime package:
npm install drizzle-orm @libsql/client # for libsql
npm install drizzle-orm better-sqlite3 # for better-sqlite3
npm install drizzle-orm # bun:sqlite is built into Bun
# Dev tools (all drivers):
npm install -D drizzle-kit
npm install -D @types/better-sqlite3 # better-sqlite3 only
npm install -D drizzle-zod zod # if with_zod=truePick the config and client variants for the resolved driver:
better-sqlite3 → drizzle.config.local.ts.template + client.better-sqlite3.ts.templatelibsql with file: URL → drizzle.config.local.ts.template + client.libsql.ts.templatelibsql with remote Turso URL → drizzle.config.turso.ts.template + client.libsql.ts.templatebun-sqlite → drizzle.config.local.ts.template + client.bun-sqlite.ts.templateRender and write the project-init files:
drizzle.config.ts{{client_path}} (typically src/db/client.ts){{schema_dir}}/index.ts (empty barrel)gitignore.template block to the project's .gitignoreFor libsql: the client template uses top-level await migrate(...). Verify tsconfig.json has "module": "ESNext" (or "NodeNext") and "target": "ES2022"+ for top-level await support. If the runtime is CommonJS, replace the top-level await with an exported async function init() the app calls during startup.
Save resolved values to config.json so subsequent table runs don't re-prompt.
Resolve per-table parameters. Ask the user for name, then offer defaults for table_name (snake_case plural), pk, timestamps, soft_delete, relations, with_zod. Use AskUserQuestion for any non-default the user wants.
Compute derived identifiers:
name_camel — camelCase of name (user, orderItem)name_pascal — PascalCase of name (User, OrderItem)pk_field — the PK column name (id for all 4 pk modes)pk_ts_type — TS type for the PK (number for serial-int, string for uuid/cuid2/text)pk_definition — the actual line, e.g., id: integer().primaryKey({ autoIncrement: true }), (see PK Variants table below)Render the table template: Read table.ts.template, substitute {{name}}, {{name_camel}}, {{name_pascal}}, {{table_name}}, {{pk_definition}}, {{pk_extra_imports}}, etc. Expand {{timestamps_block}} and {{soft_delete_block}} per the parameters (see "Block Expansions" below). Write to {{schema_dir}}/{{name}}.ts.
Render the repository template with the same parameters. Write to {{repository_dir}}/{{name}}.ts.
If with_zod=true, render the validators template. Write to {{validators_dir}}/{{name}}.ts.
Append to the schema barrel: Add export * from './{{name}}'; to {{schema_dir}}/index.ts.
Generate the migration: Tell the user to run npx drizzle-kit generate to produce the SQL file. Remind them to answer rename prompts explicitly if this scaffold replaces an existing differently-named table.
Apply the migration: Run npx drizzle-kit migrate against the dev database. The client templates also call migrate(...) on boot, but applying once in the dev loop confirms the SQL works before the next process restart.
Same as Flow B steps 1-2, but skip the table.ts.template render and just emit the repository (and optionally validators) modules.
pk value | pk_definition | pk_ts_type | Extra imports |
|---|---|---|---|
serial-int (default) | id: integer().primaryKey({ autoIncrement: true }), | number | — |
uuid | id: text().primaryKey().$defaultFn(() => crypto.randomUUID()), | string | — (uses Web Crypto) |
cuid2 | id: text().primaryKey().$defaultFn(() => createId()), | string | import { createId } from '@paralleldrive/cuid2'; |
text | id: text().primaryKey(), | string | — (caller supplies the ID) |
Every {{placeholder}} the templates use, with its derivation rule. Items marked simple sub are find-and-replace; items marked block require the agent to expand per the rules in the next section.
| Placeholder | Type | Source / derivation |
|---|---|---|
{{driver}} | simple sub | config.json:driver |
{{db_url_env}} | simple sub | config.json:db_url_env |
{{schema_dir}} | simple sub | config.json:schema_dir |
{{repository_dir}} | simple sub | config.json:repository_dir |
{{validators_dir}} | simple sub | config.json:validators_dir |
{{client_path}} | simple sub | config.json:client_path |
{{migrations_dir}} | simple sub | config.json:migrations_dir |
{{schema_index_import}} | simple sub | derived: client_path → relative path to {{schema_dir}}/index.ts (typically './schema') |
{{client_import}} | simple sub | derived: from a repository file, relative path back to client_path (typically '../client') |
{{schema_import}} | simple sub | derived: from a repository or validators file, relative path to the matching table file (typically '../schema/{{name}}') |
{{name}} | simple sub | per-table param — kebab-case singular (user) |
{{name_camel}} | simple sub | derived from name (user, orderItem) |
{{name_pascal}} | simple sub | derived from name (User, OrderItem) |
{{table_name}} | simple sub | per-table param, default = snake_case plural of name (users, order_items) |
{{pk}} | metadata | per-table param — serial-int | uuid | cuid2 | text (drives the rows below) |
{{pk_definition}} | block | the actual PK column line — see "PK Variants" table |
{{pk_field}} | simple sub | always id for the four PK variants this skill ships |
{{pk_ts_type}} | simple sub | number for serial-int, string for uuid / cuid2 / text |
{{pk_extra_imports}} | block | empty for serial-int / uuid / text; import { createId } from '@paralleldrive/cuid2'; for cuid2 |
{{relation_imports}} | block | for each table in relations[], emit import { {{relatedCamel}} } from './{{related-kebab}}'; |
{{domain_columns}} | block | the agent (or user) replaces this with the actual non-PK, non-timestamp columns for the entity. Leave as a TODO comment if the user hasn't provided them yet. |
{{timestamps_block}} | block | see expansion below — emit when timestamps=true, remove the line entirely when false |
{{soft_delete_block}} | block | see expansion below — emit in the columns block when soft_delete=true |
{{indexes}} | block | one index(...) line per foreign key column (and any composite (authorId, publishedAt)-style indexes the user wants) |
{{soft_delete_index}} | block | the partial index on deletedAt (see expansion below); emit only when soft_delete=true |
{{relations_body}} | block | one one(...) / many(...) line per related table; see expansion below |
{{insert_refinements}} | block | drizzle-zod refinement callbacks for the INSERT shape; leave the example comment if none provided |
{{update_refinements}} | block | same for the partial UPDATE shape |
{{exports}} | block | inside schema-index.ts.template: one export * from './{{name}}'; line per table; append on each new-table run |
If a template emits a {{placeholder}} not in this table, that's a bug — file it under gotchas.md.
The table.ts.template uses placeholder blocks for variable-shaped sections — the agent must expand them per parameters, not just text-substitute.
{{timestamps_block}} (when timestamps=true)createdAt: integer({ mode: 'timestamp_ms' })
.notNull()
.$defaultFn(() => new Date()),
updatedAt: integer({ mode: 'timestamp_ms' })
.notNull()
.$defaultFn(() => new Date())
.$onUpdateFn(() => new Date()),When timestamps=false, remove the line entirely (don't leave the comment marker).
{{soft_delete_block}} (when soft_delete=true)In the columns block:
deletedAt: integer({ mode: 'timestamp_ms' }),In the indexes block:
index('{{table_name}}_active_idx').on(table.deletedAt).where(sql`deleted_at IS NULL`),(Adjust the sql import accordingly.)
{{relations_body}} (when relations is non-empty)For each related table in relations[], the agent decides whether it's a one or many based on whether the FK lives on the current table (then it's one) or on the related table (then it's many):
// FK on current table — `one`:
parent: one(parents, { fields: [users.parentId], references: [parents.id] }),
// FK on related table — `many`:
posts: many(posts),If the user can't easily tell, default to one example of each and leave a comment.
{{indexes}} blockFor each FK column, emit:
index('{{table_name}}_{{column}}_idx').on(table.{{columnCamel}}),D1 has a different lifecycle: the client is constructed per request from env.DB (the binding), not as a module-level singleton. This skill doesn't ship a D1 client template — follow the official D1 + Drizzle guide for the wiring. The table.ts.template, repository.ts.template, and validators.ts.template are still usable with D1 — only the client module differs.
| File | Description |
|---|---|
| references/conventions.md | The 11 conventions enforced, with WHY and rule cross-references |
| gotchas.md | Edge cases discovered over time |
| metadata.json | Version + driver references |
| config.json | Project-level parameter store |
drizzle-sqlite — The library-reference rules these templates encode. The conventions doc cites specific rule filenames from it. Read it when you need to make an informed exception, debug a generated file, or scaffold something outside the templates' scope (custom migrations, complex queries, performance work).better-auth-scaffold — Scaffolds Better Auth on top of a Drizzle DB; can be run after this skill provides the client.© pproenca, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 14 other files (references, assets) in skills/.experimental/drizzle-sqlite-scaffold of pproenca/dot-skills.
Open the folder on GitHubat commit cf93c57
Drizzle Sqlite Scaffold next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Drizzle Sqlite Scaffold this skillpproenca/dot-skills | 214 | — | ~4k | Automated safety check: Pass | MIT | |
| Better Drizzlealmeidazs/better-drizzle | 347 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 | |
| Nestjs Drizzle Crud Generatorgiuseppe-trisciuoglio/developer-kit | 355 | — | ~1.3k | Automated safety check: Notes | MIT | |
| DB Schemazhe-qi/clhoria-template | 193 | — | ~620 | Automated safety check: Pass | MIT | |
| Sqlite Tursoericrisco/rsc-harness | 156 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Drizzle Migrationsbretzel-app/crumbs | 127 | 1 repos | ~2.6k | Automated safety check: Pass | MIT |
almeidazs/better-drizzle
Write, review, and debug code that uses better-drizzle, the typed repository layer over Drizzle ORM 1.x (better(db), client.users.findMany, paginate, cursor, upsertMany, relation include/connect…
giuseppe-trisciuoglio/developer-kit
Generates complete CRUD modules for NestJS applications with Drizzle ORM.
zhe-qi/clhoria-template
创建或修改数据库 Schema。当需要创建新表、修改表结构、定义字段、设置索引约束、或涉及 Drizzle ORM / drizzle-zod 操作时使用
ericrisco/rsc-harness
A skill your agent uses when deciding whether plain SQLite is enough, or wiring SQLite, Turso or libSQL for local-first, edge and embedded-replica apps — a local file DB, a remote Turso URL, or a…
bretzel-app/crumbs
Drizzle ORM schema management and SQLite migrations — adding tables, modifying columns, creating indexes, generating and running migrations, Drizzle query patterns.
rogerpadilla/uql
Write code with UQL (the uql-orm package), the TypeScript ORM whose queries are plain JSON objects, on PostgreSQL, MySQL, MariaDB, SQLite, CockroachDB, SQL Server, MongoDB, Turso, Neon, D1 and PGlite.
pproenca/dot-skills
Audio forensics and voice recovery guidelines for CSI-level audio analysis.
pproenca/dot-skills
Guided, scripted pipeline for running JSX/TSX/React codemods safely across large legacy codebases.
pproenca/dot-skills
Create well-structured RFCs and technical proposals for software projects.
pproenca/dot-skills
Developer-experience friction auditing and fixing — slow onboarding, repeated manual setup steps, missing bootstrap/reset/seed scripts, undiscoverable conventions.
pproenca/dot-skills
Turn a rough idea for a language into a complete, implementable specification — a DSL, query, config/data, template, or protocol language — by interviewing the author dimension by dimension until…
pproenca/dot-skills
Drafting Python Enhancement Proposals (PEPs) — proposing a Python language feature, a standard library change, an interoperability standard, or an informational/process document for the Python…
Works with
Categories
Scaffolds Drizzle ORM + SQLite boilerplate — a new drizzle.config.ts, a singleton client with the right pragmas, per-table schema files with explicit primary keys/indexed foreign…. Drizzle Sqlite Scaffold is an agent skill from pproenca/dot-skills.onConflictDoUpdate(), or drizzle-zod validators.
Drizzle Sqlite Scaffold fits situations like: even when the user doesnt say scaffold — phrases like add a table for X; set up Drizzle in this project; create a CRUD module for X; bootstrap the DB layer should pull this in.
Run `npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a claude-code`. Or copy the skill folder (skills/.experimental/drizzle-sqlite-scaffold in pproenca/dot-skills) into .claude/skills/drizzle-sqlite-scaffold in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a codex`. Or copy the skill folder (skills/.experimental/drizzle-sqlite-scaffold in pproenca/dot-skills) into .agents/skills/drizzle-sqlite-scaffold in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pproenca/dot-skills --skill drizzle-sqlite-scaffold -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/drizzle-sqlite-scaffold, .gemini/skills/drizzle-sqlite-scaffold, .github/skills/drizzle-sqlite-scaffold and .opencode/skills/drizzle-sqlite-scaffold in your project.
Going by SKILL.md and its folder, Drizzle Sqlite Scaffold needs the command-line tools its instructions call (npm and npx). Our summary lists: Node.js.
SKILL.md names 1 domain. As links in the text: orm.drizzle.team. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Drizzle Sqlite Scaffold is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Drizzle Sqlite Scaffold: Better Drizzle (almeidazs/better-drizzle, 347 stars), Nestjs Drizzle Crud Generator (giuseppe-trisciuoglio/developer-kit, 355 stars), DB Schema (zhe-qi/clhoria-template, 193 stars) and Sqlite Turso (ericrisco/rsc-harness, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pproenca (a GitHub user) maintains it in pproenca/dot-skills, which has 214 GitHub stars. The repository holds 182 skills in this directory. The repository was last updated on August 15, 2026.
Source: pproenca/dot-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.