Windows Client Build Guide
This guide builds the Windows desktop client (client/windows/src/main.py) and packages it with Inno Setup.
Prerequisites
- Python 3.10+ available in PATH
- Inno Setup installed
- Official WireGuard installer file present as:
client/windows/wireguard-installer.exe
1. Prepare Build Environment
cd client\windows
python -m venv venv
venv\Scripts\activate
pip install --upgrade pip
pip install -r requirements.txt
pip install pyinstaller
2. Build Application Bundle
Use the source entrypoint in src/main.py:
pyinstaller --noconfirm --onedir --windowed --icon "..\..\assets\icon.ico" ^
--add-data "..\..\assets\icons\*.svg;." ^
--add-data "..\..\LICENSE;." ^
--add-data "ATTRIBUTIONS.md;." ^
--name "TornadoVPN-client" src\main.py
Expected output:
client\windows\dist\TornadoVPN-client\TornadoVPN-client.exe
3. Prepare Installer Inputs
client/windows/setup.iss expects:
dist\TornadoVPN-client\*
4. Build Installer
- Open
client/windows/setup.issin Inno Setup Compiler. - Compile (
Ctrl+F9) or use CLI compiler.
Expected output:
client\windows\Output\TornadoVPN_Windows_Setup.exe
5. Installer Behavior
setup.iss performs:
- app install into Program Files
- optional desktop shortcut task
- conditional WireGuard installer execution if WireGuard is not detected
- optional launch of Tornado VPN client after install
6. Smoke Test Checklist
- Install generated setup executable on a clean VM.
- Confirm app starts and requests elevated privileges when needed.
- Confirm WireGuard dependency install path works.
- Confirm login and tunnel lifecycle operations succeed.
- Confirm uninstall removes app and shortcuts cleanly.
Build Notes
- The spec file
TornadoVPN-client.specis present but currently referencesmain.pydirectly; the maintained build path in this repository uses the explicit CLI command againstsrc/main.py. - Keep legal filenames aligned with installer script expectations (
LICENSE.txt,attribution.md) unless the script is updated.