Umami

Simple, fast, privacy-focused web analytics

Web Analytics ★ 39k stars Easy setup MIT

Umami is a simple, fast, privacy-focused alternative to Google Analytics that collects no personal data and uses no cookies. It targets developers and site owners wanting easy, ethical analytics. It is deployed via Docker.

Umami setup guides & articles

Hands-on coverage of Umami from the blog.

Key features

  • Cookie-free privacy analytics
  • Clean modern dashboard
  • Multi-site and multi-user
  • Tiny tracking script

Pros & cons

Strengths

  • Very easy to self-host
  • Privacy-friendly
  • Clean interface

Trade-offs

  • Fewer features than Matomo
  • Requires a database

Umami replaces

Last reviewed Aug 26, 2026 · 815 words

Umami is the self-hosted analytics tool I recommend when someone wants Google Analytics gone by tonight. One Postgres container, one app container, a script tag, and you have pageviews, referrers, countries, devices and custom events with no cookies and no consent banner to argue about. 512 MB of RAM covers it. The compose file below is the entire install.

The whole deployment

services:
  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:umami@db:5432/umami
      APP_SECRET: replace-with-a-long-random-string
    depends_on:
      - db
    restart: unless-stopped
  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: umami
      POSTGRES_DB: umami
    volumes:
      - ./umami-db:/var/lib/postgresql/data
    restart: unless-stopped

Start it, open port 3000, log in as admin with the password umami, and change that password immediately. Add a website, then paste the generated tag into your site's <head>:

<script defer src="https://stats.example.com/script.js" data-website-id="your-website-id"></script>

Put Caddy or your existing reverse proxy in front for TLS. MySQL is supported through the mysql-latest image tag if you already run it, but Postgres is the path the project tests hardest.

The 2 env vars that save your data from ad blockers

Filter lists block requests to any path called script.js on a host that looks like analytics, and a good share of technical audiences run uBlock Origin. Umami handles this with 2 settings: TRACKER_SCRIPT_NAME renames the script (set it to something like stats-tracker and load /stats-tracker.js instead), and COLLECT_API_ENDPOINT renames the /api/send collection path. Combine both with a first-party subdomain and you recover most of the sessions a stock install silently loses. On a developer-focused site I have seen the difference land around 20 to 30 percent of visits; your audience will vary.

What you get, and the wall you hit

The dashboard is one page per site: visitors, views, bounce, visit time, then breakdowns by page, referrer, browser, OS, device, country, city and UTM. Custom events are a data-umami-event attribute on any element or a umami.track() call, and event properties can carry small payloads. The reports section adds funnels, retention, goals and user journeys; teams let several people share sites with per-site roles, and a per-site share link publishes a read-only dashboard, which is how I show visitor numbers to a client without creating an account for them. A realtime view shows the last few minutes of traffic, useful for checking that the tag fired after a deploy. An API with tokens exists if you want to pull numbers into your own dashboard.

The wall is depth. There is no session replay, no heatmaps, no per-visitor profile timeline, no e-commerce module of the kind Matomo ships, and campaign attribution stops at UTM parameters. A marketing team needing those will find Umami a summary rather than a tool. For a blog, a docs site, a SaaS landing page or a homelab, the summary is exactly what you wanted.

Umami vs Plausible in one paragraph

Both are cookie-free and light; the difference is what you pay and how you deploy. Plausible Community Edition wants Postgres plus ClickHouse and is deliberately trimmed compared with its paid cloud, while Umami is MIT-licensed with one database and the same features everywhere. Plausible's interface is arguably prettier; Umami's is more configurable and handles many sites per instance without friction. The Plausible vs Umami comparison goes deeper, and the notes on leaving Google Analytics cover what you give up from GA4 either way.

Keeping it alive

Updates are docker compose pull && docker compose up -d; the app runs its database migrations on start, so back up the Postgres volume first with pg_dump. Keep the app and database on the same compose file so the two upgrade together; a Postgres major-version jump needs a dump and restore, and doing it beside an Umami upgrade is how people end up with an empty dashboard. Data grows slowly, a few hundred bytes per pageview, so a 10,000-visit-a-month site accumulates well under 1 GB a year. Umami also sells a cloud version with a free tier if you would rather not host at all, and the tracking script is identical, so moving between the two later is a config change.

What I'd do

The compose file above on whatever box already runs your reverse proxy, TRACKER_SCRIPT_NAME and COLLECT_API_ENDPOINT set on day one, a stats. subdomain under your own domain, and a weekly pg_dump into your existing backups. Fifteen minutes of setup, then leave it alone. Reach for Matomo only if someone specifically needs heatmaps or e-commerce reports, and Plausible only if its interface wins the room.

Compare Umami

19 head-to-head comparisons.

Similar web analytics apps