-
WarpEngine Client 2.1.0
Stablereleased this
2026-08-19 04:43:39 +00:00 | 7 commits to master since this releaseWarpEngine Client 2.1.0
A store's configuration now comes from the registry itself.
GET /api/stores
records carry aconfigfield — the same thing a store'sconfig.jsonheld, moved into
the record that already says what the store is. The client applies it directly, so
installing a store no longer depends on a second repository existing and staying
reachable, and a store can be configured entirely from the site's admin.The old path still works. Where a record has no
configbut names a repository, the
client reads…/raw/branch/master/config.jsonfrom it exactly as before, so a registry
whose stores have not moved over is unaffected. With neither, the engine's defaults
carry the store, as they always have. The order is: registry config, then repository
file, then defaults.The window cannot supply a store config. It is handed stores to show and hands one
back to install, but only as an identity — the config is dropped on the way in, and the
main process reads the record again from the registry before installing anything. This
is not tidiness: a config decides where files are written and, through
paths.subfolder, which subtree the store may later delete from. That is not a decision
the renderer gets to make, for the same reason aGameDtocarries no paths.Also
The headless check now reports which source configured a store — registry, repository
or defaults — and names the resulting prune boundary, because "it installed" and "it
installed where I meant" are different claims.Opening it on macOS
Ad-hoc signed, not notarised, so macOS asks first:
xattr -dr com.apple.quarantine "/Applications/WarpEngine Client.app"What is attached
The macOS package, built and verified on a Mac, plus the Linux (AppImage, deb) and
Windows (installer, portable) packages the pipeline builds when the tag is pushed.Verified
make checkis clean: typecheck, lint, the headless smoke test and the window
self-test.All three configuration sources were exercised end to end against the real serializer
output, with the client's own classes and a sandbox store root:Registry record What configured the store Prune boundary written configpresentthe registry, with no extra request teletypegamesconfig: null, repository giventhe repository's config.jsonteletypegamesneither the engine's defaults teletypegamesThe renderer barrier was tested adversarially rather than assumed: an install started
from a record carryingpaths.subfolder: "ATTACKER"andpaths.install_root: "/tmp/pwned"wrotesubfolder: teletypegamesandinstall_root: nullto disk, because
the service re-read the registry and the mapper had already dropped the config.Downloads