Skip to content

Runtime and driver support

This matrix is the canonical evidence authority. Support labels are scoped to the exact database/driver/profile/runtime/capability tuple recorded here, including its revision and workflow evidence. A neighboring version or package installation is not certification. Final exact-SHA Runtime, Docs, and Release gates and explicit release authorization remain separate requirements.

  • Official — exact executable evidence covers the named database, driver, profile, runtime, and capability tuple.
  • Conditional — evidence applies only under the named condition.
  • Pending — the candidate has no fresh successful gate for the current implementation revision.
  • Historical — an older exact revision exercised the combination; it does not prove the current tree.
  • Compatible — public APIs may work, but no exact certified target is claimed.
  • Custom — user-provided QueryExecutor or ConnectionProvider.
  • Unsupported — the required SQLBraid capability is intentionally absent.
SQLBraid support targets (static/print summary)
TargetDatabaseDriverRuntimeSupport statusExact numericJSONTemporalTransactionStreaming
better-sqlite3-node-22-18-0sqlite better-sqlite3 bundled SQLitebetter-sqlite3@13.0.3node@22.18.0Compatiblestring · lossless · better-sqlite3-exact-string / string · unsupported · better-sqlite3-exact-stringTransactions: Guaranteed; Savepoints: Guaranteed
bun-sql-mariadbmariadb 11.8.9 communitybun-sql@1.3.14bun@1.3.14Officialstring · guarded · bun-sql-mariadb-1.3.14 / string · unsupported · bun-sql-mariadb-1.3.14Unsupported / GuaranteedGuarded (Native Date convenience does not preserve fractional precision or zone identity) / UnsupportedTransactions: Guaranteed; Savepoints: Guaranteed; Read-only transactions: Guarded (Only native isolation and read-only mappings verified for this backend); Read uncommitted isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Read committed isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Repeatable read isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Serializable isolation: Guarded (Only native isolation and read-only mappings verified for this backend)Unsupported
bun-sql-mysqlmysql 8.4.2 communitybun-sql@1.3.14bun@1.3.14Officialstring · guarded · bun-sql-mysql-1.3.14 / string · unsupported · bun-sql-mysql-1.3.14Guarded (Native parsed JSON is not a lossless numeric representation) / UnsupportedGuarded (Native Date convenience does not preserve fractional precision or zone identity) / UnsupportedTransactions: Guaranteed; Savepoints: Guaranteed; Read-only transactions: Guarded (Only native isolation and read-only mappings verified for this backend); Read uncommitted isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Read committed isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Repeatable read isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Serializable isolation: Guarded (Only native isolation and read-only mappings verified for this backend)Unsupported
bun-sql-postgrespostgres 16.4 alpinebun-sql@1.3.14bun@1.3.14Officialstring · guarded · bun-sql-postgres-1.3.14 / string · lossless · bun-sql-postgres-1.3.14Guarded (Native parsed JSON is not a lossless numeric representation) / UnsupportedGuarded (Native Date convenience does not preserve fractional precision or zone identity) / UnsupportedTransactions: Guaranteed; Savepoints: Guaranteed; Read-only transactions: Guarded (Only native isolation and read-only mappings verified for this backend); Read uncommitted isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Read committed isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Repeatable read isolation: Guarded (Only native isolation and read-only mappings verified for this backend); Serializable isolation: Guarded (Only native isolation and read-only mappings verified for this backend)Unsupported
bun-sql-sqlitesqlite 3.53.0 bun-embeddedbun-sql@1.3.14bun@1.3.14Officialstring · guarded · bun-sql-sqlite-1.3.14 / string · unsupported · bun-sql-sqlite-1.3.14Unsupported / GuaranteedUnsupported / GuaranteedTransactions: Guaranteed; Savepoints: Guaranteed; Read-only transactions: Unsupported; Read uncommitted isolation: Unsupported; Read committed isolation: Unsupported; Repeatable read isolation: Unsupported; Serializable isolation: GuaranteedUnsupported
d1-cloudflare-workerd-2026-07-30sqlite Cloudflare D1 managed SQLite (version unreported)cloudflare-d1@1.20260730.1workerd@1.20260730.1Compatiblestring · guarded · d1-guarded-safe-integer / string · unsupported · d1-guarded-safe-integerGuaranteedGuaranteedRead-only transactions: Unsupported; Read uncommitted isolation: Unsupported; Read committed isolation: Unsupported; Repeatable read isolation: Unsupported; Serializable isolation: Unsupported; Transactions: Unsupported; Savepoints: UnsupportedUnsupported
libsql-local-node-22-18-0sqlite libSQL local SQLitelibsql@0.18.0node@22.18.0Compatiblestring · lossless · libsql-exact-string / string · unsupported · libsql-exact-stringTransactions: Guaranteed; Savepoints: Guaranteed
mariadb-connector-node-11-8-9mariadb 11.8.9 communitymariadb@3.5.4node@22.18.0Officialstring · guarded · mariadb-lossless-text / string · guarded · mariadb-lossless-textGuaranteedGuaranteedRead-only transactions: Guaranteed; Read uncommitted isolation: Guaranteed; Read committed isolation: Guaranteed; Repeatable read isolation: Guaranteed; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
mssql-tedious-developer-node-2022-cu18mssql 2022-CU18 Developertedious@20.0.0node@22.18.0Officialstring · guarded · mssql-tedious / string · unsupported · mssql-tediousGuaranteedGuarded (SQL Server temporal text cast path)Read-only transactions: Unsupported; Read uncommitted isolation: Guaranteed; Read committed isolation: Guaranteed; Repeatable read isolation: Guaranteed; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
mysql-mysql2-deno-2-9-3mysql 8.4.2 communitymysql2@3.24.4deno@2.9.3Officialstring · guarded · mysql2-lossless-text / string · lossless · mysql2-lossless-textGuaranteedGuaranteedRead-only transactions: Guaranteed; Read uncommitted isolation: Guaranteed; Read committed isolation: Guaranteed; Repeatable read isolation: Guaranteed; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
mysql-mysql2-node-8-4-2mysql 8.4.2 communitymysql2@3.24.4node@22.18.0Officialstring · guarded · mysql2-lossless-text / string · lossless · mysql2-lossless-textGuaranteedGuaranteedRead-only transactions: Guaranteed; Read uncommitted isolation: Guaranteed; Read committed isolation: Guaranteed; Repeatable read isolation: Guaranteed; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
oracle-oracledb-thin-node-23-9oracle 23.9 Freenode-oracledb@7.0.1node@22.18.0Officialstring · unsupported · oracle-thin / string · lossless · oracle-thinGuaranteed / Guarded (Oracle JSON_SERIALIZE text path)Guarded (Oracle Date millisecond precision) / Guarded (Oracle temporal text cast path)Read-only transactions: Guaranteed; Read uncommitted isolation: Unsupported; Read committed isolation: Guaranteed; Repeatable read isolation: Unsupported; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
postgres-currentpostgres 18.6 alpinepg@8.23.0node@22.18.0Officialstring · lossless · pg-lossless-text / string · lossless · pg-lossless-textGuaranteedGuaranteed
postgres-pg-deno-2-9-3postgres 16.4 alpinepg@8.23.0deno@2.9.3Officialstring · lossless · pg-lossless-text / string · lossless · pg-lossless-textGuaranteedGuaranteedRead-only transactions: Guaranteed; Read uncommitted isolation: Guarded (PostgreSQL READ UNCOMMITTED uses READ COMMITTED semantics); Read committed isolation: Guaranteed; Repeatable read isolation: Guaranteed; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
postgres-pg-node-16-4postgres 16.4 alpinepg@8.23.0node@22.18.0Officialstring · lossless · pg-lossless-text / string · lossless · pg-lossless-textGuaranteedGuaranteedRead-only transactions: Guaranteed; Read uncommitted isolation: Guarded (PostgreSQL READ UNCOMMITTED uses READ COMMITTED semantics); Read committed isolation: Guaranteed; Repeatable read isolation: Guaranteed; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
sqlite-node-sqlite-deno-2-9-3sqlite 3.53.2 Deno bundled SQLitenode-sqlite@2.9.3deno@2.9.3Officialstring · lossless · sqlite-exact-string / string · unsupported · sqlite-exact-stringGuaranteedGuaranteedRead-only transactions: Unsupported; Read uncommitted isolation: Unsupported; Read committed isolation: Unsupported; Repeatable read isolation: Unsupported; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
sqlite-wasm-browser-3-53-4sqlite 3.53.4 official SQLite WASM OO1sqlite-wasm@3.53.4-build1browser@153.0.8010.12Officialstring · lossless · sqlite-wasm-exact-string / string · unsupported · sqlite-wasm-exact-stringGuaranteedGuaranteedRead-only transactions: Unsupported; Read uncommitted isolation: Unsupported; Read committed isolation: Unsupported; Repeatable read isolation: Unsupported; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed
sqlite-node-sqlite-node-22-18-0sqlite 3.50.2 Node bundled SQLitenode-sqlite@22.18.0node@22.18.0Officialstring · lossless · sqlite-exact-string / string · unsupported · sqlite-exact-stringGuaranteedGuaranteedRead-only transactions: Unsupported; Read uncommitted isolation: Unsupported; Read committed isolation: Unsupported; Repeatable read isolation: Unsupported; Serializable isolation: Guaranteed; Transactions: Guaranteed; Savepoints: GuaranteedGuaranteed

The matrix is generated from machine-readable support targets and capability conditions. It is the evidence rendering, not a promise that every adapter has every operation.

Dialect, driver, runtime, host, database version, representation profile, and capability are separate axes. The canonical capability identifiers are:

sql.native-transparency sql.generated-structure
result.rows result.command
result.multiple-sets result.standard-schema
numeric.exact-integer numeric.exact-decimal
numeric.approximate-float numeric.approximate-special
numeric.bind-exact numeric.aggregate
numeric.command-metadata numeric.special-values
numeric.scale-greater-than-precision
numeric.negative-scale
data.json-parsed data.json-lossless-text
data.binary data.uuid
data.temporal-native data.temporal-lossless
data.timezone
metadata.command-safe
dml.insert-returning dml.update-returning
dml.delete-returning dml.merge-returning
dml.upsert-returning
session.pinned
statement.prepare statement.cancel
statement.stream statement.bulk
execution.bulk-fidelity
transaction transaction.savepoint
transaction.read-only
transaction.isolation.read-uncommitted
transaction.isolation.read-committed
transaction.isolation.repeatable-read
transaction.isolation.serializable
routine.call routine.out
routine.inout routine.result-sets
routine.out-cursor routine.return-value
metadata.identity metadata.generated
metadata.routines metadata.types

Do not add obsolete aliases such as execution.prepared, execution.stream, routine.resultsets, or routine.return-status.

statementBinding.describe() and describeBulk() validate the logical RenderedStatement/RenderedBulk before lease acquisition. Providers and leases expose the same immutable binding adapter identity. Prepared shape means logical result kind, canonical segments, dialect, and ordered hint/direction/ output metadata; physical placeholder spelling never changes shape.

db.session(callback) pins one physical provider lease and nested sessions reuse it. db.tx(callback) uses that lease, or acquires one root lease; nested transactions use savepoints when advertised. Explicit transaction options use only the fixed isolation literals read-uncommitted, read-committed, repeatable-read, and serializable, plus readOnly. Malformed runtime options fail before acquisition with TypeError / BRAID_TX_OPTIONS_INVALID; a valid but unsupported option uses UnsupportedFeatureError / BRAID_TX_OPTION_UNSUPPORTED; nested explicit options use BRAID_TX_OPTIONS_NESTED.

An already-aborted AbortSignal preserves its reason. An active signal needs a real adapter cancellation path; otherwise the operation rejects before I/O with UnsupportedFeatureError, feature statement.cancel, and BRAID_CANCEL_UNSUPPORTED. An unavailable session or transaction primitive uses BRAID_SESSION_UNSUPPORTED or BRAID_TX_UNSUPPORTED respectively. Oracle’s guarded oracle.connection-break condition is cooperative rather than a prompt or timeout guarantee: its documented DBMS_SESSION.SLEEP raw probe can reject with ORA-01013 only when the sleep completes, and the adapter holds the physical lease through settlement.

First-party roots cover PostgreSQL, MySQL, MariaDB, SQLite, Oracle, and SQL Server. Driver subpaths own the protocol and cleanup behavior: pg, mysql2, MariaDB Connector/Node.js, node:sqlite, SQLite WASM, D1, node-oracledb Thin, and Tedious. Bun uses one SQL adapter family with an explicit user-selected dialect: "postgres" | "mysql" | "mariadb" | "sqlite"; it does not infer SQL semantics from the connection. Bun 1.3.14 has active cancellation unsupported (BRAID_CANCEL_UNSUPPORTED) and stream/routine carriers unsupported. Its result.rows/result.command metadata is guarded by bun-sql.result-kind-metadata; for MySQL/MariaDB, empty SELECT and zero-affected DML/DDL fail with BRAID_RESULT_KIND_AMBIGUOUS only after execution, because command is null and affectedRows is zero. Deno reuses existing first-party adapters where their public driver API works; it does not create a Deno dialect.

Missing stream, routine, output, hint, bulk, transaction, or cancellation support must be explicit UnsupportedFeatureError failures. SQLBraid does not paginate to fake streaming, guess routine carriers, ignore hints, create hidden transactions, or promote an unverified tuple. D1’s managed SQLite version is unreported; a local Worker binding check is not a version certification.

Exact numeric, JSON/temporal, and container behavior are independent evidence boundaries. Exact database integers and decimals are canonical strings; approximate IEEE values are numbers. Profile and codegen descriptors must match. Metadata is positive open-world evidence: missing facts do not prove SQL invalid. Bun 1.3.14 uses { bigint: true } for PostgreSQL/MySQL/MariaDB and { safeIntegers: true } for SQLite. Because it exposes no column metadata, integral and integral-approximate Number rows are rejected as ambiguous; PostgreSQL decimals are strings. MySQL/MariaDB DECIMAL and binary outputs share an untyped byte carrier and reject; author CAST(... AS CHAR) or HEX(...). SQLite native decimal is unsupported. MariaDB/SQLite JSON is text, while PostgreSQL/MySQL native JSON can round nested numbers. Bun SQLite’s result kinds are guarded by bun-sql.sqlite-result-parser: mixed-quote SQL literals can be misclassified by Bun; bind JSON values instead. SQLBraid does not rewrite SQL.

A support addition needs an exact version/profile tuple, executable real-engine coverage, machine-readable target conditions, and a fresh clean revision. The release decision also requires translation freshness, package/export checks, and an immutable release dry-run. Historical links and prose alone cannot promote a label. No npm/tag/Pages publication follows from this page.