platform
veil on linux
First-class. Every check the app runs works at full depth here — this is the platform veil was built against first. OpenRC, runit, s6, dinit, and systemd are all detected, never assumed.
the honest ceiling
what full support actually means here
Every check in the table below reads "full" for linux — the app answers the real question, not a narrower one. That's not marketing; it's the same claim the support matrix makes, read straight off it.
Reads your active resolver config directly — full depth, free tier.
Detects an active tunnel interface and its routing — full depth, plus tier.
Confirms traffic actually leaves through the tunnel — full depth, plus tier.
Reads nftables/iptables ruleset state directly — full depth, plus tier.
Checks for an active, unrouted IPv6 address past the tunnel — full depth, plus tier.
Reads NetworkManager's per-network randomization policy — full depth, free tier.
Detects an installed end-to-end messenger — full depth, free tier.
Reads LUKS status on the root volume — full depth, plus tier.
install
getting it running
-
the fast way
One command installs it, adds it to your app menu, and fixes FUSE if it's missing:
curl -fsSL https://veilapp.pages.dev/install.sh | sh. Full breakdown and the plain download links are on the download page. -
or do it by hand
Grab the .AppImage (or the .tar.gz — no FUSE needed) from the download page, verify its checksum, then:
chmod +x veil-*.AppImage && ./veil-*.AppImage. Nothing installs system-wide — it runs in place. -
run it
Double-click it from your app menu if you used the installer, or run it from a terminal either way. No root prompt, no package manager involved at this step.
-
first scan
veil probes your init system (systemd, OpenRC, runit, s6, dinit) and package manager (apt, dnf, pacman, emerge, zypper, apk, xbps, nix) before it suggests a single command — this is why the fix commands it shows you are specific to your machine, not a generic guess.
verify
confirming it actually did something
Every check is read-only until you explicitly run a fix. After you apply one, the same check re-runs so you can watch the pill change from fail/warn to ok — no separate verification tool needed, the app is its own proof.
- a VPN fix flips from fail to ok only once the tunnel interface exists and traffic egress confirms it's actually carrying traffic — not just that the service started.
- a firewall fix re-reads the live nftables/iptables ruleset — it doesn't cache the result from before you ran the command.
- disk encryption reads LUKS status directly off the block device — an unencrypted disk with a passphrase set somewhere else still reads as unencrypted.