Best self-hosted analytics. Judged on what you have to run.
When you self-host, you become the operator. So this roundup compares the honest self-host angle, the stack each tool drags in and that you patch forever, not just the feature checklist. One Go binary vs Kafka+ClickHouse vs PHP+MySQL is a bigger difference than any dashboard.
Why the stack matters more than the feature list
Every "best self-hosted analytics" list ranks by features. But the moment you self-host, the feature you use most is the one that pages you at 2am. Each extra service, Kafka, ClickHouse, a second database, Redis, is something you deploy, monitor, back up, upgrade, and debug. That ongoing cost is usually larger than any feature gap, especially for a small team or a single site.
So the useful question is not "which has the most features" but "how much am I signing up to run." A single static binary is one process to restart. A four-service distributed system is a job. The table below sorts the field by exactly that, from lightest to heaviest to operate, then the cards give each tool a fair take.
The stack each one requires
| tool | stack you run | scope | ops weight |
|---|---|---|---|
| smolanalytics | single static Go binary, no external DB | web + product | lightest |
| GoatCounter | single Go binary + SQLite/Postgres | web only | very light |
| Umami | Node app + Postgres/MySQL | web (some events) | light |
| Plausible CE | Elixir + Postgres + ClickHouse | web | medium (2 DBs) |
| Matomo | PHP + MySQL/MariaDB | deep web + goals | heavy |
| PostHog | Kafka + ClickHouse + Postgres + Redis | full product suite | heaviest |
Stacks reflect each project's documented self-host setup. Managed cloud versions hide this, but this page is about what you run yourself.
The tools, one honest read each
smolanalytics
Web + product analytics (visitors, referrers, funnels, retention, paths, cohorts) from one snippet, plus a verdict on what to fix and a plain-English ask bar.
- stack
- One static Go binary. stdlib only, no Kafka, ClickHouse, Postgres, or Redis. docker run, ~7 bytes per event on disk.
- strength
- Lightest thing here to run and the only one you can ask in plain English (dashboard bar, or your own Cursor / Claude over MCP with answers computed from deterministic reports, never guessed). MIT, self-host free forever.
- tradeoff
- Young, and deliberately narrow: no session replay, feature flags, experiments, heatmaps, or surveys. If you need those, it is the wrong tool.
Plausible CE
Plausible CE vs smolanalytics →Privacy-first, cookieless web analytics with a clean dashboard. The community edition is the self-host build of the hosted product.
- stack
- Elixir app plus Postgres plus ClickHouse. A two-database deploy (Postgres for app data, ClickHouse for events).
- strength
- Well-loved, GDPR-friendly by default, and a genuinely nice UI. A mature, actively maintained project.
- tradeoff
- It is web analytics, not product analytics, funnels are basic and there are no cohorts or retention curves. Running ClickHouse alongside Postgres is real operational weight for a small site.
Lightweight, privacy-focused web analytics with a simple dashboard, one of the most popular self-hosted options.
- stack
- A Node.js app on Postgres or MySQL. Single database, straightforward container deploy.
- strength
- Easy to stand up, cookieless, actively developed, and light on resources for pure web analytics.
- tradeoff
- Web-first: it has grown some event and funnel features but is not a deep product-analytics tool, and there is no computed ask-in-plain-English or verdict layer.
The long-standing open-source GA alternative. Very deep: web analytics, goals, e-commerce, plus paid plugins for heatmaps, session recording, and more.
- stack
- PHP plus MySQL/MariaDB. A large schema and a substantial app that needs regular upgrades and a tuned database at volume.
- strength
- Maturity and breadth. If you want a full GA-style suite you own, and you are comfortable running a PHP/MySQL app, it covers a lot.
- tradeoff
- The heaviest classic stack to keep healthy, the UI is dense, and several advanced features are paid plugins. Real DBA-style care is needed as traffic grows.
PostHog (self-hosted)
PostHog (self-hosted) vs smolanalytics →A full product-analytics suite: events, funnels, retention, session replay, feature flags, experiments, surveys.
- stack
- The heaviest here: Kafka plus ClickHouse plus Postgres plus Redis (plus the app). A distributed system, not a single service.
- strength
- By far the most capable feature set in this list. If you need replay, flags, and experiments in one owned tool, nothing else here matches it.
- tradeoff
- PostHog's own team now steers self-hosters to their cloud below a certain scale, because running the cluster reliably is a real job. Powerful, but a serious ops commitment.
GoatCounter
Minimal, privacy-friendly web analytics focused on simple visitor counts and referrers, with a famously light footprint.
- stack
- A single Go binary on SQLite (or Postgres). About as small to run as it gets.
- strength
- Tiny, fast, and pleasant for a personal site or blog where you want counts without cookies or a cookie banner.
- tradeoff
- Web-only and intentionally minimal, no funnels, retention, cohorts, or product analytics. It is not trying to be a product-analytics tool.
No tool here is bad. They are built for different loads. The right pick is the one whose stack matches how much you are willing to operate, and whose scope matches the questions you actually ask.
Where smolanalytics fits, and where it does not
smolanalytics is the lightest option that still does product analytics. It is a single static Go binary, stdlib only, with no Kafka, ClickHouse, Postgres, or Redis to run, storing roughly 7 bytes per event. One docker run gives you visitors, referrers, funnels, retention, paths, and cohorts from one snippet, plus a verdict on what to fix and a morning brief.
Its real differentiator beyond the footprint: you ask your numbers in plain English, from a dashboard bar or from your own Cursor / Claude Code over MCP (47 tools, 13 prompts) with your own AI model, so the AI costs you nothing. The answers are computed from the same deterministic reports the dashboard renders, never generated by the model, and a CI agreement test fails the build if the two ever disagree. It has cookieless mode (no consent banner) and importers from PostHog, Umami, CSV, and JSONL.
The honest limits: it deliberately does not do session replay, feature flags, experiments, heatmaps, or surveys. If those are the point for you, PostHog or Matomo are the right call and you should budget for their stacks. smolanalytics is for teams who want a straight, computed answer on what to fix, on infrastructure they can actually run.
docker run -p 8080:8080 ghcr.io/arjun0606/smolanalytics
Dashboard on localhost:8080, ingestion at /v1/events. Source is MIT at github.com/Arjun0606/smolanalytics.