VPN Proxy Windows Client
Standalone Windows desktop utility for app-level proxy routing. This app is
separate from the current Docker gateway/client runtime and must not be wired
through APP_MODE=windows.
Components
- Control App: Tauri 2 + React/TypeScript UI and Rust command layer.
- Proxyfier Layer: ProxiFyre adapter for per-application routing.
- Local sing-box: optional local runtime, used only by targets that explicitly
require
singbox.
External SOCKS5 targets are the MVP path and do not require Local sing-box.
Source And Generated Files
Source configuration is owned by Rust domain models and JSON files under:
C:\ProgramData\VpnProxy\config\profiles.json
C:\ProgramData\VpnProxy\config\targets.json
C:\ProgramData\VpnProxy\config\components.json
C:\ProgramData\VpnProxy\state\activity.json
Generated artifacts are derived and can be recreated:
C:\ProgramData\VpnProxy\generated\proxifyre-app-config.json
C:\ProgramData\VpnProxy\generated\sing-box-config.json
Development
cd apps/windows-client
npm install
npm run build
Run the browser preview shell:
npm run dev -- --host 127.0.0.1
Run Tauri checks when the native Windows toolchain is installed:
npm run tauri -- info
npm run tauri -- dev
npm run tauri -- build
Run Rust tests when Rust/Cargo are installed:
cd apps/windows-client/src-tauri
cargo test
Native Tauri build requires WebView2, Rust via rustup, and Visual Studio Build Tools with MSVC and Windows SDK components.
Explicit Installer Boundaries
Installer scripts are explicit per component and return structured JSON in
-PlanOnly mode:
& .\scripts\install-control-app.ps1 -PlanOnly
& .\scripts\install-proxyfier.ps1 -PlanOnly
& .\scripts\install-singbox.ps1 -PlanOnly
Installers must be launched intentionally by the user or by a future narrow helper permission. Profile apply must not silently install Control App, Proxyfier, or Local sing-box.
Existing Proxyfier Detection
The app detects an already installed Proxyfier layer before showing component status or applying profiles. Detection checks:
- uninstall registry entries for
ProxiFyreandProxifier; - common install folders such as
C:\Tools\ProxiFyre,%ProgramFiles%\ProxiFyre, and%ProgramFiles%\Proxifier; - running
ProxiFyre/Proxifierprocesses and theProxiFyreServiceservice.
For portable installs, set an override before launching the app:
$env:VPN_PROXY_PROXIFYRE_ROOT = 'D:\Tools\ProxiFyre'
npm run tauri -- dev
ProxiFyre installs are compatible with the current generated
app-config.json apply path. Plain Proxifier installs are detected and shown,
but automatic profile apply is not enabled for them yet because they use a
different profile format.
MVP Verification Flow
- Start the Control App or browser preview.
- Confirm Components shows Control App, Proxyfier Layer, and optional Local sing-box separately.
- Add or keep an external SOCKS5 target.
- Add a process/folder/exe profile such as Discord.
- Apply profiles and verify generated ProxiFyre config plus activity entry.
- Install Proxyfier separately before applying to a real service.
- Install and start Local sing-box only when using a local target.
Task evidence is recorded in
docs/goals/windows-modular-client/EVIDENCE.md.