You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 3822df6
Browse filesBrowse the repository at this point in the historyBrowse files
chore: release 0.14.0 - and show a table-restricted key only its tables
allowed_tables now covers the schema too: GET /connections/<name>/schema and
MCP's list_tables list only the key's tables (a foreign key into another
shows as none), and table_ddl answers a forbidden table with the same 404
as a missing one. Docs and guides 16, 25 and 40 updated.
Release: version 0.14.0; CHANGELOG's Unreleased becomes 0.14.0 with
"Upgrading from 0.13"; SQLite and PostgreSQL upgrade fixtures for 0.14.0;
BACKLOG sequence updated. The legacy-JSON-import deprecation test is
SQLite-only, as the import is.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+25-1Lines changed: 25 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -42,6 +42,24 @@ sooner, saying why. The list of what is deprecated now is `queryapigate/deprecat
42
42
43
43
## [Unreleased]
44
44
45
+
## [0.14.0] - 2026-10-04
46
+
47
+
The groundwork for 1.0's promise: a deprecation policy and an "experimental" label for what's outside it, a database
48
+
support matrix with tiers, backups you can restore, Python 3.11 or newer - and all 40 how-to guides, whose writing
49
+
found and fixed the access-control and packaging gaps listed under *Fixed*.
50
+
51
+
### Upgrading from 0.13
52
+
Read these first.
53
+
-**Breaking: Python 3.11 or newer.** On 3.9 or 3.10, pip keeps installing 0.13.0. The Docker image is unaffected.
54
+
-**No store migration**: the store stays at schema 5. Back up first anyway ([how](https://github.com/AnanthaRajuC/QueryAPIGate/blob/main/how-to/33-back-up-and-restore.md)).
55
+
-**Coming from 0.9 or older?** Start 0.14 once before going further: 0.15.0 may stop importing the pre-SQLite JSON
56
+
files (*Deprecated*, below).
57
+
-**Callers of `/execute_sql_from_file` or `/execute_sql_with_parameters_from_file`** should move to `/q/{name}`
58
+
before 0.15.0. Each process logs the first such call with the key that made it.
59
+
-**A key with `"allowed_ips": []` now works from no address** (it used to work from any). Find any with
60
+
`GET /api/v1/api-keys` and set them to `null`, or to real addresses.
61
+
-**A table-restricted key's schema shows only its tables** - a client that listed the rest no longer sees them.
62
+
45
63
### Breaking
46
64
-**Python 3.11 or newer is required** (was 3.9). Python 3.9 reached its end of life in October 2025 and 3.10
47
65
reaches its own this month, so neither is carried into 1.0. pip on 3.9 or 3.10 keeps installing 0.13.0, the last
@@ -84,11 +102,16 @@ sooner, saying why. The list of what is deprecated now is `queryapigate/deprecat
84
102
/events`, `queryapigate events`), H2, JDBC and MongoDB connections, and alerts (`GET /api/v1/alerts`). Each is
85
103
marked in its docs, with `x-experimental: true` in `/openapi.json`, with a tag in the Console (its Settings rows,
86
104
the database-type picker, the Alerts screen), and with a warning in the log at startup while one is in use.
105
+
87
106
### Changed
88
107
-**The one-command demo (`docker compose up`) seeds itself through the Management API** (`demo/seed.sh`) instead of
89
108
copying the pre-SQLite JSON files that 0.14 deprecates.
90
109
91
110
### Fixed
111
+
-**A table-restricted key sees only its tables in the schema.**`allowed_tables` refused statements on other
112
+
tables, but the schema browser and MCP's `list_tables` still listed every table and column on the connection, and
113
+
`table_ddl` showed any table's `CREATE TABLE`. Now the others are left out (and a foreign key pointing at one shows
114
+
as none), and `table_ddl` answers a forbidden table with the same `404` as a missing one.
92
115
-**An empty `allowed_ips` list allows no address.**`"allowed_ips": []` on a key or role used to mean "no
93
116
restriction" - failing open, unlike an empty `allowed_tables` or `allowed_write_ops`, which allow nothing. `null`
94
117
is still how to say "any address"; the Console sends `null` for an empty field, as before.
@@ -1533,7 +1556,8 @@ First public release, restructured from the original single-file application.
1533
1556
- JSON column order is preserved; Decimal, date and driver-specific number types serialise correctly.
0 commit comments