Changes since rc6 (in v2.0.0)
Released as v2.0.0 (tag 8784a25). The commits below were merged after v2.0.0-rc6 and are included in the v2.0.0 release.
c54b7dd
Jul 4, 2026
PrestConf refactor, Postgres adapter/connection pooling, credential redaction in logs, template param sanitization
31a9854
Jul 4, 2026
Config resilience (graceful fallbacks), JWT auto-disable instead of startup abort
#972 β Adapter and connection management
Mostly internal, with these user-facing changes:
Postgres adapter refactor with per-request connection context (foundation for multi-database routing and health checks).
Credential redaction in error logs via the
logsafepackage β database passwords and connection strings are not emitted in log output.Custom query template parameter sanitization β template query parameters are validated; unsafe inputs are rejected. Pass well-formed values to
/_QUERIESscripts.Context-aware health checks β health endpoints use request-scoped connection context.
#974 β Configuration resilience
Startup is never blocked by bad configuration. Invalid or missing settings produce warnings and safe fallbacks instead of fatal exits.
JWT auto-disable (ensureJWTConfig)
ensureJWTConfig)In v2.0.0, missing JWT verification material no longer aborts startup:
When
jwt.default = trueanddebug = false, but nojwt.key,jwt.jwks, orjwt.wellknownurlis configured β JWT middleware is auto-disabled with an error log. The server continues to start.When
auth.enabled = truebutjwt.keyis missing β auth is auto-disabled with an error log.
This is the safe alternative to the rc6 fail-closed behavior, which still prevents authentication bypass via an empty HMAC key (GHSA-fj7v-859r-2fm4).
rc6 tagged binary: the v2.0.0-rc6 release still refuses to start without verification material. See the rc6 page for that behavior.
jwt.default default changed to false
jwt.default default changed to falseThe Viper default for jwt.default is now false in v2.0.0 (rc6 implied true). JWT middleware is off unless you explicitly enable it.
Other resilience fallbacks
Missing, unreadable, or malformed TOML
Warnings; Viper defaults applied
Invalid access.tables, cache.endpoints, or databases keys
Zero values + warning
Queries path unavailable
Fallback to ~/queries, then disable queries feature
Cache storage unavailable
Fallback to ./, then disable cache
Invalid registry entries (duplicate alias, missing URL, invalid alias)
Entry skipped with warning
Structured logging
setupLogger runs on every startup β structured JSON logging via Go slog is always configured, not only when cache is enabled. Use PREST_LOG_LEVEL to control verbosity.
#973 β Multi-database
Full multi-database support via a [[databases]] registry and environment variable pairs.
URL routing
All CRUD uses /{database}/{schema}/{table}:
The {database} segment is either a Postgres database name (legacy mode) or a registered alias (registry mode).
Configuration
Environment variables (Kubernetes / production):
PREST_DATABASE_ALIAS_N and PREST_DATABASE_URL_N are accepted aliases. Env pairs win over TOML on conflict.
TOML (local development):
See the Multi-database guide for full details.
GET /_ready readiness endpoint
GET /_ready readiness endpointGET /_health
Liveness
Pings the default database
GET /_ready
Readiness
Pings the default database and every registered alias
Use /_ready for Kubernetes readiness probes. See the Kubernetes deployment manifest in the prest repo for a multi-secret example.
Per-alias permissions
access.tables entries support optional database and schema fields for per-alias access control:
See Permissions.
Documentation links
Last updated