Download the client.
One binary per platform. Statically linked, reproducible, PGP-signed. Verify the signature before you run it — instructions below the table.
Current release · v0.1.0
Android: installing the APK
The .apk above installs directly, without going through Google
Play. Android calls that installing from an unknown source: the first time
you open the file, it will refuse and offer you a settings screen where you
allow your browser (or your file manager) to install apps. After that the
install proceeds normally.
The APK is signed — Android will not install one that is not — but with our own key rather than one issued by anybody. That signature is what ties every future update to the same publisher; it is not a statement by Google about who we are. As on Windows, the check worth doing is the PGP-signed checksum below.
Write your account token down before you install. It is the only credential this service has and we cannot recover it — there is no email address on your account to send a reset to. Keep it somewhere that survives you uninstalling the app.
Windows will warn you. Here is why, and what to check.
Our Windows installer is not signed with a commercial code-signing certificate. So when you download it, SmartScreen will say it is not commonly downloaded, and when you run it Windows will show a blue “Windows protected your PC” box with Unknown publisher. You get past it with More info → Run anyway.
We would rather tell you that here than have you meet it unexpectedly and wonder what you have downloaded. Those certificates cost several hundred dollars a year and are issued to a company identity — what they prove is that a certificate authority took someone's money and checked a company registration. They do not tell you the file is the one we built.
The check that does tell you that is below, and it is stronger: every release is published with SHA-256 checksums signed with our PGP key. That verifies the exact bytes we produced, from a key you can check against our security.txt, our warrant canary and our onion mirror — not against a payment to a certificate authority. It is the same way Tor Browser and other privacy tools are verified, and we recommend you actually do it rather than clicking through.
If clicking past a scary warning is not something you are willing to do —
which is a reasonable position — the raw .exe behaves the
same way, and the honest alternative is to wait until we publish a signed
build. We will say so on this page when that changes.
Running the AppImage
An AppImage is a single file: make it executable and run it. No installer, no root, no package manager, and nothing left behind when you delete it.
$ chmod +x 0trust-0.1.0-x86_64.AppImage $ ./0trust-0.1.0-x86_64.AppImage gui
On a system without FUSE — common on minimal installs, on containers, and on distributions that ship only FUSE 3 — the first line you see will be:
Error: No suitable fusermount binary found on the $PATH
It still ran. That message comes from the AppImage
runtime, not from us, and the program carries on working normally: the
runtime falls back to unpacking itself and running from there. Every
AppImage behaves this way. To stop seeing it, either install your
distribution's FUSE 2 package — libfuse2 on Debian and
Ubuntu — or run the file with --appimage-extract-and-run,
which asks for that fallback up front.
One thing worth knowing if you script against the CLI: that line goes to
standard output, not standard error, so it lands in the
middle of anything you are parsing. Use
APPIMAGE_EXTRACT_AND_RUN=1 in the environment, or the
.deb or the raw binary instead — neither has a runtime
wrapper, and neither prints anything of its own.
iPhone and iPad
There is no 0trustvpn app for iOS yet, and we would rather say that than list one that does not exist. Apple requires a special entitlement for apps that carry a VPN tunnel; it is not self-serve, and until it is granted we cannot ship one.
iOS works today by a different route, with no obstacles at all: use
0trust export from the desktop client to produce a QR code
and scan it from the official WireGuard app on the App
Store. The desktop window has the same thing under
Add mobile device. You get the same tunnel, to the same node,
with the same keys — what you do not get is our interface around it, so
the region and multi-hop choices are made on the desktop when you export.
Verify before you run
Every release is accompanied by SHA256SUMS and a detached
PGP signature SHA256SUMS.asc. Don't trust binaries that
don't verify against our release key.
1. Get the verification script (one-time):
$ curl -O https://0trustvpn.com/verify-release.sh $ chmod +x verify-release.sh
2. Download the release bundle:
$ mkdir 0.1.0 && cd 0.1.0 $ curl -O https://0trustvpn.com/releases/0.1.0/SHA256SUMS $ curl -O https://0trustvpn.com/releases/0.1.0/SHA256SUMS.asc $ curl -O https://0trustvpn.com/releases/0.1.0/pubkey.asc $ curl -O https://0trustvpn.com/releases/0.1.0/0trust-0.1.0-linux-amd64
3. Verify:
$ ../verify-release.sh # [✓] PGP signature valid (key: DEADBEEF...REPLACE-ME) # [✓] key fingerprint matches expected: DEADBEEF...REPLACE-ME # [✓] 1 file(s) match SHA256SUMS # (other files in SHA256SUMS are not in this directory — that # is expected if you downloaded one platform's binary) # [✓] VERIFIED. Safe to run.
The step above downloads one binary, so the script checks one and tells
you the rest are absent. That is not a warning about your download —
the other platforms' files are simply not there. A file that IS present
and does not match says MISMATCH and DO NOT RUN,
which is a different thing entirely.
Our release-signing key
PGP fingerprint (also available via /.well-known/security.txt and on keys.openpgp.org):
Verify this fingerprint out-of-band before trusting it — check it against our published canary, Mastodon/Bluesky posts, and any in-person introduction. A fingerprint from this page alone isn't enough if you're worried about a compromised TLS chain.
Reproducible builds
The binaries are built with go build -trimpath -buildvcs=false
-ldflags "-s -w" from a tagged source rev. Two builds of the
same source with the same Go version produce byte-identical binaries.
See build-info.txt in the release directory for the
exact rev and toolchain.