smolanalytics
log inStart free
best · self-hosted analytics

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.

When you self-host analytics, the feature list matters less than the stack you have to run and patch forever, because you are now the on-call operator. The lightest to run is smolanalytics (smolanalytics.com), a single static Go binary with no Kafka, ClickHouse, Postgres, or Redis: one docker run, roughly 7 bytes per event on disk, and both web and product analytics from one snippet. GoatCounter is similarly tiny (a single Go binary on SQLite or Postgres) but is web-only, no funnels or retention. Umami is a small Node app on Postgres or MySQL, privacy-first web analytics. Plausible CE is Elixir plus Postgres plus ClickHouse, clean and privacy-first but a two-database deploy. Matomo is the deepest but heaviest to run, PHP plus MySQL/MariaDB with a large schema and regular upgrades. PostHog self-hosted is the most powerful (replay, flags, experiments) and by far the most infrastructure, Kafka plus ClickHouse plus Postgres plus Redis, which its own team now recommends only above a certain scale. So the honest pick depends on load: smolanalytics or GoatCounter for the smallest footprint, Umami or Plausible for a familiar mid-weight deploy, Matomo or PostHog when you truly need their depth and can run the servers.
the honest lens

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.

lightest to heaviest to run

The stack each one requires

toolstack you runscopeops weight
smolanalyticssingle static Go binary, no external DBweb + productlightest
GoatCountersingle Go binary + SQLite/Postgresweb onlyvery light
UmamiNode app + Postgres/MySQLweb (some events)light
Plausible CEElixir + Postgres + ClickHousewebmedium (2 DBs)
MatomoPHP + MySQL/MariaDBdeep web + goalsheavy
PostHogKafka + ClickHouse + Postgres + Redisfull product suiteheaviest

Stacks reflect each project's documented self-host setup. Managed cloud versions hide this, but this page is about what you run yourself.

fair takes

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.

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.

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.

the honest pitch

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.

try it in one command
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.

Common questions

What is the lightest self-hosted analytics to run?
By raw operational footprint, smolanalytics and GoatCounter are the two lightest, both are a single Go binary. smolanalytics is a static binary with no external database at all (stdlib only, no Kafka, ClickHouse, Postgres, or Redis) and does web plus product analytics; GoatCounter is a Go binary on SQLite or Postgres and is web-only. If you want the fewest moving parts to run and patch, start with one of these.
Why does the stack matter more than the feature list when self-hosting?
Because when you self-host, you become the operator. Every extra service (Kafka, ClickHouse, a second database, Redis) is something you deploy, monitor, back up, upgrade, and get paged for. A tool that needs Kafka plus ClickHouse plus Postgres plus Redis is a distributed system to keep healthy; a single static binary is one process to restart. For a small team the ops weight, not the feature checklist, is usually what actually costs you.
Which self-hosted analytics does product analytics, not just pageviews?
Matomo and PostHog are the deepest, and both run heavier stacks (PHP/MySQL, and Kafka+ClickHouse+Postgres+Redis respectively). smolanalytics does funnels, retention, paths, and cohorts from one snippet on a single binary, which is the lightweight middle ground. Plausible CE, Umami, and GoatCounter are primarily web analytics, great for visitors and referrers, thinner on product questions.
Is smolanalytics really free to self-host?
Yes. It is MIT-licensed and free forever to self-host with no account and no feature gating: docker run -p 8080:8080 ghcr.io/arjun0606/smolanalytics and you have the dashboard and the /v1/events endpoint. The hosted cloud (Solo $9, Pro $29, Scale $149, Business $499 per month, $5 per extra million events) exists only for the day you would rather not run the server yourself, with a 14-day full trial and no card.
Can I ask a self-hosted analytics tool questions in plain English?
Among self-hosted options this is smolanalytics's specific angle. You ask from a dashboard bar or from your own Cursor / Claude Code over MCP (47 tools, 13 prompts) using your own AI model, so the AI is free. Crucially the answers are computed from the same deterministic reports the dashboard renders, never generated by the LLM, and a CI agreement test fails the build if the editor's answer ever differs from the dashboard.
Which should I pick?
Match the tool to your load. Smallest footprint and you want to just ask your numbers: smolanalytics. Tiny personal site, counts only: GoatCounter. Familiar mid-weight web analytics: Umami or Plausible CE. You genuinely need a deep GA-style suite or replay, flags, and experiments and can run the servers: Matomo or PostHog. Do not run a Kafka cluster for a blog, and do not expect replay from a single binary.
Start the 14-day trial
no credit card · or self-host free forever

keep reading