# PeerSpeak — Windows installer This directory builds a Windows setup installer for PeerSpeak using [Inno Setup](https://jrsoftware.org/isinfo.php). PeerSpeak ships as a **single self-contained `peerspeak.exe`** — the GUI icon, notification chimes, and avatar presets are all embedded in the binary (`include_bytes!`), and the executable is statically linked against the GNU runtime, so there are no extra DLLs to bundle. The installer payload is just the `.exe` plus an `.ico` for the Start-menu / desktop shortcuts. ## Version compatibility The installer version tracks the crate version in `Cargo.toml` (currently **0.3.0**) — keep `MyAppVersion` in `peerspeak.iss` in sync when it changes. Per `VERSIONING.md`, a **MINOR** bump in `0.x` is a **breaking wire change**: peers on different MINOR versions can't connect (they fail fast at the handshake rather than misbehaving). So when you ship a new Windows build after a MINOR bump, **everyone on the call must reinstall** — an old Windows build and a newer Linux/Windows peer won't talk. (0.3.0 was the chat file-sharing + per-peer noise-gate release; it cannot connect to a 0.2.x peer.) ## Files | File | Tracked | Purpose | |------|---------|---------| | `peerspeak.iss` | yes | Inno Setup script | | `peerspeak.ico` | yes | multi-resolution app icon (from `assets/icons/*.png`) | | `README.md` | yes | this file | | `peerspeak.exe` | no (gitignored) | staged build artifact, copied from `target/x86_64-pc-windows-gnu/release/` | | `output/peerspeak--setup.exe` | no (gitignored) | the compiled installer | ## Build steps 1. **Cross-compile the Windows binary** (from the repo root, inside the `peerspeak-win` archlinux distrobox): ```sh RUSTC_BOOTSTRAP=1 ./win-cross-build.sh -Z build-std=std,panic_abort ``` This needs the `rust-src` component and the `x86_64-pc-windows-gnu` target installed in that toolchain. The result is a statically-linked, GUI-subsystem `.exe` (no stray console window). 2. **Stage the binary** next to the script: ```sh cp target/x86_64-pc-windows-gnu/release/peerspeak.exe packaging/windows/ ``` 3. **Regenerate the icon** if the source PNGs changed: ```sh magick assets/icons/peerspeak-16.png assets/icons/peerspeak-24.png \ assets/icons/peerspeak-32.png assets/icons/peerspeak-48.png \ assets/icons/peerspeak-64.png assets/icons/peerspeak-128.png \ assets/icons/peerspeak-256.png packaging/windows/peerspeak.ico ``` 4. **Compile the installer** with Inno Setup. On Linux this runs under Wine: ```sh cd packaging/windows wine ~/.wine/drive_c/InnoSetup6/ISCC.exe peerspeak.iss ``` The installer lands at `output/peerspeak--setup.exe`. ## What the installer does - Installs `peerspeak.exe` to `Program Files\PeerSpeak` (requires admin / one UAC prompt). - Creates a Start-menu shortcut, with an optional desktop shortcut. - Optionally adds a Windows Firewall allow-rule for PeerSpeak (recommended — iroh uses UDP hole-punching, so this avoids a mid-call firewall prompt). The rule is removed on uninstall. - Provides a standard uninstaller. > **Note:** the installer and the binary are **not code-signed**, so Windows > SmartScreen will show an "unknown publisher" warning on first run. The user > clicks *More info → Run anyway*. Removing this warning requires a paid > code-signing certificate.