# Privacy

> No accounts, no tracking, no cookies. Who receives what — the hosting provider and a cookieless page counter.

- Page: https://granularity.tech/legal/privacy
- Last reviewed: 2026-08-31

## The short answer

We do not ask you for anything, and we do not follow you around. There are no accounts,
no forms, no cookies, no advertising, no third-party scripts, and — as of the date at the
bottom of this page — no analytics.

That last one is a statement about today, not a promise about forever — and the promise to
update this page **before** anything changes is now enforced by the build, not by memory:
this page carries a machine-checked claim, and switching analytics on without editing the
text fails the build.

## Analytics

Since 4 September 2026 the site uses **Umami Cloud** (Umami Software, Inc.). The script is
served from `cloud.umami.is`, and data is processed on the provider’s European instance.

The provider is a cloud service, not our own server, which makes it a second processor
alongside the host. A self-hosted counter was the original plan; the decision was changed
deliberately and recorded in `adr/0009`, because running and maintaining one is work a
single maintainer does not have.

- **Cookieless.** No cookie, no `localStorage`, no fingerprint, and therefore no consent
  banner: nothing is written to or read from your device.
- **No visitor identifier.** Not a temporary one, not a hashed one. Two visits cannot be
  joined into a session history, and that is a deliberate limitation we accept.
- **Your IP address.** Like every server in existence, the counter receives it with the
  request. The provider states that it neither stores it nor builds a profile from it; we
  cannot verify that from the inside and so do not present it as our own undertaking. Ours
  is narrower and checkable: nothing beyond the list below is ever sent, and that list is
  closed and held by a build gate.
- **Do Not Track and Global Privacy Control are honoured before the first request** — if
  your browser sends either, nothing is sent at all.
- **What is measured**: which page was opened, and a short list of named actions — an
  install command copied, a code block copied, the playground used, the theme or language
  switched, a link followed off the site. Each carries the page and, at most, which button
  it was. Nothing about you.
- **What is never measured**: mouse movement, session recordings, heatmaps, scroll depth.

The counter only receives events from pages on `granularity.tech`. Preview deployments,
the nightly staging build and local builds never reach it — the restriction sits on the
script tag itself.

The second counter is the host’s, described below in the Cloudflare section. It accepts no
custom events: it counts page views and loading speed.

If you would rather not take part: turn on Do Not Track or Global Privacy Control and the
portal sends nothing at all, or block `cloud.umami.is`. The site behaves identically
either way — analytics affects nothing on the page.

## What we hold about you

Nothing. There is no database, no account, no profile, no mailing list, no contact form.

The one way we can learn anything about you is if you write to us yourself — by email, or
by opening an issue on GitHub. Then we have what you sent us, for as long as the
correspondence is useful.

## What the hosting provider sees

The site is served as static files by **Cloudflare, Inc.** (Cloudflare Pages). Like every
web server on earth, theirs receives the request: the address you asked for, your IP
address, your browser's user agent, and the time. Cloudflare processes this to deliver the
page and to protect the service from abuse, under
[their privacy policy](https://www.cloudflare.com/privacypolicy/).

We do not receive those logs, do not analyse them, and do not join them to anything.

**Cloudflare also counts traffic.** Besides serving pages it has its own statistics turned
on — Cloudflare Web Analytics. It is likewise cookie-less and carries no visitor identifier,
and it measures what our own counter cannot: loading speed for real people, on real devices
and real connections. The portal does not add it — Cloudflare injects the script at the
edge, after the build has already shipped.

There are therefore **two** recipients of data, and both are named: our counter and the
host. Neither sets a cookie or creates an identifier.

## Third parties on the page

None. Fonts are served from this domain, not from a font CDN. There is no embedded video,
no comment widget, no chat, no tag manager, no pixel. Every byte the page loads comes from
`granularity.tech`.

Links leading off the site are ordinary links; once you follow one, that site's own policy
applies.

## What we deliberately do not do

- No cross-site tracking, no advertising identifiers, no fingerprinting.
- No persistent visitor identifier of any kind.
- No selling, renting or sharing of data — there is none to sell.
- No profiling and no automated decision-making.

## Your rights

Under the GDPR you have the right of access, rectification, erasure, restriction,
portability and objection. We answer such requests, and in the usual case the honest
answer will be that we hold nothing about you. Write to
[privacy@granularity.tech](mailto:privacy@granularity.tech); we aim to reply within
30 days.

If you believe your data has been mishandled you may complain to your national data
protection authority.

## Children

The site is documentation for software developers. It is not directed at children and
collects nothing from anyone, of any age.

## When this page changes

The date at the bottom is not decoration. Any change to what is collected takes effect
only after this page says so — the page is updated first, the change ships second.

## Contact

[privacy@granularity.tech](mailto:privacy@granularity.tech). For security reports use the
separate address on the [Security](/legal/security) page.
