Self-hosted web analytics tools are not all trying to solve the same problem.

Some are simple website counters. Some are privacy-first Google Analytics alternatives. Some are product analytics suites with funnels and session replay. Some run entirely on Cloudflare Workers and never touch your homelab. One even skips the tracking script and watches requests at the edge.

This page maps the eleven tools covered on FOSS Engineer so you can pick a stack for a personal site, company site, product, or internal dashboard.

The Short Version

Tool Best For Stack Data Layer
Umami Mature, familiar Google Analytics replacement TypeScript / Next.js PostgreSQL or MySQL
Liwan Minimal privacy-first tracker Rust + Astro/React DuckDB + SQLite
Medama Lightweight cookie-free analytics, portable files Go + React SQLite + DuckDB
Vince Smallest possible deployment Go single binary Embedded storage
Tianji Analytics plus uptime and server status Service stack + web UI PostgreSQL
Rybbit Web and product analytics (funnels, replay) TypeScript / Next.js + Fastify ClickHouse + PostgreSQL + Redis
Swetrix Rich event analytics TypeScript / Nest.js + Remix MySQL + ClickHouse + Redis
Kaunta Full analytics app readable by AI agents (MCP) Rust single binary PostgreSQL
Counterscale Cloudflare-native analytics with long-term rollups TypeScript on Workers Analytics Engine + R2
Chickadee Tiny Cloudflare-native analytics Hono on Workers Analytics Engine + KV
Dashflare Edge request telemetry in Grafana TypeScript Worker + Grafana Loki

Three Families

Classic self-hosted trackers      Product / event analytics        Cloudflare-native
(script -> small app -> DB)       (script -> app + OLAP + cache)   (script or edge -> Workers)

Umami   Liwan   Medama            Rybbit   Swetrix   Kaunta        Counterscale   Chickadee
Vince   Tianji                                                     Dashflare (edge, no script)

Low ops, portable                 More features, more services     Near-zero ops, Cloudflare lock-in
  • Classic self-hosted trackers run happily in Docker on a small VPS or homelab. Backups are a database dump or a couple of files.
  • Product and event analytics add funnels, journeys, goals, and replay. Rybbit and Swetrix split app data from high-volume analytics data (ClickHouse) and caching (Redis), so expect several containers. Kaunta stays a single Rust binary but leans on PostgreSQL.
  • Cloudflare-native tools have no server to patch, but your data lives in Cloudflare services and migrating away means exporting it yourself.

Choosing One

If You Need… Start With
A clean Google Analytics replacement for a website Umami
A small cookie-free tracker with a simple backend Liwan or Medama
The smallest single-binary deployment Vince
Website analytics plus uptime checks Tianji
Product analytics: funnels, journeys, session replay Rybbit
A richer event analytics suite with ClickHouse Swetrix
Analytics that an AI agent can query via MCP Kaunta
No server at all, already on Cloudflare Counterscale (complete) or Chickadee (minimal)
Request-level edge telemetry in an existing Grafana Dashflare
A general BI dashboard over databases and APIs See Web Analytics vs BI

Classic Self-Hosted Trackers

Umami

Umami is the straightforward privacy-friendly Google Analytics alternative and the most mature option here.

Use Umami when you want:

  • simple website traffic analytics with a familiar dashboard
  • cookie-free tracking
  • Docker deployment with PostgreSQL or MySQL
  • easy integration with static sites

Useful links:

Liwan

Liwan is a lightweight privacy-first web analytics tool written in Rust, with DuckDB and SQLite underneath.

Use Liwan when you want:

  • a small tracking script
  • a focused, minimal Google Analytics replacement
  • compact local analytical storage

Useful links:

Medama

Medama pairs a Go API server with a React dashboard and stores data in SQLite and DuckDB files.

Use Medama when you want:

  • a small cookie-free tracker
  • portable local analytics files that are easy to back up
  • a simpler footprint than multi-database stacks

Useful links:

Vince

Vince is a small Go single-binary analytics server with an embedded UI and a Plausible-compatible direction.

Use Vince when you want:

  • the least infrastructure possible
  • a conventional dashboard and reporting workflow
  • Docker deployment without a separate database

Useful links:

Tianji

Tianji combines website analytics with operations-style monitoring.

Use Tianji when you want:

  • website analytics, uptime monitoring, and server status in one dashboard
  • fewer separate tools to maintain for a small web presence

Useful links:

Product and Event Analytics

Rybbit

Rybbit targets both web analytics and product analytics with a polished UI.

Use Rybbit when you want:

  • custom events, goals, funnels, and journeys
  • session replay
  • public dashboards
  • and you are fine running ClickHouse, PostgreSQL, and Redis

Useful links:

Swetrix

Swetrix is a heavier privacy-focused analytics stack built on Nest.js and Remix.

Use Swetrix when you want:

  • broad event analytics and product-style reports
  • MySQL plus ClickHouse storage
  • a more complete platform than a tiny tracker

Useful links:

Kaunta

Kaunta is one Rust binary that serves the no-cookie tracker, collector, dashboard, PostgreSQL-backed reports, backups, and an optional MCP endpoint so agents can read your analytics.

Use Kaunta when you want:

  • full privacy analytics with goals and ingestion APIs
  • built-in backups
  • analytics queryable by both humans and AI agents
  • and you are comfortable operating PostgreSQL

Useful links:

Cloudflare-Native Analytics

These run on Cloudflare Workers instead of your own server. Operations are close to zero, but storage, retention, and migration depend on Cloudflare services.

Counterscale

The Worker serves both dashboard and tracker. Analytics Engine handles recent queries, and a scheduled job writes Apache Arrow rollups to R2 for long-term retention.

Use Counterscale when you want:

  • a complete Cloudflare-hosted analytics product
  • a deployment CLI and optional password protection
  • long-term retention without running a database

Useful links:

Chickadee

A browser script posts pageviews to a Hono Worker. Analytics Engine stores the datapoints, and KV manages sites and daily visitor salts.

Use Chickadee when you want:

  • the smallest Cloudflare-native setup
  • a simple setup page and Basic Auth
  • Chart.js dashboards without extra moving parts

Useful links:

Dashflare

Dashflare is not a browser analytics dashboard. A Worker observes Cloudflare-proxied requests at the edge, hashes session-like identifiers, and ships structured events to a Loki and Grafana stack you control.

Use Dashflare when you want:

  • analytics without any client-side script
  • infrastructure-style dashboards in Grafana
  • and you are comfortable with Loki labels, retention, and exposing a Loki push endpoint

Useful links:

Portability vs. Convenience

The practical choice usually follows the stack you already operate:

  • Already on Cloudflare, want zero servers: Counterscale or Chickadee.
  • Already running Grafana: Dashflare slots in next to your other dashboards.
  • Want data you can back up and move: Kaunta, Medama, Liwan, or Vince. Their storage is a PostgreSQL dump or a few local files.
  • Want the most features and have resources: Rybbit or Swetrix, at the cost of running ClickHouse and Redis.

Whatever you choose, an internet-facing analytics collector is another public service to scan, contain, and back up. The homelab security hardening guide covers that workflow.

Sometimes the question is not “who visited my site?” but “who clicked my link?”. Several URL shorteners covered here include click analytics:

Tool Analytics Angle Hosting
Dub Full link attribution on Tinybird/ClickHouse Cloud-native, heavy to self-host
Snapp Per-link analytics, teams, multi-domain Docker + PostgreSQL
Sink Optional Analytics Engine binding Cloudflare Workers + D1/KV
Slite Local DuckDB analytics Docker + SQLite/DuckDB
YOURLS Basic click counts, plugins PHP + MySQL

Web Analytics vs BI

Web analytics tools answer questions like:

  • How many people visited this site?
  • Which pages performed best?
  • Where did traffic come from?
  • What devices, countries, or browsers are common?
  • Which events or funnels happened inside the product?

BI tools answer broader data questions:

  • What happened across databases, APIs, spreadsheets, and internal systems?
  • Which metrics should teams track?
  • How should SQL models be reused?

If your primary data source is a website tracking script, start here. If it is a database, API, warehouse, DuckDB file, CSV, or semantic model, use the BI tools guide (Chartbrew, Rill, WrenAI, Malloy, DuckDB).