Security in Tarn
Tarn is written in Rust and draws its own interface. The web content runs in the system's engine, in its own sandboxed process, and never gets a line into the browser around it.
How Tarn protects you
- Pages can't reach the browser
- Web pages get no bridge into Tarn. Internal pages run in a separate configuration with bundled assets only, and web content cannot link to, embed or open them.
- Only safe addresses open
- http, https, about:blank and blob are allowed. data: never loads as a top-level page, javascript: is rejected when typed or pasted, and other apps' links ask first.
- No way around a bad certificate
- Tarn uses the system's trust evaluation and offers no click-through, at any Shield level.
- Your network stays private
- Public sites cannot send requests to your router, printer or other local devices, unless the page you opened is itself local.
- Dangerous sites are stopped first
- Malware, phishing and scam lists are checked on every navigation, including redirects and downloads, before the request is made. Tarn draws the warning page itself.
- Signed lists, signed updates
- Filter lists come as a bundle signed by a separate key and checked in the app, with size limits and the last good bundle kept. App updates are signed too, and signing keys never touch CI.
- Careful downloads
- File names are cleaned, files are quarantined and never opened automatically, and executable types get a warning.
- Profiles stay apart
- Site icons, suggestions, permissions, downloads and extensions are kept per profile. A private space lives in memory only.
The Shield levels
- Standard, on by default: trackers and ads blocked, tracking parameters stripped, the local network out of reach.
- Strict adds HTTPS-only and sends no cross-site referrer.
- Lockdown turns off JavaScript and keeps no site data.
How the code is kept safe
- Unsafe Rust is confined to two crates, each block documented with the rule it relies on and enforced by lint.
- Dependencies are pinned and checked on every pull request for advisories, licences and sources.
- Tarn opens no listening sockets, no remote-debugging port and no local HTTP API.
Who patches what
| Layer | Patched by | Automatic? |
|---|---|---|
| WebKit (rendering, JavaScript, TLS) | Apple | Yes, with macOS updates |
| Tarn itself | The Tarn project | Yes, through signed automatic updates |
| Filter lists and domain sets | List maintainers, signed by CI daily | Yes |
| Extensions | Their authors | Only when you install a new version |
What Tarn cannot do
- A WebKit zero-day stays open until Apple ships a fix and you install it.
- Deep fingerprinting protection and encrypted DNS inside the app are not possible on Apple's web view.
- No blocker catches every ad: ads served from the same address as the content, or stitched into a video stream, get through.
- Malware already running as your user can read what your user can read.
Report a vulnerability
Report privately through GitHub: open the repository's Security tab and choose Report a vulnerability. Please do not open a public issue.
- We acknowledge reports within 3 working days.
- For a high-severity issue in Tarn's own code, we aim to ship a fix within 7 days of confirming it.
- You are credited in the release notes, unless you ask not to be.
WebKit, TLS and sandbox bugs belong to Apple at security.apple.com. The full threat model is docs/threat-model.md.
Last updated November 2026
Try Tarn on your Mac
No account to make and nothing sent home. macOS 14 or later; other platforms are in development.