Cookie-less web analytics in the Plausible mould: one small script, no personal data, a clear
dashboard. Host: analytics.<d>. Binary: analyticsd. Stage 7.
Raw events partitioned by day (kept 30 days by default), hourly and daily rollups kept for good.
pages' simple per-deploy view counter stays in pages.
-
Script analytics.<d>/js/<key>.js (under 1 KB, no cookies or storage, Do Not Track and webdriver
respected): page views and SPA navigations (pushState, popstate), outbound link clicks, file
downloads, 404s (pagesd marks the script data-status="404" on not-found pages), and
xvii.track(name, props) for goals. It posts to /api/event in Plausible's shape, so Plausible
trackers work with d set to the site's key.
-
Apps: appsd relays every app request, so a linked app's traffic is counted server-side (pages and
API calls; not a browser's scripts, styles, images, fonts or fetches) and sent to POST /api/v1/hits
in batches with apps' own token; crawlers and monitors are dropped there, other programs count (an
API's callers are its traffic). No script is injected into apps.
-
Visitors: a hash of the day's salt (in salts, deleted the next day), the site, the address and the
user agent — nothing that identifies a person is stored. A visit is a visitor's day; a bounce is a
visit with one page view; the duration is its first to last event.
-
Countries from DB-IP's free country database (CC BY 4.0), DATA_DIR/country.mmdb, fetched monthly
from the ip-location-db package on jsDelivr (db-ip.com itself is slow); device, browser and system from
the user agent.
-
Dashboard: unique visitors, page views, bounce rate, visit duration, visitors now (last 5 minutes),
the chart by hour (up to two days) or day, and top pages, entry and exit pages, hosts, referrers, UTM
source, medium and campaign, countries, devices, browsers, systems and goals; any row filters the
whole dashboard. Ranges: 30 minutes to 12 months; past the site's retention (30 days by default) only
the daily chart, from days, which are kept for good.
-
Sharing: a site's switch makes analytics.<d>/share/<token>, the panel's public route.
-
Links: pages aliases (the script on every page) and web apps (server-side counting); analytics' own
token through pages' scripts route and apps' integrations route.
-
Limits analytics.sites, analytics.events (a month; over it, events are dropped quietly).
-
Not yet: a stats API for other services (pages still shows its own per-deploy views), funnels, an
e-mailed report.
-
A shared dashboard's own host name: with the dashboard shared, Own domain in xvii domains attaches a
name to it (target "analytics dashboards"); the name shows the dashboard at its root and the share link
becomes it. Journal site.domain.