github.com/neilotoole/sq
v0.54.1
#591 most downloaded on Go modules
neilotoole/sq
What this package is like to depend on
Last release 8 days ago
16 Aug 2026
Release timing varies
gaps range from 9 days to 2 months
Most releases are documented
notes for 72 of 109 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
271 releases · first in 2020
97 releases in the last 12 months
see the full history below
Release timeline
271 releases · Aug 2020 to Aug 2026Releases
latest 60 of 271-
v0.54.2-0.20260816071251-46d62c02103e16 Aug 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260814073110-98d6a8e6f74d14 Aug 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260812073056-a02cf6b515ee12 Aug 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260808230440-51fd33131e8d08 Aug 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260806225413-edf7644d14ce06 Aug 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260801230506-df09191a649a01 Aug 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260730074833-6e6edf605a3b30 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260726074944-6a185a5e480c26 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260725073859-f60211e3ed1c25 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260724074805-05bfe16a792624 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260721074815-b0892d57d27d21 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260720234614-b150f017780720 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260718231848-2dd559de6d6d18 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260716212649-a985b89dd84b16 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260716074133-4ef550405f3d16 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260713085237-cc435b78199413 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260709080938-1247ebe4122009 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260705080026-0147dfcd85c505 Jul 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260628205433-96dc52f56c4028 Jun 2026 pre-releaseNothing published for this version
-
v0.54.2-0.20260623160417-05227673eb1023 Jun 2026 pre-releaseNothing published for this version
-
v0.54.123 Jun 2026Release notes
Open source →Fixed
- [#866], [#868]: Ingesting document sources (CSV, JSON, Excel, etc.) is now much faster, especially on Windows and other slow filesystems.
- [#865]: Fixed shell-completion regressions.
- [#863]:
FORCE_COLORhandling now follows the force-color.org conventions. - [#919]:
sq inspecton an Oracle source now handles materialized views correctly. - Various other bug fixes: [#859], [#902], [#911], [#915], [#916], [#918], [#920], [#923], [#926].
-
v0.54.1-0.20260619150812-d78fa89cb63e19 Jun 2026 pre-releaseNothing published for this version
-
v0.54.019 Jun 2026Release notes
Open source →Added
- 🐥 #444: New driver for rqlite, the lightweight distributed database built on SQLite.
- #441: Revamped secrets handling. Source credentials no longer need to live as plaintext in
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.- #714: Supported placeholder resolvers:
- OS keychain:
${keyring:3d28xd3jcr} - Environment variables:
${env:DB_PASSWORD} - File contents:
${file:/run/secrets/db_pw} - 1Password:
${op://Private/sakila/dsn}
- OS keychain:
- #717, #729: New global flags:
- #716:
sq config exportdumps the active config to YAML, primarily for backups. With--expand, placeholders are resolved in-line, making the export a self-contained (but plaintext) snapshot.
- #714: Supported placeholder resolvers:
- #660:
sq inspectgainedsvg-erdandpng-erdoutput formats that render the schema ERD directly to.svgor.pngimage files.- Uses an embedded Graphviz engine (via goccy/go-graphviz): the generated images are not the prettiest, but it's a start.
- #846: New
format.decimaloption and--format.decimalflag (string|number) controlling whether decimal values render as quoted strings or bare numbers in JSON and YAML output.
Changed
- #851: In colored output, structural punctuation is now rendered muted rather than bold, so values stand out.
- #846: YAML now renders decimal values as quoted strings by default, matching JSON. Set
format.decimal=numberto restore bare numbers. - ☢️ #594:
avg()now returns a consistentfloaton every SQL driver. Breaking for Postgres and MySQL, which previously returned a lossless decimal. - ☢️ #839, #853:
sum()over an integer or decimal column now returns a consistentdecimalon every SQL driver, rendered in JSON as a quoted string (e.g."20100"). - #610: The DuckDB driver now opens sources read-only for non-writing commands, and
sq sqlgained a--readonly(alias--ro) flag. - ☢️ #728, #782: The
redactconfig option is renamed tosecrets.revealwith inverted polarity; existing configs are migrated automatically (after a backup). - #692:
sq inspect -f mermaid-erdnow syntax-colors itserDiagramsource when writing to a terminal. - #758: For SQLite (and rqlite) sources,
sq tbl copynow copies the source table's indexes and triggers to the destination.
Fixed
- #851: Two fixes to
yamloutput: a numeric value from an untyped column is now colorized, and aBLOBvalue is now encoded as base64. - #844: On Oracle, a query whose result is a computed
NUMBERwith a fractional value no longer fails with a scan error; such numbers are now typed asdecimal. - #594: On SQL Server,
avg()over an integer column no longer performs integer division and truncates the result. - #741, #743:
sq addshell completion now supports ClickHouse and Oracle. - #699:
sq inspecton SQLite sources no longer executes pragmas that write to the database or scan the whole file, which could make each inspect painfully slow. - #720: Fixed SQLite driver path handling for source locations with connection params (e.g.
sqlite3:///path/to/db?mode=ro). - #750, #752, #757, #759: A batch of fixes to the
CREATE TABLEDDL rewriting that backs table copy and column-kind alteration on the sqlite3 driver. - #783:
sq db dump clusterno longer writes the database password to the sq log file. - #783:
sq cache clear @srcnow clears every cache dir belonging to the source, including stale dirs left over from a changed location, schema, or ingest options. - #783:
sq addandsq mvno longer permit a source handle nested below an existing source's handle. - #821: On the SQLite and rqlite drivers, renaming a table, adding a column, or truncating it no longer fails when a table or column name contains a double quote.
- #834: On the ClickHouse driver, a result-column name containing a dot is no longer truncated to the segment after the last dot.
Full Changelog: v0.53.0...v0.54.0
Release notes
Open source →Added
- 🐥 [#444]: New driver for rqlite, the lightweight distributed database built on SQLite.
- [#441]: Revamped secrets handling. Source credentials no
longer need to live as plaintext in
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.- [#714]: Supported placeholder resolvers:
- OS keychain:
${keyring:3d28xd3jcr} - Environment variables:
${env:DB_PASSWORD} - File contents:
${file:/run/secrets/db_pw} - 1Password:
${op://Private/sakila/dsn}
- OS keychain:
- [#717], [#729]: New global flags:
- [#716]:
sq config exportdumps the active config to YAML, primarily for backups. With--expand, placeholders are resolved in-line, making the export a self-contained (but plaintext) snapshot.
- [#714]: Supported placeholder resolvers:
- [#660]:
sq inspectgainedsvg-erdandpng-erdoutput formats that render the schema ERD directly to.svgor.pngimage files.- Uses an embedded Graphviz engine (via goccy/go-graphviz): the generated images are not the prettiest, but it's a start.
- [#846]: New
format.decimaloption and--format.decimalflag (string|number) controlling whether decimal values render as quoted strings or bare numbers in JSON and YAML output.
Changed
- [#900]: HTTPS requests (used when downloading remote sources) now require a minimum of TLS 1.2, matching the Go standard library default. TLS 1.0 and 1.1, deprecated by RFC 8996, are no longer accepted.
- [#851]: In colored output, structural punctuation is now rendered muted rather than bold, so values stand out.
- [#846]: YAML now renders decimal values as quoted strings by default, matching JSON. Set
format.decimal=numberto restore bare numbers. - ☢️ [#594]:
avg()now returns a consistentfloaton every SQL driver. Breaking for Postgres and MySQL, which previously returned a lossless decimal. - ☢️ [#839], [#853]:
sum()over an integer or decimal column now returns a consistentdecimalon every SQL driver, rendered in JSON as a quoted string (e.g."20100"). - [#610]: The DuckDB driver now
opens sources read-only
for non-writing commands, and
sq sqlgained a--readonly(alias--ro) flag. - ☢️ [#728], [#782]: The
redactconfig option is renamed tosecrets.revealwith inverted polarity; existing configs are migrated automatically (after a backup). - [#692]:
sq inspect -f mermaid-erdnow syntax-colors itserDiagramsource when writing to a terminal. - [#758]: For SQLite (and rqlite) sources,
sq tbl copynow copies the source table's indexes and triggers to the destination.
Fixed
- [#851]: Two fixes to
yamloutput: a numeric value from an untyped column is now colorized, and aBLOBvalue is now encoded as base64. - [#844]: On Oracle, a query whose result is a computed
NUMBERwith a fractional value no longer fails with a scan error; such numbers are now typed asdecimal. - [#594]: On SQL Server,
avg()over an integer column no longer performs integer division and truncates the result. - [#741], [#743]:
sq addshell completion now supports ClickHouse and Oracle. - [#699]:
sq inspecton SQLite sources no longer executes pragmas that write to the database or scan the whole file, which could make each inspect painfully slow. - [#720]: Fixed SQLite driver path handling for source
locations with connection params (e.g.
sqlite3:///path/to/db?mode=ro). - [#750], [#752], [#757], [#759]: A batch of fixes to the
CREATE TABLEDDL rewriting that backs table copy and column-kind alteration on the sqlite3 driver. - [#783]:
sq db dump clusterno longer writes the database password to the sq log file. - [#783]:
sq cache clear @srcnow clears every cache dir belonging to the source, including stale dirs left over from a changed location, schema, or ingest options. - [#783]:
sq addandsq mvno longer permit a source handle nested below an existing source's handle. - [#821]: On the SQLite and rqlite drivers, renaming a table, adding a column, or truncating it no longer fails when a table or column name contains a double quote.
- [#834]: On the ClickHouse driver, a result-column name containing a dot is no longer truncated to the segment after the last dot.
-
v0.53.1-0.20260618212702-581f35bb98f318 Jun 2026 pre-releaseNothing published for this version
-
v0.53.1-0.20260618083352-2a86e9600a3418 Jun 2026 pre-releaseNothing published for this version
-
v0.53.1-0.20260616124004-b1e44bceff5816 Jun 2026 pre-releaseNothing published for this version
-
v0.53.026 May 2026Release notes
Open source →Added
- #601, #615, #628, #629, #640: New
SLQstring-matching functions. See Query Guide for per-driver behavior and SQLite ASCII-CI quirks.- Case-sensitive literal substring matchers
contains,startswith, andendswith. - Case-insensitive variants
icontains,istartswith, andiendswith. - User-controlled wildcard matchers
likeandilike:%and_are wildcards.
- Case-sensitive literal substring matchers
- #648:
sq inspectnow has--markdownand--htmloutput formats that generate schema documents with embedded entity relationship diagrams.- #658:
sq inspectalso gained amermaid-erdoutput format (--format=mermaid-erd) that emits the bare Mermaid entity-relationship diagram source for source and table schema inspection, with no surrounding document.
- #658:
Changed
- #637: Richer
SLQsyntax-error reporting in both text and JSON error formats. You can set the new config optionerror.format.text.verbosetofalseif you prefer the previous (less-verbose)texterror format.
- #617, #618:
sq inspectnow omits an index whose key positions are all expressions (previously MySQL and SQLite reported such an index with an emptycolumnslist).
Fixed
- #617, #618:
sq inspectnow preserves the true key arity and position of indexes that contain functional/expression keys. A key likelower(b)inCREATE INDEX ix ON t (a, lower(b), c)is reported as an empty-string entry in the index'scolumns, so it is no longer indistinguishable from a real two-column(a, c). Applies to SQLite, DuckDB, MySQL, and Postgres. - #612: DuckDB
INTERVALvalues 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μsstring. - #613:
sq inspectof a SQL Server source no longer returns tables from schemas other than the source's current schema. - #471: The SQLite driver no longer fails with
unsupported Scan, storing driver.Value type string into type *time.Timewhen aDATETIME/DATEcolumn stores text thatmattn/go-sqlite3doesn't natively convert — most commonly Rails' microsecond-precisiondatetime(6)columns.sqnow re-runs the same timestamp parse and falls back to the raw text only when the value is genuinely unparseable. - #658:
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 forsq diffwas being applied to every command's--formatflag; it's now scoped tosq diffitself. - #652: The ClickHouse driver now creates a copied table in its target schema (ClickHouse database) when the copy specifies one, rather than always in the connection's current database.
- #484:
--insertinto a MySQL or Postgres table no longer fails when a same-named table exists in another schema. - #633: A query using the single-segment
@handle.table:aliasform on the left of a pipeline (e.g.@sakila.actor:a | .a.first_name) no longer silently collapses toSELECT * FROM <table>. - #646: A query whose alias is a reserved word (e.g.
.actor | .first_name:count,@sakila.actor:count, orjoin(.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. - #445: Cross-source
joinno longer fails when the participating sources contain tables with the same name (e.g.@src1.actor | join(@src2.actor, .actor_id)).
Release notes
Open source →Added
- [#601], [#615], [#628], [#629], [#640]: New
SLQstring-matching functions. See Query Guide for per-driver behavior and SQLite ASCII-CI quirks.- Case-sensitive literal substring matchers
contains,startswith, andendswith. - Case-insensitive variants
icontains,istartswith, andiendswith. - User-controlled wildcard matchers
likeandilike:%and_are wildcards.
- Case-sensitive literal substring matchers
- [#648]:
sq inspectnow has--markdownand--htmloutput formats that generate schema documents with embedded entity relationship diagrams.- [#658]:
sq inspectalso gained amermaid-erdoutput format (--format=mermaid-erd) that emits the bare Mermaid entity-relationship diagram source for source and table schema inspection, with no surrounding document.
- [#658]:
Changed
- [#637]: Richer
SLQsyntax-error reporting in both text and JSON error formats. You can set the new config optionerror.format.text.verbosetofalseif you prefer the previous (less-verbose)texterror format. - [#617], [#618]:
sq inspectnow omits an index whose key positions are all expressions (previously MySQL and SQLite reported such an index with an emptycolumnslist).
Fixed
- [#617], [#618]:
sq inspectnow preserves the true key arity and position of indexes that contain functional/expression keys. A key likelower(b)inCREATE INDEX ix ON t (a, lower(b), c)is reported as an empty-string entry in the index'scolumns, so it is no longer indistinguishable from a real two-column(a, c). Applies to SQLite, DuckDB, MySQL, and Postgres. - [#612]: DuckDB
INTERVALvalues 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μsstring. - [#613]:
sq inspectof a SQL Server source no longer returns tables from schemas other than the source's current schema. - [#471]: The SQLite driver no longer fails with
unsupported Scan, storing driver.Value type string into type *time.Timewhen aDATETIME/DATEcolumn stores text thatmattn/go-sqlite3doesn't natively convert — most commonly Rails' microsecond-precisiondatetime(6)columns.sqnow re-runs the same timestamp parse and falls back to the raw text only when the value is genuinely unparseable. - [#658]:
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 forsq diffwas being applied to every command's--formatflag; it's now scoped tosq diffitself. - [#652]: The ClickHouse driver now creates a copied table in its target schema (ClickHouse database) when the copy specifies one, rather than always in the connection's current database.
- [#484]:
--insertinto a MySQL or Postgres table no longer fails when a same-named table exists in another schema. - [#633]: A query using the single-segment
@handle.table:aliasform on the left of a pipeline (e.g.@sakila.actor:a | .a.first_name) no longer silently collapses toSELECT * FROM <table>. - [#646]: A query whose alias is a reserved word
(e.g.
.actor | .first_name:count,@sakila.actor:count, orjoin(.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. - [#445]: Cross-source
joinno longer fails when the participating sources contain tables with the same name (e.g.@src1.actor | join(@src2.actor, .actor_id)).
- #601, #615, #628, #629, #640: New
-
v0.52.1-0.20260523041229-319be16caa3923 May 2026 pre-releaseNothing published for this version
-
v0.52.1-0.20260522092627-e4a098473a6e22 May 2026 pre-releaseNothing published for this version
-
v0.52.1-0.20260521191217-1c80fcba032621 May 2026 pre-releaseNothing published for this version
-
v0.52.1-0.20260521023439-0b23cc475dab21 May 2026 pre-releaseNothing published for this version
-
v0.52.1-0.20260516051302-793c6ed590b916 May 2026 pre-releaseNothing published for this version
-
v0.52.016 May 2026Release notes
Open source →Added
- 🐥🦆 #437: Beta DuckDB support. The
duck
driver supports most of the DuckDB
type system; and includes a standard set of in-tree extensions (json,
parquet,icu,fts,httpfs,excel,inet,autocomplete,
tpch,tpcds). See the
driver docs. - #498:
sq inspectnow reports
foreign keys (fk.outgoing/fk.incomingper table), unique
constraints, and indexes for every SQL driver (ClickHouse skipped — no
foreign-key concept). Composite and cross-schema references are
supported; see the driver-specific caveats in the
inspect docs. - #602:
sqnow features a
--render-sqlflag, which
prints the SQL (derived fromSLQinput) that would be executed against
the target database, instead of running it. Honors--formatwith:textorraw: the rendered SQL is printed.jsonoryaml: a structured payload is printed containing the
original SLQ, the rendered SQL, any
--arg, the
dialect and information about the sources that the query touches.# $ 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"
Changed
- ☢️ #499:
libsq.SLQ2SQLnow returns a structured
*libsq.RenderResulttype instead ofstring. Anylibsqlibrary
consumers must update call sites; thesqCLI is unaffected.
Release notes
Open source →Added
- 🐥🦆 [#437]: Beta DuckDB support. The
duckdriver supports most of the DuckDB type system; and includes a standard set of in-tree extensions (json,parquet,icu,fts,httpfs,excel,inet,autocomplete,tpch,tpcds). See the driver docs. - [#498]:
sq inspectnow reports foreign keys (fk.outgoing/fk.incomingper table), unique constraints, and indexes for every SQL driver (ClickHouse skipped — no foreign-key concept). Composite and cross-schema references are supported; see the driver-specific caveats in the inspect docs. - [#602]:
sqnow features a--render-sqlflag, which prints the SQL (derived fromSLQinput) that would be executed against the target database, instead of running it. Honors--formatwith:-
textorraw: the rendered SQL is printed. -
jsonoryaml: a structured payload is printed containing the original SLQ, the rendered SQL, any--arg, the dialect and information about the sources that the query touches.# $ 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"
-
Changed
- ☢️ [#499]:
libsq.SLQ2SQLnow returns a structured*libsq.RenderResulttype instead ofstring. Anylibsqlibrary consumers must update call sites; thesqCLI is unaffected.
- 🐥🦆 #437: Beta DuckDB support. The
-
v0.51.1-0.20260512072024-d37f1ea2722212 May 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260511234615-0dece9960ba611 May 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260511084348-ff97c8aca42411 May 2026 pre-releaseNothing published for this version
-
v0.51.1-0.20260511065952-3ce9c729c0a511 May 2026 pre-releaseNothing published for this version
-
v0.51.011 May 2026Release notes
Open source →Added
- 🐥 #501: Beta Oracle support, built on the pure-Go go-ora driver. No Instant Client required.
Kudos to @drluckyspin for indulging enterprise Larry habits.
Release notes
Open source →Added
- 🐥 [#501]: Beta Oracle support, built on the pure-Go go-ora driver. No Instant Client required. Kudos to @drluckyspin for indulging enterprise Larry habits.
- 🐥 #501: Beta Oracle support, built on the pure-Go go-ora driver. No Instant Client required.
-
v0.50.3-0.20260509021658-9c390335d07b09 May 2026 pre-releaseNothing published for this version
-
v0.50.3-0.20260508071726-6f42db98372d08 May 2026 pre-releaseNothing published for this version
-
v0.50.3-0.20260507024924-9f09d86fe0e107 May 2026 pre-releaseNothing published for this version
-
v0.50.3-0.20260426172152-1be820a96ec126 Apr 2026 pre-releaseNothing published for this version
-
v0.50.3-0.20260424061828-a752e5c7d5be24 Apr 2026 pre-releaseNothing published for this version
-
v0.50.224 Apr 2026Release notes
Open source →Added
- #552: Agent-focused skill content under
skills/sq/(prompts and
references) to help AI assistants usesq, plus related nfpm/AUR packaging
metadata. Kudos to @drluckyspin.
Changed
- The sq.io website is now hosted in the
./site/dir instead
of in a separate repo.
Fixed
Release notes
Open source →Added
- [#552]: Agent-focused skill content under
skills/sq/(prompts and references) to help AI assistants usesq, plus related nfpm/AUR packaging metadata. Kudos to @drluckyspin.
Changed
- The sq.io website is now hosted in the
./site/dir instead of in a separate repo.
Fixed
- [#555], [#556]: ClickHouse driver now populates
md.Catalogcorrectly.
- #552: Agent-focused skill content under
-
v0.50.1-0.20260217094406-96f801d397ca17 Feb 2026 pre-releaseNothing published for this version
-
v0.50.017 Feb 2026Release notes
Open source →Added
- 🐥 #503: Initial ClickHouse support. This is a beta release of the ClickHouse functionality; please open an issue if you find problems.
- See docs for usage.
- Note that the docs are still WIP, see the ClickHouse README.md for additional info.
- Kudos to @drluckyspin for the ClickHouse work.
Release notes
Open source →Added
- 🐥 #503: Initial ClickHouse support. This is a beta release of the
ClickHouse functionality; please open an issue
if you find problems.
- See docs for usage.
- Note that the docs are still WIP, see the ClickHouse README.md for additional info.
- Kudos to @drluckyspin for the ClickHouse work.
- 🐥 #503: Initial ClickHouse support. This is a beta release of the ClickHouse functionality; please open an issue if you find problems.
-
v0.49.1-0.20260215002204-a2024305091715 Feb 2026 pre-releaseNothing published for this version
-
v0.49.015 Feb 2026Release notes
Open source →-
#470: Previously, the
--src.schema=[CATALOG.]SCHEMAflag did not allow
the schema or catalog name to begin with a digit. This is now permitted.
Kudos to @majiayu000.# Inspect schema "123schema" via the @pg1 source $ sq inspect @pg1 --src.schema=123schema # Inspect schema "789schema" in catalog "456catalog" via the @pg1 source $ sq inspect @pg1 --src.schema=456catalog.789schema
-
#542: Upgrade codebase to Go 1.26.
Release notes
Open source →Changed
-
[#470]: Previously, the
--src.schema=[CATALOG.]SCHEMAflag did not allow the schema or catalog name to begin with a digit. This is now permitted. Kudos to @majiayu000.# Inspect schema "123schema" via the @pg1 source $ sq inspect @pg1 --src.schema=123schema # Inspect schema "789schema" in catalog "456catalog" via the @pg1 source $ sq inspect @pg1 --src.schema=456catalog.789schema -
[#542]: Upgrade codebase to Go 1.26.
-
-
v0.48.13-0.20260130185747-8c4bfcef9d7e30 Jan 2026 pre-releaseNothing published for this version
-
v0.48.13-0.20260130120426-547efcd2a69e30 Jan 2026 pre-releaseNothing published for this version
-
v0.48.1230 Jan 2026Release notes
Open source →🫡: This patch release addresses issues reported by @Dialga.
Fixed
- #532:
sq sqlnow uses theusqllib for SQL input mode determination
(does the SQL input execute a query or a statement?) replacing the custom
implementation introduced inv0.48.11. Theusqlimpl is battle-tested:
there's no point reinventing that wheel.
Changed
- #531: Several changes to
sqversion handling.sq versionnow returns faster by reducing the update-check timeout from
2s to 500ms. Additionally, the version check now uses the official
homebrew-core formula instead of the legacy tap. There's still future work to be
done here to make it possible to configure or disable this update-check behavior.- Relatedly,
sqnow warns instead of erroring when the config file's
config.versionis newer than thesqbuild version. This allows users to
downgrade to oldersqversions for testing or debugging, at the small risk
of config schema incompatibilities (which will likely error out). There's
future work to be done to improve howsqstamps the config schema version
insq.yml(currently it uses the build version rather than tracking actual
config schema changes).
Release notes
Open source →🫡: This patch release addresses issues reported by @Dialga.
Fixed
- [#532]:
sq sqlnow uses theusqllib for SQL input mode determination (does the SQL input execute a query or a statement?) replacing the custom implementation introduced inv0.48.11. Theusqlimpl is battle-tested: there's no point reinventing that wheel.
Changed
- [#531]: Several changes to
sqversion handling.sq versionnow returns faster by reducing the update-check timeout from 2s to 500ms. Additionally, the version check now uses the official homebrew-core formula instead of the legacy tap. There's still future work to be done here to make it possible to configure or disable this update-check behavior.- Relatedly,
sqnow warns instead of erroring when the config file'sconfig.versionis newer than thesqbuild version. This allows users to downgrade to oldersqversions for testing or debugging, at the small risk of config schema incompatibilities (which will likely error out). There's future work to be done to improve howsqstamps the config schema version insq.yml(currently it uses the build version rather than tracking actual config schema changes).
- #532:
-
v0.48.12-0.20260118211221-a342fc0f3ad618 Jan 2026 pre-releaseNothing published for this version
-
v0.48.1118 Jan 2026Release notes
Open source →Fixed
-
#502:
sq sqlnow properly executes single SQL statements (INSERT,UPDATE,
DROP, etc.) instead of incorrectly running them as queries.- This fixes broken behavior with strict database drivers and ensures affected
row counts are correctly reported. Note thatsq sqlis designed to accept
only a single SQL statement/query in the SQL input string; behavior is
undefined for multiple statements in the input. - Thanks to @drluckyspin for the fix.
- This fixes broken behavior with strict database drivers and ensures affected
-
#520:
sq addandsq lserroneously printed source password for SQL Server URLs
in some circumstances. -
#469: Column widths were too wide when using
--no-headerflag. Header text
is now excluded from column width calculation when headers are disabled.
Thanks to @majiayu000 for the fix.
Release notes
Open source →Fixed
-
[#502]:
sq sqlnow properly executes single SQL statements (INSERT,UPDATE,DROP, etc.) instead of incorrectly running them as queries.- This fixes broken behavior with strict database drivers and ensures affected
row counts are correctly reported. Note that
sq sqlis designed to accept only a single SQL statement/query in the SQL input string; behavior is undefined for multiple statements in the input. - Thanks to @drluckyspin for the fix.
- This fixes broken behavior with strict database drivers and ensures affected
row counts are correctly reported. Note that
-
[#520]:
sq addandsq lserroneously printed source password for SQL Server URLs in some circumstances. -
[#469]: Column widths were too wide when using
--no-headerflag. Header text is now excluded from column width calculation when headers are disabled. Thanks to @majiayu000 for the fix.
-
-
v0.48.11-0.20260111110114-cc31b60b820811 Jan 2026 pre-releaseNothing published for this version
-
v0.48.11-0.20251228111214-eee4deb76e3e28 Dec 2025 pre-releaseNothing published for this version
-
v0.48.1028 Dec 2025Release notes
Open source →Fixed
- [#506]: Fixed two XLSX-related issues (sadly, both are regression fixes):
- Stdin detection: Fixed type detection failing for XLSX files created by
various tools (e.g., the
excelizelibrary). These files have varying internal ZIP structures that the previous detection couldn't handle. Detection now scans ZIP local file headers instead of relying on fragile magic number heuristics. - Output colorization: Fixed XLSX binary output
(
--xlsx) being corrupted when written tostdout. The colorization decorator was modifying the binary data. XLSX format now bypasses colorization, like--rawoutput already does.
- Stdin detection: Fixed type detection failing for XLSX files created by
various tools (e.g., the
Changed
-
[#504]: Updated
golangci-linttov2.7.2, along with Go dependencies and GitHub Actions workflow versions. Other tool versions have been updated too.Note that Go tool dependencies are now located in the
tools/directory, each with its owngo.mod. Tools are invoked viago tool -modfile, e.g.go tool -modfile=tools/golangci-lint/go.mod golangci-lint. See the Makefile andtools/README.mdfor more detail.
- [#506]: Fixed two XLSX-related issues (sadly, both are regression fixes):
-
v0.48.928 Dec 2025Nothing published for this version
-
v0.48.828 Dec 2025Nothing published for this version
-
v0.48.6-0.20250309022419-6ac315a861f109 Mar 2025 pre-releaseNothing published for this version
-
v0.48.6-0.20250120014054-8da13044154120 Jan 2025 pre-releaseNothing published for this version