Skip to content

goatcounter

Dashboards & Visualization

An open‑source, privacy‑focused web analytics platform that can be used as a hosted service or self‑hosted alternative to Google Analytics and Matomo.

Go Latest v2.7.0 · 5mo ago Security brief →

Features

  • Privacy‑aware: no unique user identifiers, optional GDPR notice, fine‑grained data control
  • Lightweight & fast: adds ~3.5 KB overhead; supports a JavaScript‑free tracking pixel
  • Easy integration via single script tag, HTTP/REST API, or log‑file parsing

Recent releases

View all 2 releases →
v2.7.0 New feature
⚠ Upgrade required
  • Database migration required: `sizes` table is dropped and `hits.size_id` is replaced with `hits.width`.
  • Automatic cookie `secure`/`sameSite` detection now relies on the proxy sending `Scheme: https` or `X-Forwarded-Proto: https` headers. Verify your reverse proxy sets these before removing any `-tls` flag workarounds.
  • PostgreSQL compose.yaml updated to version 17 with revised settings; review if using the provided compose setup.
Breaking changes
  • The `sizes` table has been removed; `hits.size_id` is replaced by `hits.width`. Upgraders must run database migrations.
  • The `translate-to` query parameter is no longer appended — any tooling or downstream processing relying on it will stop receiving it.
  • The `-websocket` flag is now a no-op; WebSocket support is auto-detected.
Notable features
  • Automatic secure/sameSite cookie detection from proxy headers
  • `-geodb` supports `maxmind:account_id:license` for automatic database updates
  • smtps:// TLS support and SMTP debug tooling added
v2.6.0 New feature
⚠ Upgrade required
  • Go 1.21 or newer is required to compile GoatCounter.
  • Default SQLite DB path changed to ./goatcounter-data/db.sqlite3; old path ./db/goatcounter.sqlite3 is used automatically if it still exists — no action needed for existing installs.
  • Default ACME secrets path changed to ./goatcounter-data/acme-secrets; old path ./acme-secrets is used automatically if it still exists — no action needed for existing installs.
Breaking changes
  • Default -listen and -tls flags changed from :443/tls,rdr,acme to :8080/none — affects deployments that relied on built-in TLS without explicit flags
  • Removed support for legacy window.goatcounter.vars and window.counter in count.js (deprecated 5+ years ago)
  • Individual pageviews no longer stored in hits table by default — CSV export of raw pageviews no longer possible unless re-enabled in settings
Notable features
  • Official Dockerfile and DockerHub images
  • CLI flags can now be set via GOATCOUNTER_«FLAG» environment variables
  • GeoIP database auto-loaded from ./goatcounter-data/*.mmdb

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

About

Stars
5,721
Forks
257
Languages
Go JavaScript Go Template

Install & Platforms

Install via
binary docker

Community & Support

Alternative to

Google Analytics Matomo

Beta — feedback welcome: [email protected]