Appearance
Updating
This page covers three separate things: checking for and installing a new desktop release, updating a self-hosted aerini-server deployment, and what happens when a workflow file's schema version doesn't match the app or server opening it. For why the desktop check works the way it does instead of updating automatically, see Security §The update check exception.
Desktop app
Aerini never checks for updates on its own. Open Settings, find Updates under About, and click Check for Updates. There's no startup check, no background poller, and no scheduled interval; it only runs when you click the button.
The check asks GitHub's Releases API for the latest tagged release and compares it to your installed version. One of two things happens:
- You're up to date. The status line shows your current version and nothing else happens.
- A newer version exists. The status line shows the new version number next to a View release link, which opens that release's page on GitHub in your browser.
View release is as far as the button goes. Aerini doesn't download or install anything itself, there's no auto-updater built into the app. Getting the new version means installing it the same way you installed Aerini the first time: download the file for your OS from that release page and run it, the same steps as Installation §Download the installer. Installing over an existing copy doesn't touch your workflows, credentials, or settings; those live in a separate per-OS data folder that the app bundle itself never touches (see Installation §Uninstalling for exactly where).
NOTE
New releases are published as GitHub draft releases before a maintainer manually publishes them. If a version was just tagged, Check for Updates may not show it yet; GitHub's "latest release" API only returns published releases, not drafts.
Server (aerini-server)
As of Aerini 0.4.0, no prebuilt aerini-server binary is published anywhere, not on the Releases page or otherwise; that page only carries desktop installers. There's nothing to download for an update either, so the update path depends on how you're running the server. Server Deployment §Getting the aerini-server binary covers this same gap for a first install; this section covers keeping an existing deployment current.
Official Docker image
The repository's own Dockerfile and docker-compose.yml aren't published to any container registry. docker compose build builds the image from the source tree already on your disk, so updating means pulling that source and rebuilding:
bash
git pull
docker compose up -d --buildThis image's build stage copies your source into the image with COPY, so a git pull that changes any tracked file invalidates the layers built from it, and the rebuild picks up the new code correctly. No --no-cache needed here. The named data volume isn't touched by a rebuild, so your workflows and run history persist across the update.
Bare metal (Linux, built from source)
bash
git pull
sudo apt install -y libdbus-1-dev # already present if you built it before
cargo build --release -p aerini-serverThen replace the running binary and restart:
servemode installed viainstall.sh: copy the new binary over~/.aerini-server/<workflow>/aerini-server, then restart withsystemctl --user restart aerini-<workflow>, the service nameinstall.shcreated for you.apimode, or anything started by hand: stop the running process, replace the binary at whatever path you launch it from, start it again. There's no generated service file forapimode; whatever you used to keep it running (a systemd unit you wrote yourself, a process supervisor) is what you restart.
The desktop's "Export for Server → Docker" package
The package generated by Export → Export for Server → Docker builds differently from the official image above: it clones the Aerini repository inside the Docker build itself (git clone --branch $AERINI_REF, defaulting to main), rather than building from source already on disk. That distinction matters for updates specifically. Docker caches that clone step by the Dockerfile instruction's own text, not by what the remote branch currently holds, so re-running docker compose build alone can silently reuse the old cached layer and rebuild the same old code even though main has moved on. Force a fresh clone with:
bash
docker compose build --no-cache
docker compose up -dor bump --build-arg AERINI_REF=v<newer-version> to a specific tag each time, which also busts the cache since the build argument itself changed. Either way restart afterward; the mounted aerini-server.json and the data volume are unaffected.
Opening older or newer workflow files
Every .aerini file, and every workflow saved in Aerini's own database, carries a schema_version field. Whichever app or server loads that workflow checks the field before anything else runs:
| Situation | What happens |
|---|---|
| File's version matches what this build understands | Loads normally, nothing extra happens |
| File's version is older, and this build has a migration path for it | Upgrades the file's JSON automatically on load, no action needed from you |
| File's version is older, but no migration path reaches this build's version | Load fails with an error naming both versions |
| File's version is newer than what this build understands | Load fails; the error tells you to upgrade Aerini |
File has no schema_version field at all (saved before the field existed) | Treated as the oldest known version and loads normally |
As of Aerini 0.4.0 the workflow file format hasn't changed since it was introduced: schema_version is "1.0" everywhere, and no migrations are registered yet. Every file loads as a same-version no-op today. The table above describes the mechanism that will run the moment that changes, not a backlog of migrations already waiting to fire. A full version history, once the format has one worth documenting, will live in schema-migrations.md.
There's no downgrade path either way: opening a workflow saved by a newer Aerini in an older one always fails with a message telling you to upgrade, never a partial or best-effort load.
What's next
- Server Deployment, for getting
aerini-serverrunning the first time - Security §The update check exception, for why the desktop check is a single manual action instead of an automatic updater
- Installation, for the platform-specific install steps an update reuses