v1.1.18
[1.1.18] — 2026-07-08
Critical fixes and security hardening — the first of a multi-phase hardening release line. All changes are additive/behavior-preserving: no public config key or Go signature is removed or renamed.
Security
- Response cache no longer shares a single cached response object across concurrent requests hitting the same cache key. Each cache hit, and each response being newly cached, now gets its own independent copy, closing a data race that could occur under concurrent load.
- SQLite-backed stores (API keys, config snapshots, request logs) now restrict their on-disk database file to owner-only read/write (0600) instead of the default umask-derived permissions, which could leave the file group- or world-readable.
- Rate limiting is now enabled by default for every deployment: 20 requests/sec with a burst of 40 per client IP, capped at 100,000 tracked IPs. Set
RATE_LIMIT_RPS=0to opt out;RATE_LIMIT_RPS/RATE_LIMIT_BURSToverride the defaults. Deployments that already set a customRATE_LIMIT_RPSwithoutRATE_LIMIT_BURSTwill now get the default burst (40) rather than a burst equal to their custom rate — setRATE_LIMIT_BURSTexplicitly to preserve the old behavior. Rate limiting keys on the resolved client IP, soTRUSTED_PROXIESmust correctly list any reverse proxy in front of the gateway, or all traffic behind that proxy is limited as a single client.
Internal
- The build toolchain is now pinned to Go 1.25.11 (previously 1.25.0), matching the version already used by CI and the published Docker image, closing a gap where a plain source build could pick up an older, unpinned patch version.
Contributors
Thanks to everyone who shipped this release:
- v1.1.18 — Critical fixes and security hardening (#331) — @MitulShah1
Full changelog: https://github.com/ferro-labs/ai-gateway/blob/v1.1.18/CHANGELOG.md