Analytics that forgets you every night.

A 1 KB script, no cookies, no consent banner, and reports that answer the question before you finish asking it.

Start collecting →
0.97 KBgzipped tracker
0cookies set
24 huntil a visitor is unlinkable
retention on reports

What it does not know about your visitors

The install

<script defer src="https://your-worker.workers.dev/k.js" data-site="abc123"></script>

Custom events, when you want them:

kestrel('signup', { plan: 'pro' })

Ship it something that looks personal — an email, a phone number, a token — and it is refused at the door and reported back to you, rather than quietly retained.

Weight, measured

ScriptGzippedRequests / pageview
Kestrel0.97 KB1–2
Plausible1.26 KB1
Fathom2.04 KB1
Umami2.25 KB1
Google Analytics 4143 KB*2+

* gtag.js alone, before the second-stage payload it fetches at runtime, so the real gap is wider than shown. Every figure here was measured on 26 Aug 2026 by pulling each vendor's script from their own CDN and gzipping the delivered bytes — not quoted from documentation. Re-measure before reusing these: vendors ship new builds.

Why it stays fast as it grows

Raw events are short-lived. A cron folds them into pre-aggregated rollups, and every report above "the last 30 minutes" reads those instead — so a dashboard load costs a few dozen row reads whether the site did a thousand pageviews last month or ten million. Unique-visitor counts are kept in HyperLogLog sketches, which means a date range reports the real distinct count instead of summing per-day uniques and double-counting everyone who came back.