ymmv.fyi/

privacy

This page lists what ymmv.fyi and its CLI keep about you. It is written from the code, not as a legal policy, and the code is public at github.com/ymmv-fyi/ymmv if you want to check a line.

What the server stores

The database (Cloudflare D1) keeps your data in four tables:

Tokens don't expire. Each one works until its row is revoked or deleted: ymmv logout revokes the one on that machine, signing in again revokes the one it replaces, and ymmv delete deletes every token row on your account, live or revoked. A revoked row stays in the table until ymmv delete deletes it.

What the server doesn't store

Sign-in asks GitHub for no OAuth scopes, which limits that GitHub token to read-only access to public information. Neither the CLI nor the server revokes it afterwards. To remove ymmv's access on GitHub's side, revoke it at github.com/settings/applications. That doesn't sign you out of ymmv. ymmv logout signs out the machine you run it on.

Logs and rate limits

The server writes a log line only when a request fails. A few of those lines name the handle or GitHub account id involved, and none contains a token. They go to Cloudflare Workers Logs, which wrangler.jsonc turns on. Workers Logs also keeps its own record of each request, and this code doesn't set what Cloudflare puts in that record or how long it keeps it.

To rate-limit requests, Cloudflare counts sign-ins and the CLI's signed-in calls per IP address, and sign-ins, publishes and deletes per GitHub account id. The counters live in Cloudflare, not in the database.

What is public

Your page at ymmv.fyi/<handle> is public, and so is the same data as JSON at ymmv.fyi/api/v1/u/<handle>, which any website can fetch. Both show your handle, your stack, your extra lines and when you last published. Neither shows your GitHub account id. A diff page, ymmv.fyi/<handle>/vs/<you>, shows your values next to someone else's.

What deleting your profile removes

ymmv delete asks first, unless you pass -y. Then, in one step, it deletes every row that carries your GitHub account id, in all four tables:

After that, no table holds a row with your GitHub account id. Your page and its JSON answer 404 until you sign in and publish again. Signing in again makes a new users row, the same as a first sign-in.

The delete doesn't reach Cloudflare's backups. Cloudflare keeps point-in-time backups of the database, which it calls Time Travel and describes at developers.cloudflare.com/d1/reference/time-travel. A restore puts the whole database back to a chosen moment, rows deleted since then included. In October 2026 Cloudflare's docs put the limit at 7 days back on the Workers Free plan and 30 days on Workers Paid, so 30 days is the longest a deleted row could come back. Nothing in this code runs a restore. A maintainer would have to run one by hand.

It doesn't reach outside the database either. The server's failure log lines and Cloudflare's rate-limit counters stay as they are. The CLI removes the token.json it signed in with on the machine you run the delete on. Your other machines keep theirs, holding a token that no longer works, and update-check.json and dismissed-marks.json stay on every machine.

Nothing purges a cache on delete. Pages, JSON and rename redirects go out with s-maxage=30, stale-while-revalidate=86400, so a cache that follows those headers can serve the old copy for up to a day. Copies someone already saved are out of the site's reach.

ymmv logout does less. It revokes the token on that machine and deletes the local copy, and your page stays up.

In your browser

The site sets no cookies and loads no analytics or third-party scripts. Its fonts are downloaded when the site is built and served from ymmv.fyi.

The site keeps two keys in localStorage: ymmv-theme, your light or dark choice, and ymmv-you, the last handle you submitted in a diff form. When the home page plays its intro, it sets ymmv-landing-run in sessionStorage so the intro plays once per visit.

On your machine

The CLI keeps three files in ~/.config/ymmv on Linux (or $XDG_CONFIG_HOME/ymmv), ~/Library/Preferences/ymmv on macOS and %APPDATA%\ymmv\Config on Windows:

Detection runs on your machine and only fills in the preview. A publish sends what the preview showed: your handle, your stack values and your extra lines. In a terminal ymmv asks before it sends, and ymmv -y sends without asking. ymmv set and ymmv unset publish their change right away, with no preview and no confirmation.

Besides ymmv.fyi, the CLI talks to github.com when you sign in. It asks registry.npmjs.org for the latest version once a day, or six hours after a failed check. Set YMMV_NO_UPDATE_CHECK=1 or NO_UPDATE_NOTIFIER=1 to turn that off, and it never runs under CI. ymmv update runs your package manager, which talks to its own registry.

Questions

Ask in a GitHub issue at github.com/ymmv-fyi/ymmv/issues. For anything sensitive, such as a security problem or something you'd rather not post in public, use the private advisory form at github.com/ymmv-fyi/ymmv/security/advisories/new.