Upgrading
What needs acting on when upgrading
This covers breaking changes and the highlights you may want to adopt. Follow the release notes link under each version for the full change notes.
| Releases before 1.0 do not follow the compatibility policy and frequently include breaking changes. |
Before you upgrade
-
Run config check with the new version against your existing configuration. Validation tends to get stricter between versions, so a configuration that starts today may be rejected after the upgrade
-
Check the breaking changes below for anything that applies to you, paying attention to any that change behavior without an error
-
If you write custom providers, authentication, or analytics, check for signature changes and test your scripts with the new version
-
After upgrading, check your logs for deprecation warnings at
warnlevel
0.14.0
- Released
-
October 2026
- Risk
-
Medium
- Commits
- Release notes
Breaking Changes
-
TileJSON only uses the
X-Forwarded-Proto,X-Forwarded-Host, andX-Forwarded-Prefixheaders when the request comes from a proxy listed inserver.forwarded.trusted. Private, loopback, and link-local addresses are trusted by default. If your proxy has a public address, add it totrustedor setbaseurlsin the TileJSON configuration, otherwise thetilesURLs are built from the request tilegroxy received -
The client IP in logs and analytics now comes from the
X-Forwarded-Forheader when the request is from a trusted proxy. It used to always be the address of the connection, so a proxy on a private network would be recorded instead of the client
Highlights
-
Forwarded configures which proxies are trusted and which headers they report the original request in, for example
CF-Connecting-IP -
Rate limiting available. Off by default
-
Configured in the new top-level ratelimit section, and each layer can pick a policy with
ratelimitor opt out withskipratelimit. -
New ratelimit status, ratelimit reset, and ratelimit list commands
-
Rate limit rejections get their own error image, audit log event, and metrics
-
-
The TileJSON document endpoint works for any name a
patternlayer matches, not only the names listed in itsexamples
0.13.0
- Released
-
October 2026
- Risk
-
Medium
- Commits
- Release notes
Breaking Changes
-
SIGHUPnow reloads the configuration instead of shutting down. Anything that relied onSIGHUPto stop the process should sendSIGTERMorSIGINTinstead. See Reloading -
Library use only:
pkg/has been minimized to entity interfaces,Depsstructs, registrations, and the types they reference. See Using tilegroxy as a library for the supported approach
Highlights
-
The pmtiles provider serves tiles directly from a PMTiles archive
-
MapLibre Tiles (MLT) are supported alongside MVT, with new compositemlt and cropmlt providers
-
Bearer authentication validates API tokens stored in a PostgreSQL or Redis datastore
-
Passthrough authentication forwards incoming credentials to an existing HTTP endpoint
-
Layers can pull TileJSON metadata from their provider, for example from a PMTiles archive
-
The disk cache
filemodeaccepts chmod-style values such as"0644" -
Deprecated configuration now logs a warning. The currently deprecated options are listed in Compatibility
0.12.0
- Released
-
September 2026
- Risk
-
High
- Commits
- Release notes
Breaking Changes
-
Health moved from
server.healthto a top-level health section. TheSERVER_HEALTH_*environment variables are nowHEALTH_*and the Helm chart values moved to match -
Custom authentication scripts now implement
func validate(string) tilegroxy.ValidationResult, a struct carryingPass,Expiration,UserID,TenantIDandAllowedLayers, instead of returning four values. See Custom Authentication -
The error section is no longer partially reloadable. Changes to it now require a restart
-
The
ttlof the AWS Secrets Manager secret source changed meaning. It used to control a cache that had little effect. It now triggers a reload of all secrets when it expires -
Library use only: the
Cacheinterface gained aRemovemethod andClientConfig.UnknownLengthis now a*bool
Highlights
-
Authentication can attribute a request to a tenant as well as a user. The new tenant cache namespaces entries so one tenant is never served another’s tile. See Multi-tenant
-
The top-level
cachecan be a list of configurations identified byid, and each layer can pick one. See Overridable caches -
Cache-Control and CORS have dedicated sections. If you set these through
server.headers, consider moving to the new sections. Both are off by default -
An audit log records authentication failures and configuration reloads. Off by default
-
Secrets gained
watchandttloptions so rotated credentials take effect without a restart -
The disk cache supports a
layoutso entries aren’t all written to one directory -
New CLI options: config diff,
seed --purge,seed --max-failures, and--userand--tenanton seed and test
0.11.0
- Released
-
August 2026
- Risk
-
High
- Commits
- Release notes
Breaking Changes
-
server
productionnow defaults totrue. If your configuration doesn’t set it, the splash page, documentation, and layer preview are no longer served. Setproduction: falseexplicitly to keep the old behavior -
Library use only:
Initializeon provider, authentication, and analytics registrations now takes a single dependency struct. Custom scripts are unaffected
Highlights
-
Layers can serve TileJSON documents describing their tiles
-
Layers can declare a data type, zoom limits, and bounds, enforced before the request reaches a provider. They also gained a cache invalidation version
-
The cropmvt provider crops vector tiles to bounds
-
JWT authentication can fetch signing keys from a JWKS endpoint
-
A layer preview page is available when
productionisfalse -
Duplicate concurrent requests for the same tile are coalesced into a single upstream fetch
-
The ttl cache bounds how long entries live in caches without native expiration
-
Timeout responses can be customized and most errors have a vector tile variant. See Error
-
seedcan resume an interrupted run and target a specific cache.testgained JSON and file output -
A Helm chart is available
-
Shutdown and reload now drain in-flight requests instead of dropping them
-
memcachewas renamedmemcachedand thepostgresanalytics was renamedpostgresql. The old names still work but are deprecated
0.10.0
- Released
-
August 2026
- Risk
-
High
- Commits
- Release notes
Breaking Changes
-
Configuration validation is stricter. Unknown keys, an invalid
error.mode, invalid logging levels and formats, duplicate layer IDs, and datastore ID collisions are now errors. Run config check before upgrading -
Special characters in layer names are replaced with an underscore when used in disk and S3 cache keys and telemetry metric names. Layer names that differ only by special characters may now collide. Existing cache entries for such layers will no longer be found. See Layer names
Highlights
-
Analytics records an event for each tile served, to PostgreSQL, ClickHouse, or a custom destination. Off by default
-
ETagandIf-None-Matchsupport, so repeat requests for unchanged tiles return 304. No configuration needed -
Vector tile content types are allowed by default, so proxied MVT works without changing the client
contenttypes
0.9.2
- Released
-
August 2026
- Risk
-
Low
- Commits
- Release notes
Maintenance release updating dependencies. Nothing to act on.
0.9.1
- Released
-
November 2025
- Risk
-
Low
- Commits
- Release notes
Breaking Changes
-
Releases are signed with a new key. If you verify release signatures, import the new public key from the release notes
Highlights
-
The crop provider limits a layer to a geographic area
0.9.0
- Released
-
January 2025
- Risk
-
Low
- Commits
- Release notes
Highlights
-
Hot reloading of configuration supplied by file, enabled with
--hot-reload -
The compositemvt provider combines multiple MVT layers into a single tile
0.8.0
- Released
-
October 2024
- Risk
-
Low
- Commits
- Release notes
Highlights
-
The postgismvt provider generates MVT tiles from a PostGIS table
-
A health endpoint on a secondary port for load balancer and orchestrator probes
0.7.0
- Released
-
September 2024
- Risk
-
Medium
- Commits
- Release notes
Breaking Changes
-
Custom provider scripts now return an image struct instead of a byte array, so they can specify a content type. See Custom Providers
Highlights
-
Documentation is published as a website and served by tilegroxy itself
-
Improved content type handling
0.6.0
- Released
-
August 2024
- Risk
-
Low
- Commits
- Release notes
Highlights
-
OpenTelemetry support for traces, metrics, and logs
-
Cache writes are asynchronous
-
The proxy provider supports
{ctx.query-string}and EPSG:3857
0.5.1
- Released
-
August 2024
- Risk
-
Low
- Commits
- Release notes
Fixes a crash when using the blend provider. Nothing to act on.
0.5.0
- Released
-
July 2024
- Risk
-
Low
- Commits
- Release notes
Highlights
-
Secrets can be read from an external store, starting with AWS Secrets Manager
-
The cgi provider serves tiles from CGI applications such as MapServer
-
tilegroxy can be used as a library
0.4.0
- Released
-
July 2024
- Risk
-
Medium
- Commits
- Release notes
Breaking Changes
-
The per-layer
overrideclientparameter is renamedclient. It now only overrides the values you set and inherits everything else from the top-level client, where it previously replaced the whole client configuration
Highlights
-
HTTPS, including Let’s Encrypt. See Encryption
-
JWT authentication can restrict access to an area using a geohash claim
-
Layers can match a pattern instead of a fixed ID, and the ref provider points one layer at another
0.3.0
- Released
-
July 2024
- Risk
-
High
- Commits
- Release notes
Breaking Changes
Many configuration keys were renamed for brevity:
| Section | Old Key | New Key |
|---|---|---|
JWT |
|
|
JWT |
|
|
JWT |
|
|
JWT |
|
|
server |
|
|
client |
|
|
client |
|
|
client |
|
|
client |
|
|
client |
|
|
logging |
|
|
logging |
|
|
logging.main |
|
|
logging.main |
|
|
logging.main |
|
|
logging.access |
|
|
error |
|
|
Highlights
-
Configuration can come from etcd or Consul and be overridden with environment variables. See Configuration
-
Prebuilt binaries for several operating systems and architectures, with checksums and signatures