Desktop app (experimental)
desktop/ contains a small Tauri v2 GUI that wraps the existing shadowvpn-client binary: it manages named JSON connection profiles, launches the client elevated (root/Administrator — required for the TUN device and DNS changes), tails its log, and shows connect/disconnect status.
It does not reimplement any tunnel logic — the Rust core is unchanged, and the app just supervises the client process.
Status
This is an early, in-progress build. Profile management (list/create/edit/ delete, plus shadowvpn:// URI import/export), status derivation, log tailing, and the connect/disconnect elevation flow are implemented; see desktop/README.md for current status, IPC shapes, and security caveats.
Prerequisites
The GUI only needs to find and launch an already-built shadowvpn-client. Build that first:
cargo build --release --bin shadowvpn-clientPer platform, to build/run the desktop app itself:
- macOS — a normal Rust + Xcode command-line-tools setup. The app launches the client via
osascript … with administrator privileges(built into macOS). - Linux —
pkexec(frompolkit) for the elevation prompt, and the WebKitGTK dev package Tauri v2 links against:webkit2gtk-4.1-dev(Debian/Ubuntu) orwebkit2gtk4.1-devel(Fedora), plus the usualbuild-essential/libssl-dev/libgtk-3-dev. Ifpkexecis missing at runtime,connectfails with an error message containing the exactsudocommand to run by hand instead. - Windows — WebView2 (preinstalled on current Windows 10/11) to render the UI, and
wintun.dllnext to whichevershadowvpn-client.exeyou point the app at. The elevation prompt is a normal UAC dialog via PowerShellStart-Process -Verb RunAs.
No Node.js, no npm, no bundler, and no tauri-cli are required for development — the UI is plain static HTML/CSS/JS served straight off disk, and cargo run starts the whole app.
Build & run
cd desktop/src-tauri
cargo build --bins # also builds shadowvpn-desktop-helper (session elevation)
cargo runThe --bins build puts shadowvpn-desktop-helper next to the main binary in target/debug/, which is where the app looks for it; without it, connecting fails with an actionable "helper not found" error.
Installable packages
The desktop job in the release workflow builds installable packages:
| Platform | Package |
|---|---|
| macOS (arm64 + x86_64) | .dmg |
| Linux (x86_64) | .deb / .AppImage |
| Windows (x64 + ARM64) | NSIS -setup.exe |
Each package bundles the matching-arch shadowvpn-client next to the app executable, and — on macOS and Windows — the gfwlist.txt + GeoLite2-Country.mmdb policy data (plus wintun.dll on Windows), so policy routing works out of the box.