NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Go modules · #697 by repository stars
Last release today
07 Oct 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 56 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
315 releases · first in 2020
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[ #986 ]: sq driver ls with -j / -y now reports an is_embedded_sql field for each driver, true for the in-process SQL drivers (SQLite, DuckDB) and fal
sq driver ls with -j / -y now reports an is_embedded_sql field for each driver, true for the in-process SQL drivers (SQLite, DuckDB) and false for the networked engines (including rqlite, which is SQLite-backed but reached over HTTP) and non-SQL drivers.sq with the behavior of encoding/json since Go 1.22. Both spellings decode to the same string, so anything that parses sq's JSON is unaffected, and only output containing one of those two characters changes at all. Stored fixtures, golden files or checksums that compare sq's JSON byte-for-byte may need regenerating.database is locked when large tables were copied into the temporary join database.we"ird table created from a CSV header), completing the identifier-quoting fix [#821] applied to SQLite and rqlite.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
[#866], [#868]: Ingesting document sources (CSV, JSON, Excel, etc.) is now much faster, especially on Windows and other slow filesystems.
FORCE_COLOR handling now follows the force-color.org
conventions.sq inspect on an Oracle source now handles
materialized views correctly.Nothing published for this version
--reveal : show secret values in output; supersedes the now-deprecated --no-redact .
sq.yml: source locations accept ${scheme:path} placeholders that are resolved at connect time, and secrets are consistently redacted in output unless you opt in to disclosure.
${keyring:3d28xd3jcr}${env:DB_PASSWORD}${file:/run/secrets/db_pw}${op://Private/sakila/dsn}sq config export dumps the active config to YAML, primarily for backups. With --expand, placeholders are resolved in-line, making the export a self-contained (but plaintext) snapshot.sq inspect gained svg-erd and png-erd output formats that render the schema ERD directly to .svg or .png image files.
format.decimal option and --format.decimal flag (string | number) controlling whether decimal values render as quoted strings or bare numbers in JSON and YAML output.format.decimal=number to restore bare numbers.avg() now returns a consistent float on every SQL driver. Breaking for Postgres and MySQL, which previously returned a lossless decimal.sum() over an integer or decimal column now returns a consistent decimal on every SQL driver, rendered in JSON as a quoted string (e.g. "20100").sq sql gained a --readonly (alias --ro) flag.redact config option is renamed to secrets.reveal with inverted polarity; existing configs are migrated automatically (after a backup).sq inspect -f mermaid-erd now syntax-colors its erDiagram source when writing to a terminal.sq tbl copy now copies the source table's indexes and triggers to the destination.yaml output: a numeric value from an untyped column is now colorized, and a BLOB value is now encoded as base64.NUMBER with a fractional value no longer fails with a scan error; such numbers are now typed as decimal.avg() over an integer column no longer performs integer division and truncates the result.sq add shell completion now supports ClickHouse and Oracle.sq inspect on SQLite sources no longer executes pragmas that write to the database or scan the whole file, which could make each inspect painfully slow.sqlite3:///path/to/db?mode=ro).CREATE TABLE DDL rewriting that backs table copy and column-kind alteration on the sqlite3 driver.sq db dump cluster no longer writes the database password to the sq log file.sq cache clear @src now clears every cache dir belonging to the source, including stale dirs left over from a changed location, schema, or ingest options.sq add and sq mv no longer permit a source handle nested below an existing source's handle.Full Changelog: v0.53.0...v0.54.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Case-sensitive literal substring matchers contains , startswith , and endswith .
SLQ string-matching functions. See Query Guide for per-driver behavior and SQLite ASCII-CI quirks.
contains, startswith, and endswith.icontains, istartswith, and iendswith.like and ilike: % and _ are wildcards.sq inspect now has --markdown and --html output formats that generate schema documents with embedded entity relationship diagrams.
sq inspect also gained a mermaid-erd output format (--format=mermaid-erd) that emits the bare Mermaid entity-relationship diagram source for source and table schema inspection, with no surrounding document.SLQ syntax-error reporting in both text and JSON error formats. You can set the new config option error.format.text.verbose to false if you prefer the previous (less-verbose) text error format.sq inspect now omits an index whose key positions are all expressions (previously MySQL and SQLite reported such an index with an empty columns list).sq inspect now preserves the true key arity and position of indexes that contain functional/expression keys. A key like lower(b) in CREATE INDEX ix ON t (a, lower(b), c) is reported as an empty-string entry in the index's columns, so it is no longer indistinguishable from a real two-column (a, c). Applies to SQLite, DuckDB, MySQL, and Postgres.INTERVAL values now render in DuckDB's native, round-trippable text form (e.g. 1 year 2 months 3 days 04:05:06.789) instead of the previous ad-hoc Go-style μs string.sq inspect of a SQL Server source no longer returns tables from schemas other than the source's current schema.unsupported Scan, storing driver.Value type string into type *time.Time when a DATETIME/DATE column stores text that mattn/go-sqlite3 doesn't natively convert — most commonly Rails' microsecond-precision datetime(6) columns. sq now re-runs the same timestamp parse and falls back to the raw text only when the value is genuinely unparseable.sq <command> --format=FORMAT (e.g. sq inspect --format=xlsx) no longer fails with a spurious "diff does not support output format" error. The format check for sq diff was being applied to every command's --format flag; it's now scoped to sq diff itself.--insert into a MySQL or Postgres table no longer fails when a same-named table exists in another schema.@handle.table:alias form on the left of a pipeline (e.g. @sakila.actor:a | .a.first_name) no longer silently collapses to SELECT * FROM <table>..actor | .first_name:count, @sakila.actor:count, or join(.film_actor:count, ...)) now applies that alias instead of silently dropping it. An alias that is an argument reference (e.g. :$x) is now rejected with a clear error rather than silently discarded.join no longer fails when the participating sources contain tables with the same name (e.g. @src1.actor | join(@src2.actor, .actor_id)).Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
🐥🦆 #437 : Beta DuckDB support. The duck driver supports most of the DuckDB type system; and includes a standard set of in-tree extensions ( json , par
duckjson,parquet, icu, fts, httpfs, excel, inet, autocomplete,tpch, tpcds). See thesq inspect now reportsfk.outgoing / fk.incoming per table), uniquesq now features a--render-sql flag, whichSLQ input) that would be executed against--format with:
text or raw: the rendered SQL is printed.json or yaml: a structured payload is printed containing the--arg, the# $ sq --render-sql --yaml '@sakila/pg.actor | join(@sakila/my.film_actor, .actor_id) | .first_name, .last_name, .film_id | .[0:5]'
slq: "@sakila/pg.actor | join(@sakila/my.film_actor, .actor_id) | .first_name, .last_name, .film_id | .[0:5]"
sql: SELECT "first_name", "last_name", "film_id" FROM "actor" INNER JOIN "film_actor" ON "actor"."actor_id" = "film_actor"."actor_id" LIMIT 5 OFFSET 0
dialect: sqlite3
sources:
target: "@join_xukcx3ye"
inputs:
- "@sakila/pg"
- "@sakila/my"libsq.SLQ2SQL now returns a structured*libsq.RenderResult type instead of string. Any libsq librarysq CLI is unaffected.Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →