picking an analytics provider
goatcounter is the goat
went with goatcounter. signed up, added the script tag to the root layout, done.
it checked every box. free hosted for personal sites with no event caps or tier limits, open source under EUPL, cookie-free so no consent banners, and the script is ~3.5kb which is negligible. the dashboard shows exactly what i wanted (page views, referrers, top pages, rough geography) and nothing i didn't.
the deciding factor over umami cloud was simplicity. umami's free tier caps at 10k events per month and the company makes money from paid plans so the free tier is a funnel that could change. goatcounter's hosted service is donation-supported with no usage limits mentioned. one fewer thing to think about.
setup took about two minutes. sign up, copy the script tag, add it to the Next.js root layout via next/script, deploy.
everything below is the original draft where i compared providers and worked through the decision.
i'd like to know if anyone's reading this. the answer is probably zero and that's fine, WFD 16 covers why i write regardless. i'd just like to know.
what i actually need
page views, referrers, top pages, rough geography. which WFDs get read, where traffic comes from if it comes from anywhere. nothing else.
the rules
- open source
- free
- no cookies, no consent banners
- lightweight
- no google analytics
what got cut
| provider | why it's out |
|---|---|
| proprietary, vendor-locked, the data belongs to vercel | |
| proprietary, $15/mo minimum | |
| proprietary, €9/mo minimum | |
| open source, ~70kb script, full product analytics suite with session replays and feature flags. forklift for a pencil. | |
| open source, uses cookies by default, requires a consent banner unless you disable everything useful. at that point you've built a worse goatcounter. | |
| google analytics | no. |
what's left
| provider | license | free hosted? | self-hosted? | script size | github stars |
|---|---|---|---|---|---|
| EUPL | yes (personal use) | yes | ~3.5kb | ||
| MIT | yes (10k events/mo) | yes | ~2kb | ||
| AGPL | no | yes | <1kb | ||
| Apache-2.0 | no | yes | <1kb | ||
| MIT | no | yes | ~1kb |
everything in this table is cookie-free and privacy-respecting by design. that's the baseline, not a feature.
goatcounter
goatcounter is made by
Martin Tournoij and offered as a free hosted service for personal and small sites. no account limits, no event caps, just "reasonable public usage." donation-supported via
GitHub Sponsors.
the script is ~3.5kb with a no-JavaScript tracking pixel fallback and log file import if you want zero client-side code. the dashboard covers page views, referrers, browsers, screen sizes, locations. written in Go, self-hostable with SQLite or PostgreSQL.
it is a one-person project. if Martin stops maintaining it the hosted service could disappear, and the code is open source so worst case i run it myself or migrate.
umami
umami has the most GitHub stars of any open source analytics tool (35.2k). MIT licensed. the cloud free tier gives 10k events per month.
built with Next.js, PostgreSQL-backed, ~2kb tracking script. the free tier is relatively new and the company makes money from paid plans so it's a funnel. 10k events/month is generous now and could shrink later.
plausible
plausible has the smallest tracking script at under 1kb. AGPL licensed, EU-based, funded entirely by subscribers. 24.2k stars. everyone recommends it.
there's no free hosted tier. $9/mo minimum. self-hosting the Community Edition is free and requires ClickHouse and PostgreSQL, making it the heaviest self-hosted option. premium features are stripped, releases come twice per year, no official support. a lot of infrastructure for page view counts.
shynet
shynet works without any JavaScript at all using a 1x1 tracking pixel. self-hosted only, built with Django, under 1kb when the script is used. tracks page load times, bounce rates, session durations, referrers, device info. respects Do Not Track headers by default.
the last release was July 2023. 51 open issues, 9 open PRs. Django means another stack on the homelab.
ackee
ackee has probably the prettiest dashboard of the bunch. Node.js, GraphQL API, MIT licensed, multi-step anonymization. self-hosted only, ~1kb tracking script.
less actively maintained than goatcounter or umami. GraphQL for personal analytics feels like overkill.
where i'm leaning
goatcounter. sign up, add a script tag, done. nothing to maintain, no event caps to worry about. the ~3.5kb script is the biggest here and still negligible.
umami cloud is the runner-up with a more polished dashboard. goatcounter not having tier limits makes it simpler.
if goatcounter disappears i'll self-host umami. i already know the stack.
haven't set anything up yet. writing this down to think through it first.
does it matter
arguments against:
- the writing doesn't change based on who reads it
- checking analytics becomes a habit that adds nothing
- zero readers is a valid outcome and i already accepted that
arguments for:
- knowing which WFDs get read helps me understand what resonates
- referrer data shows if anything i write gets shared anywhere
- there's a difference between accepting zero and confirming zero
probably not. there's something satisfying about a page view counter that isn't zero, even if it's just me checking whether the deployment worked. and if it is zero, that's fine too.