Updates
anonymizer updates itself via a clear in-UI flow. There’s no silent auto-update; you decide when.
Desktop app (macOS)
The native macOS app has its own built-in updater (Sparkle, industry-standard
on macOS). Check for Updates in the app menu checks on demand; the
“Automatically check for updates” toggle in Settings enables a scheduled check
(at most once every 24 hours, on launch or while running). Updates are
downloaded from dl.anonymizer.site, signature-verified before install, and
applied with an app restart — settings and downloaded language models are
preserved. The app does not use version.json — that file serves only the
CLI flow below.
How the CLI update check works
- Each time you launch the web UI, a background request fetches
https://anonymizer.site/version.jsonwith a 2-second timeout. - If a newer version is available, an [Update] banner appears at the top of the UI. Clicking it shows the changelog and an “Update now” button.
- Clicking “Update now” launches a small detached process (
anonymizer.updater) that runsuv tool upgrade --reinstall-package docs-anonymizer docs-anonymizer. The running web UI shuts down (HTTP request returns an overlay first) and the detached process relaunchesanonymizeonce the upgrade is done. No manual restart needed.
The check is the only outbound network request made by the CLI. The redaction engine itself never opens a socket — there’s a test that enforces this. (The macOS app’s network behavior is listed on What leaves your machine.)
What’s in version.json
{ "version": "0.2.28", "sha256": "928c06cf2830a9c32b19724e1c28cd445ccb69cf2edba68cc7b04c7b65259266", "url": "https://pypi.org/project/docs-anonymizer/0.2.28/", "released_at": "2026-05-28T09:46:58Z", "schema_version": 1, "notes_url": "https://anonymizer.site/changelog#v0-2-28"}The sha256 matches the wheel published on PyPI for that version, so you can verify integrity before applying.
Disabling the check
For air-gapped or paranoid setups, use either the CLI flag (one-off) or the environment variable (persistent):
anonymize --no-update-checkexport ANONYMIZER_NO_UPDATE_CHECK=1anonymizeBoth skip the version fetch entirely. The banner never appears.
Pointing the check at a mirror
In an air-gapped setup you can serve your own copy of version.json and tell the app to use it via ANONYMIZER_VERSION_URL:
export ANONYMIZER_VERSION_URL=https://updates.your-corp.example/anonymizer/version.jsonFor the actual upgrade, the detached updater runs uv tool upgrade and inherits the environment, so UV_INDEX_URL against your private PyPI mirror is also respected:
export UV_INDEX_URL=https://pypi.your-corp.example/simpleSee Corporate setup for the full IT-admin scenario.