The headless / server distribution of the Warren VPN command-line client.
curl -fsSL https://raw.githubusercontent.com/WarrenBrowse/warren-cli/main/scripts/install.sh | sudo shThen: warren account create && warren connect.
Warren already ships a full-featured Rust CLI (warren) and a privileged daemon
(warren-daemon) inside the
warren-app repo (a Mullvad VPN
fork). They build and run without the Electron GUI and are perfectly suited to
servers, containers and SSH-only machines.
This repo does not re-implement the CLI. It is the distribution layer: clear server-install docs, a release pipeline that produces ready-to-install packages, and a one-line installer, so an operator never has to compile ~900 crates themselves.
Why not a new SDK-based CLI? Because the existing
warrenCLI already does everything we need (account creation, mnemonic import/export, voucher redemption, server selection, connect/disconnect, kill-switch, split-tunnel, multihop, NAT-PMP) and runs headless today. Building a parallel CLI onwarren-sdk-rswould be redundant. Seedocs/SPEC.mdfor the full rationale.
A warren-vpn-daemon package (.deb / .rpm) containing:
| Path | What |
|---|---|
/usr/bin/warren |
the CLI |
/usr/bin/warren-daemon |
the privileged daemon (systemd service) |
/usr/bin/warren-exclude |
split-tunnel helper (Linux) |
/usr/lib/systemd/system/warren-daemon.service |
the service unit |
/opt/Warren VPN/resources/ |
runtime resources (ca.crt, relay bootstrap, …) |
| shell completions | bash / zsh / fish |
The package conflicts with the desktop warren-vpn package: it is the
GUI-less counterpart.
warren account create # generate identity (BIP39 mnemonic)
warren warren mnemonic export # back up the recovery phrase, keep it safe
# during the free beta, use the voucher you received; purchases open with the paid service
warren account redeem <VOUCHER> # add time to the account
warren account get # show address + expiry
warren relay list # browse available exits
warren relay set location FR # pick a country (or: FR Paris)
warren connect # bring the tunnel up
warren status # show tunnel stateVouchers are how time reaches an account: apply one with
warren account redeem. During the free beta they are handed out by the team; once the paid service opens, the web checkout issues them (Lightning / Monero / card, same flow as the desktop app). Restore an existing account on a new machine withwarren warren mnemonic import "<12 words>".
# Linux server (resolves the latest daemon-v* release and installs it):
curl -fsSL https://raw.githubusercontent.com/WarrenBrowse/warren-cli/main/scripts/install.sh | sudo shThe published Linux packages currently target amd64/x86_64 only; on an ARM
server, build from source (see below). Full walkthrough incl. macOS/Windows:
docs/INSTALL-SERVER.md.
The real packages are produced by warren-app's release-daemon.yml workflow on
the self-hosted runners (this repo's .github/workflows/ci.yml only lints).
Locally on a Linux host:
# On a Linux host → dist/warren-vpn-daemon_<ver>_<arch>.deb (+ .rpm):
./scripts/build-daemon-only.sh
# Multi-arch (build.sh reads the TARGETS env array):
TARGETS="x86_64-unknown-linux-gnu aarch64-unknown-linux-gnu" \
./scripts/build-daemon-only.shThe script drives warren-app/build.sh --daemon-only;
warren-app is the single source of truth and is never forked here. Packaging must
run on Linux (warren-exclude is Linux-only); from macOS, use the release CI
or a Linux container.
Building from source requires access to the warren-app, warren-core and
warrenguard repositories, which are not yet public. Until they are, the
prebuilt packages above are the way to install.
- A sibling
warren-appcheckout (override withWARREN_APP_DIR), plus its own siblingswarren-coreandwarrenguardat the SHAs pinned inwarren-app/.warren-core-versionand.warrenguard-version. cargo+protoc, andcargo install cargo-deb cargo-generate-rpm.- For cross-builds: Docker and
cargo install cross.
Headless artifacts are built by warren-app's release-daemon.yml workflow on
the self-hosted runners (it reuses the same build env as the GUI release):
- Linux:
warren-vpn-daemon_<ver>_<arch>.deb/.rpm(build.sh --daemon-only) - macOS:
warren-headless-macos-<arch>.tar.gz(binaries + launchd installer) - Windows:
warren-headless-windows-x64.zip(binaries + service installer, experimental)
Cut a release by pushing a daemon-v* tag in warren-app. See
docs/RELEASE.md.
- ✅
warren+warren-daemonbuild standalone (no Electron) and run, validated. - ✅ Mullvad→Warren CLI branding (
warren --version→warren x.y.z). - ✅ CI green on all three OSes; Linux
.deb/.rpm, macOS tarball, Windows zip. - ✅ First release published:
daemon-v1.2.1(clean1.2.1, all four artifacts). - 🚧 Signing / notarization: pending (artifacts are unsigned, like the GUI).
- ⏸️ Windows system-VPN tunnel is untested upstream; control-plane works.
The distributed binaries originate from warren-app and are AGPL-3.0-or-later.
The scripts and docs in this repo are under the same license.