the Windows GUI: nine pages, one worker thread, the install engine
.exe under 700 kB; no tokio, reqwest, rustls, hyper or GUI crate; only DLLs Windows ships
Package Server
catalogue, auth, downloads, conflict reports, the admin CLI
one static binary; TLS is the reverse proxy’s job
Shared Protocol
the wire types both sides compile against
serde only: no I/O, no async, no HTTP
Package Catalogue
zips, sidecars, schemas, the generated manifest, the MOTD, reports
one folder per game under --data
Auth Database
keys and their grants
libSQL; raw keys are never stored
Game Installation
the game folder a run targets
the only place anything is written
The composition is deliberate: shared/ is the only code the two binaries
have in common, and it holds no behaviour that could grow a runtime the
installer cannot afford.
choices; the one thing it sends anywhere is an anonymous conflict report
Installer
Caddy
HTTPS: GET /packages, /download/..., /motd, /whoami; POST /report/conflict
Caddy
Server
plain HTTP on :8080; TLS ends at the proxy
Server
Catalogue
manifest.json and the zip streams
Server
Auth DB
SELECT ... FROM tokens LEFT JOIN grants
Installer
Game Installation
the extracted overlay, and the cache, ledger, restore points and logs in .pacenotes
Operator
Catalogue, Auth DB
copy a zip and sidecar, manifest gen; token mint, grant, revoke
The installer’s HTTPS is WinHTTP, so the TLS handshake is Schannel’s: that
is why the binary ships no TLS crate, and why the server can speak plain
HTTP behind the proxy. Redirects are followed by the installer itself, never
by WinHTTP, so the access key never leaves the origin it was meant for.