Arol

Privacy & network

The short version: scanning uploads nothing. The only thing Arol ever sends anywhere is a monitoring report you explicitly opt into with a token — and you can print exactly what it contains before you ever send one.

What runs where

Scanning is entirely local. The CLI reads files under the path you point it at, matches them against a local JSON dataset, and prints to your terminal. No telemetry, no crash reporting, no account, no auth, no "anonymous usage statistics."

Opt-in monitoring reports (--report)

Continuous monitoring needs your consent and your token — without both, nothing is ever sent:

npx arol-ai scan --report <token>     # or AROL_REPORT_TOKEN in CI

What a report contains: exactly what --json prints, plus a repo name and the CLI version. That means findings metadata (dataset entry ids, file paths, line numbers, the matched identifier text) and your manifest inventory (dependency names and declared versions). It never contains file contents, environment variables, or anything the --json output doesn't show. To audit precisely what would be sent:

npx arol-ai scan --json

Reports are fail-soft (an unreachable endpoint warns on stderr and changes nothing about the scan) and --offline wins over a present token: zero network means zero.

Downloading the dataset

scan auto-refreshes its deprecation dataset: a plain HTTPS GET of a public JSON file (the same deprecations.json you can read in the repo), at most once per 24 hours. Like antivirus definitions — download-only.

  • The request carries no identifying parameters — nothing about your repo, your findings, or your machine beyond what any HTTPS request inherently reveals to the host.
  • It is fail-soft: offline, proxied, or blocked, the scan silently uses the cached/bundled dataset. A scan never fails because a download did.
  • A downloaded dataset is validated before it replaces the cache, and a corrupt cache falls back to the bundled copy with a warning.

Zero-network mode

arol-ai scan --offline     # this run
AROL_OFFLINE=1             # environment-wide (CI, air-gapped machines)

Both disable all network use entirely — behavior identical to versions before auto-refresh existed. The report header always tells you which dataset was used.

Cache

The refreshed dataset lives at ~/.cache/arol ($XDG_CACHE_HOME/arol respected; override with AROL_CACHE_DIR). Delete it anytime; the CLI falls back to its bundled dataset.

Verifying all of this

The scanner is MIT-licensed and small (~3k lines): github.com/benminor/arol. The only fetch calls in the codebase are in src/update.ts (the dataset download) and src/report-upload.ts (which runs solely with your token). Auditing both takes ten minutes — we'd encourage it.

Rendered from docs/privacy.md in the arol repository — edits there ship here.