Back to Blog

Recorde is now open source

Ronan··3 min read
Open SourceSelf-hostingPrivacyAnnouncement

Recorde is now open source. The whole stack, from the tracking script to the ingestion service to the dashboard, is in one public repository under the Apache License 2.0. You can run it on your own server, read every line of what it collects, and change it if you disagree with any of it.

There are no plans, no pageview caps, and no hosted tier to upsell you to. You pay for the server it runs on and nothing else.

What is in the repository

services/ingestion/   Go: event collection, tracking script, stats API
services/dashboard/   Next.js: auth, site management, analytics UI
packages/tracking/    The browser tracking script
db/                   Schema for fresh installs and local seed data
docs/                 User and operator documentation
observability/        Optional Prometheus / Grafana / Loki / Tempo config

Three services make up a running instance:

ServiceWhat it does
dashboardSign-in, site management, analytics UI
ingestionServes the tracking script, collects events, answers stats queries
dbTimescaleDB (PostgreSQL 17)

The dashboard gives you pageviews, visitors, bounce rate, a realtime counter, top pages, referrers, countries, devices, browsers, operating systems, UTM campaigns, entry pages, user journeys, custom events with metadata, and CSV/JSON export. You can invite read-only viewers per site.

What has not changed

The privacy model is the same one Recorde has always had:

  • No cookies. Visitors are counted with a rolling session ID kept in sessionStorage.
  • No IP addresses stored. Country is derived in memory and the IP is discarded before anything is written.
  • Lightweight. The tracking script is about 1 KB gzipped and can be pinned with a Subresource Integrity hash.
  • Global Privacy Control is honoured, and every site gets a one-click opt-out.

The difference is that now none of this has to be taken on trust. The security documentation lists each measure alongside the file it lives in.

Running it

For a local look, you need Docker with the Compose plugin:

git clone https://github.com/ronanpdh/recorde-analytics.git
cd recorde-analytics
cp .env.example .env

Set POSTGRES_PASSWORD and JWT_SESSION_SECRET (any string of 32+ characters) in .env, then:

docker compose up --build

Open http://localhost:3000, enter your email, and grab the sign-in link from the dashboard log:

docker compose logs dashboard | grep "Sign in:"

Add a site, copy the snippet from its Setup page into your website's <head>, and you are done.

For a real server with HTTPS and email, the deployment guide walks through a single-machine install with Docker Compose behind Caddy. A 2 vCPU / 2 GB VPS is plenty for most personal and small business sites.

Open source, self-hosted analytics. No cookies, no personal data.

Read the deployment guide

Contributing

Issues and pull requests are welcome. The contributing guide covers the layout of the repository and how to run every check CI runs locally. If you find a security problem, please email rather than opening a public issue.

If you have been using Recorde already, thank you. If you are just finding it, the repository is the place to start.

Run Recorde on your own server.

Clone the repository, bring up the stack, paste the snippet. Keep it if it fits.

  • One Docker Compose stack: dashboard, ingestion service, database.
  • Minutes to first pageview. One script tag on your site.
  • Run alongside your existing analytics. No disruption.
  • Apache 2.0. No plans, no seats, no usage caps.
Read the deployment guide