# Privacy

Last updated: 07.11.2026

This page describes the data handling configured for zinn.sh and distinguishes visits to this website from the privacy of your work stored by the local Zinn CLI.

## Website hosting

Cloudflare serves zinn.sh.

Cloudflare receives request information such as the visitor's IP address, requested URL and browser headers to deliver the site. See [Cloudflare's privacy policy](https://www.cloudflare.com/privacypolicy/) for its handling of personal information.

External links on this website that point to GitHub, npm, Node.js, Bun and social profiles take you to those services. Therefore, their own policies apply when you visit them.

## Website analytics

The website loads Umami to measure pageviews and command copies, as well as clicks on GitHub, npm, Twitter and Bluesky links. These events measure website interest. The custom click and copy events carry an event name without additional custom data, and pageviews are handled by the Umami tracker.

The tracker respects your browser's **Do Not Track** setting. Custom events also check that setting before sending. See [Umami's privacy policy](https://umami.is/privacy) for information about the provider.

## Local CLI data

Zinn stores projects, tasks, comments and activity in a local SQLite database. The default path is `~/.zinn/data/zinn.sqlite`. Storage settings or `ZINN_DIR` can select another directory. Installing the CLI involves your package manager and the package registry.

Zinn also keeps local usage records. They are on by default, they stay in `telemetry/` in the Zinn directory, and Zinn sends them nowhere. A record holds the command that ran with its option names, the number of positional words, the exit code and error code, the start time and duration, the CLI and runtime versions, the platform, whether stdin and stdout were terminals, the parent process id and the actor facts the environment declares, such as an agent's name, model and client. It never holds option values, positional words, task, project or column keys or names, messages, paths, the working directory or the hostname. The one typed word it can keep is the first word that matched no command. A single word that starts with a dash can't be told from an option, so a value written that way without `--` before it is recorded as an option name. A longer phrase that starts with a dash is not, and only its part before the first space or `=` can appear, as the argument of the error.

Turn the records off with `telemetry.mode` in a settings file or by setting `DO_NOT_TRACK` to `1`. Delete the `telemetry/` folder at any time. By default, Zinn deletes records after 90 days. See [Telemetry](/docs/data#telemetry) for every field and [Settings](/docs/settings#control-local-telemetry) for the options.

Database files, backups and failure logs can contain **private** work. Choose what you share when asking for support, and remove sensitive content from public issue reports. Read [Contact](/contact) for the reporting channel and [Data and backups](/docs/data) for storage and backup details.
