2026-03-21 19:40:05 -05:00
# Overlord Desktop
2026-05-11 20:04:13 -05:00
A native desktop (fat) client for the Overlord server, built with [Tauri 2 ](https://tauri.app ) (Rust backend + system webview).
2026-03-21 19:40:05 -05:00
## Features
2026-05-11 20:04:13 -05:00
- Native desktop window with a connection screen for the operator
2026-03-21 19:40:05 -05:00
- Remembers your last server address across launches
- TLS toggle for connecting to HTTPS or HTTP servers
2026-05-11 20:04:13 -05:00
- Accepts self-signed certificates (Windows / WebView2 via `--ignore-certificate-errors` )
2026-07-13 10:22:19 -05:00
- `window.open` from the web UI (audio, console, Backstage, etc.) opens native popup windows that inherit the parent's session
2026-03-21 19:40:05 -05:00
- Cross-platform (macOS, Windows, Linux)
## Prerequisites
2026-05-11 20:04:13 -05:00
- [Rust ](https://rustup.rs ) (stable toolchain)
- [Bun ](https://bun.sh ) (to run the Tauri CLI and vendor script)
- Platform deps for Tauri — see https://tauri.app/start/prerequisites/
- **Windows:** Microsoft Edge WebView2 (preinstalled on Windows 11)
- **macOS:** Xcode CLT
- **Linux:** `webkit2gtk-4.1` , `libayatana-appindicator3-dev` , `librsvg2-dev`
2026-03-21 19:40:05 -05:00
## Quick Start
```bash
cd Overlord-Desktop
2026-05-11 20:04:13 -05:00
bun install
bun run vendor # copy Inter + Font Awesome into src/vendor/
bun run start # tauri dev
2026-03-21 19:40:05 -05:00
```
2026-05-11 20:04:13 -05:00
The first `start` will compile the Rust backend (slow on first run; cached afterwards).
2026-03-21 19:40:05 -05:00
## Building for Distribution
2026-05-11 20:04:13 -05:00
Before building, generate icons from a 1024x1024 PNG (only needed once):
2026-03-21 19:40:05 -05:00
```bash
2026-05-11 20:04:13 -05:00
bun run tauri icon path/to/icon.png
2026-03-21 19:40:05 -05:00
```
2026-05-11 20:04:13 -05:00
Then:
```bash
bun run build:win # Windows NSIS installer
bun run build:mac # macOS DMG
bun run build:linux # Linux AppImage
```
2026-06-12 09:14:49 -05:00
Or from the repo root: `./scripts/build-desktop.sh` (or `scripts\build-desktop.bat` on Windows) picks the right target for the current OS.
2026-05-11 20:04:13 -05:00
2026-08-23 16:36:55 -05:00
Output lands in `src-tauri/target/release/bundle/` . The CI workflow in `.gitlab/ci/desktop-release.yml` builds the Windows NSIS installer on every push to `main` that changes the desktop application or its build inputs, and publishes it as a GitLab Release tagged `Overlord-Desktop-v<version>` .
2026-05-11 20:04:13 -05:00
2026-03-21 19:40:05 -05:00
## Configuration
2026-05-11 20:04:13 -05:00
On first connect, the app saves your connection to the Tauri config dir:
2026-03-21 19:40:05 -05:00
2026-05-11 20:04:13 -05:00
- **Windows:** `%APPDATA%\com.overlord.desktop\connection.json`
- **macOS:** `~/Library/Application Support/com.overlord.desktop/connection.json`
- **Linux:** `~/.config/com.overlord.desktop/connection.json`
Defaults: port **5173** , TLS **enabled** .
## Notes
- **Self-signed certs:** handled via WebView2's `--ignore-certificate-errors` flag (Windows). On macOS/Linux the system webview does not currently expose an equivalent flag through Tauri's config — issue a trusted cert (e.g. mkcert / Let's Encrypt) for production use on those platforms.
2026-07-13 10:22:19 -05:00
- **Popups:** `window.open` calls from the web UI (audio, console, Backstage, etc.) are caught by Tauri's `on_new_window` handler and turned into real WebView2 popups. This is intentional — it's the only way the popup webview inherits the parent's auth cookie (which is `SameSite=Strict` ).
2026-05-11 20:04:13 -05:00
- **Footprint:** ~10 MB installer vs. ~80 MB for an Electron equivalent.
## Project Layout
```
Overlord-Desktop/
├── package.json # Tauri CLI + vendor deps
├── scripts/vendor.ts # copies Inter + Font Awesome into src/vendor/
├── src/ # frontend (HTML/CSS/JS) — the connect screen
│ ├── index.html
│ ├── style.css
│ └── renderer.js
└── src-tauri/ # Rust backend
├── Cargo.toml
├── tauri.conf.json
├── capabilities/default.json
├── permissions/app-commands.toml
└── src/{main,lib}.rs # IPC commands + on_new_window popup handler
```