Repository navigation
Releases: stackql/stackql
Release list
v0.12.778
What's Changed
- contributors: refresh leaderboard by @github-actions[bot] in #802
- security-hardening by @jeffreyaven in #804
- mcp-http-drain-rejected-request-body by @jeffreyaven in #805
- openai-plugin-refresh by @jeffreyaven in #806
- show-dependencies by @jeffreyaven in #807
- combined-dependabot-bumps by @jeffreyaven in #812
- omni-sdk-capability by @general-kroll-4-life in #813
- mcp-startup-config-validation-and-credential-redaction by @jeffreyaven in #835
- omnisdk-staging by @general-kroll-4-life in #836
- user-relation-expression-projection-and-purge-exclusion by @jeffreyaven in #837
- expanding-omnisdk-capabilities by @general-kroll-4-life in #838
- security-quick-wins by @jeffreyaven in #839
- tooling-uplift by @general-kroll-4-life in #840
- windows-multiarch-in-parallel by @general-kroll-4-life in #841
New Contributors
- @github-actions[bot] made their first contribution in #802
Full Changelog: v0.12.732...v0.12.778
v0.12.732
What's Changed
- doc updates by @jeffreyaven in #792
- fix-join-without-on-clause-panic by @jeffreyaven in #794
- desc-alias-and-otlp-push-exporter by @jeffreyaven in #795
- mcp-go-sdk-1.8.0-and-protocol-version-pin by @jeffreyaven in #796
- omnisdk-query-replacement-opt-in by @general-kroll-4-life in #797
Full Changelog: v0.12.718...v0.12.732
Breaking change: describe_resource MCP tool retired
The describe_resource MCP tool has been removed (#796). It wrapped DESCRIBE provider.service.resource, which reports the schema of one select method resolved without WHERE parameters, while a SELECT routes by its parameters and can land on a method with a different shape.
describe_method is now the single column source for MCP clients. It returns the exact contract for the method a query routes to: inputs with param_type, and the output fields a SELECT can reference. The discovery path is list_providers -> list_services -> list_resources -> list_methods -> describe_method.
- MCP clients, prompts or agent instructions that call
describe_resourceneed to be updated to calllist_methodsfollowed bydescribe_method. - The SQL
DESCRIBEstatement is unchanged. - The embedded server instructions, prompts and the deploy-stack authoring resource have been repointed at
describe_methodoutput fields.
MCP protocol revision pinning (--mcp.protocol.version)
The MCP server now builds against github.com/modelcontextprotocol/go-sdk v1.8.0 (previously v1.7.0) and the newest protocol revision it advertises can be pinned (#796, issue #784). The setting is available as the --mcp.protocol.version flag, which overrides server.protocol_version in mcp.config.
| Value | Advertised | Effect |
|---|---|---|
auto (default) or absent |
every SDK revision | negotiation per client: the highest revision both sides speak |
2026-07-28 |
2026-07-28 only |
sessionless only; implies stateless for Streamable HTTP |
2025-11-25 (or any older revision) |
that revision and everything before it | handshake lifecycle only; a 2026-07-28 request is answered with JSON-RPC error -32022 whose data.supported lists the advertised revisions, so the client can renegotiate |
stackql mcp --mcp.server.type=http --mcp.protocol.version=2026-07-28 --mcp.config '{"server": {"transport": "http", "address": "127.0.0.1:9992"} }'
stackql mcp --mcp.server.type=stdio --mcp.protocol.version=2025-11-25Any other value fails config validation at startup with invalid server.protocol_version, naming the legal values.
Behaviour changes that come with SDK v1.8.0:
- On stateful Streamable HTTP, a
2026-07-28request is now answered with JSON-RPC error-32022(UnsupportedProtocolVersion) rather than a plain HTTP 400. - Streamable HTTP request bodies are capped at the SDK default of 4 MiB (
413beyond it), and JSON nested deeper than 1000 levels is rejected before parsing. These limits are not configurable inmcp.config.
See docs/mcp.md for the full transport and negotiation detail.
DESC classed as read-only by the MCP policy gate
The MCP policy gate now classes DESC (and DESC EXTENDED) as read-only, the same as DESCRIBE (#795, issue #773). The parser already accepted DESC on every other path; previously the gate treated a statement beginning with DESC as an unknown query class.
OTLP/HTTP push exporter for --output otel
--output otel can now push records to an OTLP/HTTP logs endpoint in addition to writing them to stdout (#795, issue #755 phase 2). The exporter is configured through the new --otel.config flag, which takes a JSON or YAML string:
stackql exec --output otel \
--otel.config '{"exporter": {"endpoint": "http://localhost:4318/v1/logs", "headers": {"authorization": "<token>"}}}' \
"select name, location from google.storage.buckets where project = 'my-project';"| Key | Required | Default | Description |
|---|---|---|---|
exporter.endpoint |
yes | Full OTLP/HTTP logs URL, for example http://collector:4318/v1/logs |
|
exporter.headers |
no | Headers sent on every export request, for example an ingestion token or API key | |
exporter.timeout_ms |
no | 10000 |
Per-request timeout in milliseconds |
exporter.batch_size |
no | 512 |
Number of log records per export request |
- Records are sent as OTLP/JSON, batched per statement and chunked by
batch_size; the remainder is shipped when the statement completes. 429and5xxresponses, and transport errors, are retried up to 4 attempts, honouring a delay-secondsRetry-Afterheader (capped at 30 seconds) or otherwise an exponential backoff starting at 500 ms.- An export failure is reported on stderr.
- No
OTEL_EXPORTER_OTLP_*environment variables are read; all exporter settings come from--otel.config. A malformed value, or an exporter without an endpoint, fails startup.
Bug fix: JOIN without an ON clause
A JOIN with no ON clause crashed plan building with a nil pointer dereference (#794, fixes #793). A condition-less inner join is now treated as a CROSS JOIN, which both the SQLite and Postgres backends accept, so a query that joins two provider tables with the join condition in WHERE now runs.
Preview functionality (unstable)
Preview functionality is not stable. Behaviour, syntax and output may change or break between releases without notice. Do not rely on it in production.
The opt-in preview query path (--preview='{"unstable":true}') has been extended (#797). Statements over relations named stackql_unstable_<provider>.<service>.<resource> are resolved and run by omnisdk directly from the provider documents, with rows streamed to the output as they are produced rather than staged in the SQL backend.
- A
SELECTover these relations is now handed toomnisdkas a whole:INNER JOINandLEFT JOINbetween document-driven relations are supported, as areINlist filters.omnisdkdecides which conditions become request parameters, which become edges between relations, and which become row filters. LIMITwithoutORDER BYis pushed down and stops the requests early.ORDER BY,GROUP BY,HAVING,DISTINCTand aggregates are refused on these relations.- A query that mixes these relations with any other relation is refused.
INSERT,UPDATEandDELETEagainst a document-driven relation are routed throughomnisdk; aRETURNINGlist streams back the affected resource.INSERTandUPDATEare covered by the functional test suite in this release.- Each document-driven provider's configured stackql auth, including basic auth, is passed to
omnisdk. SHOW METHODSon these relations reports each method's SQL verb (SELECT,INSERT,UPDATE, ...), withEXECfor a method no verb maps to.- Use
--output jsonlor--output otelto have each row written as it arrives; the default table output holds every row until the query completes.
stackql exec --preview='{"unstable":true}' --output jsonl \
"select b.name as bucket, i.role, i.members
from stackql_unstable_google.storage.buckets b
inner join stackql_unstable_google.storage.buckets_iam_policies i on i.bucket = b.name
where b.project = 'my-project';"Developer documentation, including audit query examples for AWS, Azure and Google, is in docs/preview.md.
Dependency and packaging updates
github.com/modelcontextprotocol/go-sdkv1.7.0 -> v1.8.0github.com/stackql-labs/omnisdkv0.1.2-beta02 -> v0.1.3-alpha05- MCP bundle package metadata for npm (
@stackql/mcp-server) and PyPI (stackql-mcp-server) aligned to the0.12.xline - Release process documentation updated (#792)
v0.12.718
What's Changed
- iac-v1 by @general-kroll-4-life in #764
- fix lint: satisfy nilnil in internaldto tests; drop PR_README.md (#235) by @Sneha41sb in #767
- Bump rmcp from 1.8.0 to 2.0.0 in /packaging/mcpb/cargo by @dependabot[bot] in #768
- build(deps): bump rmcp from 2.0.0 to 2.1.0 in /packaging/mcpb/cargo by @dependabot[bot] in #770
- Bump github.com/jackc/pgx/v5 from 5.0.4 to 5.9.2 by @dependabot[bot] in #750
- build(deps): bump google.golang.org/grpc from 1.83.1 to 1.83.2 by @dependabot[bot] in #762
- chore: bump spf13/pflag from 1.0.9 to 1.0.10 by @jeffreyaven in #758
- fix: unignore npm lockfile for dependabot, pin ubuntu-latest to ubuntu-24.04 by @jeffreyaven in #772
- ci: retry known-flaky infra steps (Chocolatey mingw, Docker Buildx) by @jeffreyaven in #775
- get-app: consolidate PR #765/#771 dependency updates without regressions by @jeffreyaven with @Copilot in #776
- build(deps): bump mistune from 3.0.2 to 3.3.3 in /cicd by @dependabot[bot] in #777
- build(deps): bump requests from 2.32.3 to 2.33.0 in /cicd by @dependabot[bot] in #780
- build(deps): bump jinja2 from 3.1.4 to 3.1.6 in /cicd by @dependabot[bot] in #778
- ci: bump Node20-deprecated actions to Node24; cut runner costs by @jeffreyaven in #781
- build(deps): bump flask from 3.0.3 to 3.1.3 in /cicd by @dependabot[bot] in #779
- migrate-embedded-sqlite-to-pure-go-modernc by @jeffreyaven in #786
- chore: bump any-sdk and reduce CI runner cost by @jeffreyaven in #790
Full Changelog: v0.11.673...v0.12.718
Additional notes re pure Go SQLite backend (first release after the modernc migration)
The embedded SQLite backend is now
modernc.org/sqlite(pure Go). All binaries are built withCGO_ENABLED=0and are statically linked; no C toolchain is involved anywhere in the build.
The custom extension functions (
split_part,regexp_like,regexp_substr,regexp_replace,json_equal,aws_policy_equal) are ported to pure Go inany-sdk; documented behaviour divergences (RE2 regexp limits) are listed in any-sdkpublic/sqlfuncs/DIVERGENCES.md.
Library embedders now inherit the
modernc.org/sqlitedependency tree instead ofmattn/go-sqlite3/cgo.
External loadable SQLite extensions (
.load) are no longer supported.
Rollback anchor: the tag
v0.11.707-final-cgomarks the last cgo commit onmain.
v0.11.669
What's Changed
- mirror-publish-git-ident by @jeffreyaven in #721
- fix: [BUG] query rewriting error using JSON_EXTRACT by @Roshan931 in #722
- fix: [BUG] View query rewriting issue with
LIKEandNOT LIKEby @Roshan931 in #723 - consume any-sdk v0.5.5-alpha01: OCI doc-level env vars, body coercion, snake/wire parity wire-through (#705, #726, #725, #710) by @jeffreyaven in #731
- mcp: adopt protocol revision 2026-07-28 and add otel audit log format; fix build date stamping (#729, #704) by @jeffreyaven in #732
- ci: skip Docker image build on Dependabot PRs by @jeffreyaven in #737
- Bump mistune from 3.0.2 to 3.3.3 in /test by @dependabot[bot] in #724
- fix: guard primitive graph txn control counter slice against concurrent appends by @jeffreyaven in #736
- ci: move test tooling image stages from bullseye to bookworm by @jeffreyaven in #743
- Bump cryptography from 43.0.3 to 50.0.0 in /cicd by @dependabot[bot] in #730
- deps(test): roll up flask 3.1.3, jinja2 3.1.6, requests 2.33.0, pyopenssl 26.0.0 (#739, #740, #741, #742) by @jeffreyaven in #744
- deps(test): drop unused pyopenssl, pin cryptography 50.0.0, bump urllib3, werkzeug, idna, pytest (#745, #746, #747, #748) by @jeffreyaven in #749
- docs: add query-before-mutation GCS tutorial by @nirmalpatel008 in #727
- test: cover relational predicates by @be-student in #733
- Add unit tests for sqlstream and update PR descriptions by @Sneha41sb in #735
- Add unit tests for primitive_context, iqlutil, suffix, symtab, serde by @Sneha41sb in #734
- v0.11 release prep: --output otel inventory snapshots (#738), SHOW CONTRIBUTORS (#320), minor version bump by @jeffreyaven in #754
- deps(go): bump antchfx/xpath 1.3.6, aws-sdk-go-v2 s3 1.97.3 and eventstream 1.7.8 (#751, #752, #753) by @jeffreyaven in #756
- Bump github.com/dvsekhvalnov/jose2go from 1.6.0 to 1.7.0 by @dependabot[bot] in #757
New Contributors
- @Roshan931 made their first contribution in #722
- @dependabot[bot] made their first contribution in #724
- @be-student made their first contribution in #733
Full Changelog: v0.10.605...v0.11.669
v0.10.605
What's Changed
- embedded-mcp-packaging by @jeffreyaven in #718
- preview-access-audit-plus-unstable by @general-kroll-4-life in #719
- docs: add preview-bucket-01 tutorial (multi-cloud bucket audit) by @nirmalpatel008 in #716
- immutable-release-assets + retire gleam/kotlin/swift by @jeffreyaven in #720
New Contributors
- @nirmalpatel008 made their first contribution in #716
Full Changelog: v0.10.601...v0.10.605
v0.10.601
What's Changed
- preview-provider by @general-kroll-4-life in #711
- mockable-omnisdk by @general-kroll-4-life in #712
- eager-output-streaming by @general-kroll-4-life in #713
- improved-bucket-audit by @general-kroll-4-life in #714
- slim-doco by @general-kroll-4-life in #715
Full Changelog: v0.10.591...v0.10.601
v0.10.591
What's Changed
- fix: stdio malformed-frame resilience, JSON() param fan-out, window/CTE test coverage by @jeffreyaven in #702
- feat: add local ChatGPT and Codex stdio plugin by @jeffreyaven in #703
- build: consume any-sdk v0.5.4-alpha01 - OCI signing, server variable env resolution, pushdown $select superset, XML pagination token passthrough by @jeffreyaven in #707
- jsonl-output by @general-kroll-4-life in #708
- Add MCP Toplist rank badge by @chrstphe in #709
New Contributors
Full Changelog: v0.10.582...v0.10.591
v0.10.582
What's Changed
- Install doc updates by @jeffreyaven in #693
- Mcpb env file arg by @jeffreyaven in #694
- working-self-audit by @general-kroll-4-life in #695
- feat: embedded content framework for MCP instructions, prompts and resources by @jeffreyaven in #697
Full Changelog: v0.10.559...v0.10.582
v0.10.559
What's Changed
- Install doc updates by @jeffreyaven in #690
- feat: default env file creation for mcp bundles + mcp server lifecycle logging (#691) by @jeffreyaven in #692
Full Changelog: v0.10.557...v0.10.559
v0.10.557
What's Changed
- feat: mcp credential (re)sourcing via server.env_file + reload_credentials tool (#688) by @jeffreyaven in #689
- feat: add RedactHeaderValue utility to pushdown by @Sneha41sb in #685
Full Changelog: v0.10.542...v0.10.557