v1.0.0-rc.4
Pre-release
drizzle-team/drizzle-ormv1.0.0-rc.4Jun 27, 2026by AndriiSherman
AI Summary
A comprehensive release focusing on dialect-specific improvements, driver support expansion, and programmatic tooling. It introduces async/effect versions for SQLite and MySQL, adds a new programmatic SDK for Drizzle Kit, and supports multiple new database drivers.
Key Highlights
- Split SQLite into `async`, `effect`, and `sync` versions with reworked sessions
- Split MySQL into `async` and `effect` versions with a new codec system
- Added programmatic SDK (`drizzle-kit/cli`) and JSON output modes for CLI tools
- Added support for multiple new drivers including `@tursodatabase/serverless`, `@tursodatabase/sync`, and various `@effect/sql-*` drivers
- Improved `sql` operator type safety with `.nullable()` method and preserved nullability
Breaking Changes
- Removed `SQLiteSyncDialect` and `SQLiteAsyncDialect` (moved to `sqlite-core/async/session`)
- Removed `RQBv1` from `sqlite`, `mysql`, and `postgres` dialects (removed `._query`)
- Removed `mapResult` method from `PreparedQuery` interface and raw queries
- Removed `TSchema` and `TFullSchema` arguments from `sqlite` entities' generics
New Features
- Added `drizzle-kit mcp` for Model Context Protocol server support
- Added Agent skills (`drizzle-kit skills`) for AI coding assistants
- Added support for nested transactions in `@tursodatabase/database`
- Added filesystem-less migrator for `@tursodatabase/database-wasm`
- Added `@tursodatabase/serverless` and `@tursodatabase/sync` drivers
- Added `@effect/sql-*` driver support (PGLite, SQLite-node, SQLite-bun, SQLite-wasm, libsql, D1, MySQL2)
Full Release Notes
# v1.0.0-rc.4
- Fixed broken `View` types when using `Subquery` in selection
- Fixed custom types' JSON field API not being applied when column is used as a decoder on `SQL` fields
- Fixed codecs not getting applied to `SQL` field when `.mapWith(column)` is set (fixes [#5724](https://github.com/drizzle-team/drizzle-orm/issues/5724))
- Fixed `Subquery` fields' columns' codecs not being applied to subquery
- Fixed broken in `rc.3` `db.select` in `bun-sql/pg` driver (fixes [#5779](https://github.com/drizzle-team/drizzle-orm/issues/5779))
- Updated SQLite `db.$count` builder to include `.sync()` executor for sync drivers
- Removed RQBv1 from `sqlite`, removed RQBv1 `TSchema`, `TFullSchema` arguments from `sqlite` entities' generics
- Fixed instances of `sqlite` query errors not being wrapped in `DrizzleQueryError` (`db.batch()` excluded due to api incompatibility)
- Fixed type error on `CockroachArrayBuilder` constructor caused by referencing internal field's type
- Removed `mapResult` method from `PreparedQuery` interface, removed `mapResult`, `mapBatchResult` from `pg` and `sqlite` raw queries
- Fixed wrong `bun-sqlite` run result type
- Switched `sqlite` RQBv2 to array mode
- Enabled optimized default query mappers for `sqlite`
- Reworked `sqlite` sessions: replaced per-driver `PreparedQuery` instances with executors passed via sessions, similar to current `postgresql` and `mysql` implementations, moved `useJitMappers` flag handling to dialect
- Fixed missing `string` overload on `.comment(sqlCommenterComment)` in query builders
- Supported nested transactions in `@tursodatabase/database`, `@tursodatabase/database-wasm`
- Added filesytem-less migrator for `@tursodatabase/database-wasm` at `drizzle-orm/tursodatbase/wasm-migrator`
- Split SQLite into `async`, `effect` versions (`sync` remains subtype of `async`)
- Removed `SQLiteSyncDialect`, `SQLiteAsyncDialect`, moved generic SQLite `async`\\`sync` migrators to `sqlite-core/async/session` as `migrateSync`, `migrateAsync`
- Fixed `sqlite` cache using same cache entry for different execute methods
- Moved `EffectDrizzlePgConfig` to `drizzle-orm/pg-core/effect/utils`
- Made `cache` field in `EffectCacheShape` optional
- Split `mysql` into `async`, `effect` versions
- Added codec system to `mysql`
- Fixed `mysql` `float` rounding to either 6 digits or double
- Fixed `mysql` cropping `.000` from `timestamp(3)`
- Moved subquery mapper selection from `dialect.buildSelection` to `orderSelectedFields`;
- [`PG`, `MySQL`] Improved codec system in set operators:
- When different db types are crossed in a union, db casts them to type it deems as closest compatible to all types involved
- If columns with codecs are set on both sides of union - codec of combined type will apply
- If only the left-hand side of union has field with codec - left hand side's codec is preserved
- If left-hand side field is devoid of codecs - field is not processed by codecs;
- Set operator queries are switched from `[QUERY 1] UNION [QUERY 2]` to `SELECT ... FROM ([QUERY 1] UNION [QUERY 2]) "drizzle_union"` so cast codecs would apply after union's type mutation
- Retrieved data of union with different types still may be lossy due to db's own conversion
- Bump required `effect` package versions to `4.0.0-beta.83`
- Fixed `sql.param` passing `Placeholder` as expected input value to encoder function instead of `Placeholder`'s value type
- Fixed unguarded `Buffer` reference in `drizzle-orm/effect-schema` that caused error in environments without `Buffer`
- Fixed `sqlite` `blob` column runtime-type default mode mismatch (fixes [#1064](https://github.com/drizzle-team/drizzle-orm/issues/1064))
- Improved typed `sql` operator - preserved nullability, inferred initial data type to `mapWith`callback argument, added `.nullable()` method to modify output type with `| null` (fixes [#571](https://github.com/drizzle-team/drizzle-orm/issues/571)):
```typescript
// Before:
sql<Type | null>`...`.mapWith((v: any) => String(v)) // Output type: string
// After:
sql<Type | null>`...`.mapWith((v: Type) => String(v)) // Output type: string | null
// `.nullable()` method:
sql`...`.mapWith((v: unknown) => new Type(v)).nullable() // Output type: Type | null
```
- Fixed `generatedByDefaultAsIdentity` columns not being filtered from inserts in runtime in `postgres` dialect
- Improved `db.insert(table).select(...)`: removed column order match requirement, allowed skipping selection for columns with defaults or nullability (fixes [#3608](https://github.com/drizzle-team/drizzle-orm/issues/3608))
## Drivers
- Updated `@tursodatabase/database`, `@tursodatabase/database-wasm` to v0.6.0, updated session internals for asynchronous prepare on driver side
- Added `@tursodatabase/serverless` driver support
- Added `@tursodatabase/sync` driver support
- Added `@effect/sql-pglite` driver support
- Added `@effect/sql-sqlite-node` driver support
- Added `@effect/sql-sqlite-bun` driver support
- Added `@effect/sql-sqlite-do` driver support
- Added `@effect/sql-sqlite-wasm` driver support
- Added `@effect/sql-libsql` driver support
- Added `@effect/sql-d1` driver support
- Added `@effect/sql-mysql2` driver support
- Fixed `@effect/sql-pg` driver returning object response instead of raw response on `db.execute`
- `pg-proxy`: added dialect config to optional dialect creator callback
- Fixed postgres pull from failing for non-admin roles (fixes [#5568](https://github.com/drizzle-team/drizzle-orm/issues/5568))
- Fixed: [[BUG]: [mssql] INSERT includes generatedAlwaysAs (computed) columns in the column list — SQL Server error 271
](https://github.com/drizzle-team/drizzle-orm/issues/5881)
## Drizzle Kit
### Machine-readable output & programmatic SDK
- Added an `--output text|json` mode to `generate`, `push`, `pull`, `up`, `export`, and `check`. In `json` mode each command emits a typed JSON envelope (status, errors, payloads) for programmatic and agent consumption (see [OUTPUT_MODES.md](https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.4/drizzle-kit/OUTPUT_MODES.md), [JSON_CONTRACT.md](https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.4/drizzle-kit/JSON_CONTRACT.md))
- Shipped a public programmatic SDK at the `drizzle-kit/cli` subpath exposing `generate()`, `push()`, `pull()`, `up()`, `exportSql()`, and `check()` with typed options and results matching the CLI JSON contract (see [SDK.md](https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.4/drizzle-kit/SDK.md))
- Auto-detected non-interactive mode (`--output json`, or `--output text` with a non-TTY stdin) no longer renders interactive prompts. Instead, unresolved renames and destructive changes (`confirm_data_loss`) are surfaced as a `missing_hints` envelope (or a missing-decisions report under `text`) and resolved by supplying a structured `hints` array up front via `--hints` / `--hints-file` (see [HINTS.md](https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.4/drizzle-kit/HINTS.md))
### MCP server
- Added `drizzle-kit mcp`, a Model Context Protocol server over stdio that exposes the migration lifecycle (`generate`, `push`, `check`, `export`, `up`, `pull`) as MCP tools for any MCP-capable AI agent (see [MCP.md](https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.4/drizzle-kit/MCP.md))
### Agent skills
- Added `drizzle-kit skills`, which installs Drizzle Kit's bundled [Agent Skills](https://skills.sh) into your project for AI coding assistants. Ships 8 skills: `drizzle`, `drizzle-generate`, `drizzle-hints`, `drizzle-migrations`, `drizzle-output-modes`, `drizzle-pull`, `drizzle-push`, and `drizzle-responses-and-errors` (see [`drizzle-kit/skills`](https://github.com/drizzle-team/drizzle-orm/blob/v1.0.0-rc.4/drizzle-kit/skills) folder)