# Kysely v0.30.0-beta.1 — 0.30.0-beta.1 - Product: Kysely (https://whatsnew.fyi/product/kysely) - Vendor: Kysely - Date: 2026-07-26 - Version: v0.30.0-beta.1 - Original notes: https://github.com/kysely-org/kysely/releases/tag/v0.30.0-beta.1 - Permalink: https://whatsnew.fyi/product/kysely/releases/v0.30.0-beta.1 - Labels: Pre-release What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **added** — Add transactionMode property to Migrator accepting 'per-run', 'per-migration', or 'none' to control transaction behavior across migrations - **added** — Add defineMigration helper function to simplify migration writing and contract requirements - **added** — Add migrateTo(name, { direction: 'Up' | 'Down' }) method to Migrator to enforce migration direction - **added** — Support mysql2/promise in MysqlDialect in addition to the callback-based mysql2 import - **added** — Deny passing BLOB-like columns to SQLite JSON helpers with compile-time type errors - **deprecated** — Deprecate disableTransactions option in favor of transactionMode property - **changed** — Per-migration transaction configuration now allows each migration to specify whether it runs in its own transaction via config: { transaction: false } Hey 👋 0.30 season is upon us. `pnpm i kysely@next` and get a sneak peak into the future! We've got a new `transactionMode: 'per-run' | 'per-migration' | 'none'` property you can pass to `Migrator` or it's methods. - `'per-run'` is the classic behavior you're used to where `kysely` wrap the entire run in a transaction when your dialect supports transactional DDL. - `'per-migration'` enables each migration to pick whether it runs in its own transaction or not. Just expose `config: { transaction: false }` from the module, right next to the `up`/`down` functions. - `'none'` means no transactions are used, which is similar to the now deprecated `disableTransactions: true`. ```ts import * as fs from 'node:fs/promises' import * as path from 'node:path' import { FileMigrationProvider, Migrator } from 'kysely/migration' const migrator = new Migrator({ db, provider: new FileMigrationProvider({ fs, migrationFolder: path.join(import.meta.dirname, 'migrations'), }), transactionMode: 'per-migration', // <------------------------------- }) await migrator.migrateToLatest() ``` We've got a new `defineMigration` helper function that you can use to easily write your migrations and meet the contract requirements: ```ts import { defineMigration } from 'kysely/migration' export default defineMigration({ up: async (db) => { // ... }, config: { transaction: false }, // <-------------------- }) ``` You can now use `mysql2/promise`, where in the past it would hang forever since we only supported the callback style of `mysql2` root import. ##### 🚀 Features * feat(migrator): add `migrateTo(name, { direction: 'Up' | 'Down' })` to enforce direction. by @igalklebanov in https://github.com/kysely-org/kysely/pull/1957 ###### PostgreSQL 🐘 / MSSQL 🥅 * feat: Per-migration transaction configuration by @lourd & @igalklebanov in https://github.com/kysely-org/kysely/pull/1671 ###### MySQL 🐬 * feat(mysql): support both `mysql2` and `mysql2/promise` in `MysqlDialect`. by @igalklebanov in https://github.com/kysely-org/kysely/pull/1958 ###### SQLite 📘 * feat: deny passing BLOB-like columns to SQLite JSON helpers by @hwisu & @igalklebanov in https://github.com/kysely-org/kysely/pull/1698 ##### 🐞 Bugfixes ##### 📖 Documentation ##### 📦 CICD & Tooling ##### ⚠️ Breaking Changes * `disableTransactions` is deprecated. Use the new `transactionMode: 'none'`, or `transactionMode: 'per-migration'` with combination of `config: { transaction: false }`. ###### SQLite 📘 * Trying to pass records with `BLOB` columns in JSON helpers emits compile-time errors - e.g. ```ts KyselyTypeError<'SQLite does not support passing `BLOB` values to `json_object`. Cast to `TEXT`.'> ``` ##### 🐤 New Contributors * @lourd made their first contribution in https://github.com/kysely-org/kysely/pull/1671 ##### What's Changed **Full Changelog**: https://github.com/kysely-org/kysely/compare/4ba0bd495a4cbe11d8d58ef02537586dc4d56532...v0.30.0-beta.1