Privacy
RepoDNA is local-first. It analyzes repositories on your machine, stores results on your machine, and sends nothing anywhere unless you ask it to.
What never happens#
- No telemetry. RepoDNA does not collect usage data, crash reports, or analytics, and
has no code that could.
privacy.telemetryexists only to make that explicit; it is alwaysfalse. - No uploads. Analyses, reports, and cards are written to local files. Nothing is published unless you publish it.
- No update checks or other background network requests.
- No secret values are stored. Possible credentials are recorded by rule, file, line, and a keyed fingerprint (so equal values can be recognized within one scan), never by value.
- No absolute local paths in artifacts. Paths are relative to the repository.
When RepoDNA uses the network#
Only in these cases, each of which you start:
| Action | What is contacted |
|---|---|
| Analyzing a Git URL | The Git host, through your git installation, to clone the repository. |
repodna explain with a configured HTTP provider |
That provider's endpoint, with the evidence shown by --dry-run. Endpoints off this machine also need your consent (privacy.remote_ai or --allow-remote-ai). |
| Clicking a link in the web interface or desktop app | Your browser opens the link. |
Cloning is restricted by default: http:// and git:// URLs (unencrypted) and hosts on
private networks are refused unless you pass --allow-insecure-urls or
--allow-private-hosts. Credentials embedded in URLs are removed from everything RepoDNA
prints and stores.
repodna serve listens on 127.0.0.1 only and requires a session token; see
the web interface.
What is stored, and where#
| Platform | Data | User configuration |
|---|---|---|
| Linux and other Unix | $XDG_DATA_HOME/repodna or ~/.local/share/repodna |
$XDG_CONFIG_HOME/repodna/config.toml or ~/.config/repodna/config.toml |
| macOS | ~/Library/Application Support/RepoDNA |
the same directory, config.toml |
| Windows | %LOCALAPPDATA%\RepoDNA |
%APPDATA%\RepoDNA\config.toml |
REPODNA_HOME overrides both: data and config.toml then live in that one directory.
The data directory holds:
repodna.db: a SQLite database with the index of repositories, analyses, metrics, and findings, and the per-file analysis cache (keyed by file content, so unchanged files are not parsed again);artifacts/: each stored analysis as a JSON file;explanations/: cached AI explanations, if you use them.
The analyzed repositories are never written to. Remove stored data with repodna clean,
repodna cache clear, or repodna cache reset, or by deleting the directory. Use
--no-store to analyze without storing anything.
In the browser#
The web interface, in the web version, repodna serve, and the desktop app, keeps a little
in the browser's own storage, for that site only:
| What | Where | How to remove it |
|---|---|---|
| Your theme choice | Local storage | Choose System theme again |
| The last five analysis files you opened, with their contents | IndexedDB | Remove on the start page, or Forget recent analyses in Settings |
| Which analysis a tab has open, so that a reload keeps it | The tab's session storage | Closing the tab, or Close this analysis in search |
The sign-in token of repodna serve |
A session cookie or the tab's session storage | Stopping the server |
| The web version's own files (the page, its code, the demo, and the analysis program), so that it works offline | Cache storage, for the web version only | Clearing the site's data |
Turn off Keep the last five analysis files in Settings and no analysis is kept: files then have to be opened again after a reload. A folder or an archive analyzed in the web version is read in the page, only as far as the analysis needs, and never leaves the browser; its analysis is kept like an opened file. Clearing the site's data in your browser removes all of it.
What an artifact contains#
An analysis artifact describes the repository: file paths, sizes, languages, symbols, dependencies, findings with evidence, and Git history: commit hashes, dates, subjects, contributor names and e-mail-derived identities, and remote URLs. That is what makes it useful, and also why it deserves care before you share it.
Privacy presets#
Reports, cards, exports, and terminal views take --privacy:
| Preset | Removes |
|---|---|
local (default for local views) |
Nothing beyond what is never stored. |
share (default for repodna export) |
Commit messages, the text of marker comments (such as TODO notes), and output of commands you allowed RepoDNA to run. |
public |
Everything share removes, and also: contributor names and identifiers (replaced by numbered pseudonyms such as contributor-1), remote URLs (the repository's name and owner are kept), and symbol and function names. |
repodna report --privacy public -o public-report
repodna card --privacy public
repodna export --privacy public -o project.repodnaEach artifact records the preset and what was removed in analysisMetadata.privacy, and
the report's metadata section lists it.
To keep information out of the artifact in the first place:
repodna analyze . --anonymize # contributor names become "Contributor 1", "Contributor 2", ...
repodna analyze . --no-commit-messages # commit subjects are not keptor permanently in your user configuration:
[privacy]
anonymize_contributors = true
include_commit_messages = falseBefore you publish a report#
- Use
--privacy publicfor anything that leaves your team. - Read the report: file names and directory structure are visible in every preset.
- Findings about possible secrets name the file and line but never the value. If a real credential was found, rotate it: it is in the repository's history, not only in the report.
AI#
AI explanations are off by default. When configured, only the numbered evidence shown by
repodna explain --dry-run is sent; source code is not sent unless you enable excerpts.
See AI.