2025-12-15 v2.7.0
This release contains a number of incremental improvements and fixes. Nothing especially major.
Also available on DockerHub: https://hub.docker.com/r/arp242/goatcounter
Features
-
The
-geodbflag now accepts-geodb=maxmind:account_id:licenseto automatically download updates. Seegoatcounter help servefor the full documentation. -
Automatically detect
secureandsameSitecookie attributes. Previously this relied on the correct usage of the-tlsflag, which people often got wrong. Now it's detected from the client connection.This depends on the proxy to set the
Scheme: httpsorX-Forwarded-Proto: httpsheader, which most should already do by default. -
WebSocket support is now detected automatically, without the need to set the
-websocketflag (which is now a no-op). -
Store bot pageviews in a new
botstable for 30 days. This table is never accessed, but it can be useful for debugging purposes. -
Read the
GOATCOUNTER_TMPDIRenvironment variable as an alternative way to setTMPDIR. Mainly intended for cases whereTMPDIRcan't be used (e.g. when the capability bit is set on Linux). -
Use PostgreSQL 17 in compose.yaml; also update the PostgreSQL settings to be less conservative.
-
The
-smtpflag now also supportssmtps://URLs for TLS connections (previously it only supported STARTTLS). To help with debugging you can now also add?debug=1to print SMTP traffic to stderr, or use the new Server Management → Email page for testing the SMTP connection. -
Add more detailed totals to
/api/v0/stats/totals. Previously it would only return the grand totals; now it also returns the totals broken down by hour and day. -
Allow finding paths by name in the API. Everything that accepts
include_paths=..andexclude_paths=..now also acceptspath_by_name=trueto finds paths by the path rather than ID. -
Expand filter syntax with some keywords such as
at:startandin:path. See the tooltip on the filter input. -
The JS-based datepicker can be disabled in the user settings.
-
Add buttons to navigate by year on the dashboard.
Fixes
-
Don't add
translate-to=..to query parameters. Previously it would set this from Google Translate parameters so you could see which languages people were using with that, but I don't think anyone ever used that and it just split paths for no good reason. -
Make sure CLI flags with a
.such as-user.emailcan be set from environment (asUSER_EMAIL). -
Adjust screen size categories for more modern devices.
-
API Tokens will now work for all sites the user has access to.
-
Fix default
combined-vhostandcommon-vhostlog formats from$host:[..]to$host [..]. -
Include all sites in email reports, instead of just the first site that was created.
-
Fix merging of multiple paths when more than one path has entries for the same hour.
-
Store Campaign in hits table.
-
Make sure the visitor counter works for events; previously it only worked for paths.
-
Set CORS headers for API.
-
Pass
hideui=1when redirecting with access-token. -
Fix pagination of Top referrers.
-
Fix page count for text table after pagination.
-
Remove
sizestable; was only used forhits.size_id, which is now replaced withhits.width. This indirection didn't really add much. -
Correctly display error on widgets; previously it would just display
errors.errorString Value. -
Disable daily view if less than 7 days are selected as it just looks weird.