Status: AVAILABLE (internal). runtime.allternit.com is the public domain of the R2 bucket allternit-runtime. Downloads are free, and CORS is set for ai.allternit.com and m.allternit.com. Two things are mirrored there so users don’t depend on GitHub or Hugging Face being reachable.

Voice packs

The voice service (services/voice/src/models.rs) downloads packs from https://runtime.allternit.com/voice-packs/v1/<file name>. Files are flat, with the same names and the same pinned sha256 as the upstream files. If the mirror returns 404, fails, or serves a file that fails the hash check, the service falls back to the upstream URL and logs the fallback once. Setting ALLTERNIT_VOICE_MODEL_BASE skips both and uses <base>/<asset path> alone. To (re)populate the mirror after adding or changing a pinned file, keep the manifest in scripts/mirror-voice-packs.sh in sync with PACKS, then run:
Without those variables the script downloads and verifies every file, then prints the upload commands (curl SigV4) without running them.

Desktop installers

scripts/mirror-desktop-release.sh <version> copies the published Allternit/desktop release v<version> installers (dmg, exe, AppImage, deb; about 1.9 GB a version) to desktop/v<version>/, writes desktop/latest.json, and deletes every other desktop/v*, so only the current version is kept. Auto-update zips, blockmaps and latest*.yml stay on GitHub only. This keeps R2 inside the 10 GB monthly allowance. By default it prints a plan; --apply uploads. Credentials come from R2_ENDPOINT, R2_ACCESS_KEY and R2_SECRET, and it needs an authenticated gh. latest.json looks like {"version": "1.1.3", "assets": {"mac_arm64": "<url>", "mac_x64": "<url>", "win_x64": "<url>", ...}}. The installer script (install.allternit.com) reads it first and falls back to the GitHub API and GitHub release URLs.

Release runbook step

After publishing a Desktop release on GitHub, run scripts/mirror-desktop-release.sh <version> --apply. Until it runs, the installer keeps resolving to the previous mirrored version or the GitHub release.

Runtime packages

Desktop and cloud computers update allternit-api, gizzi-code, allternit-factory and the app’s screens from runtime.allternit.com without a new app build (surfaces/allternit-desktop/src/main/runtime-package.ts). The app checks stable/<platform>/latest.json (signed, Ed25519), downloads only the files whose hash changed (objects/<sha256>.gz, shared by every version and platform), and switches to the new version on its next start. It checks one minute after launch and then every six hours, one check at a time. A file download that receives no bytes for 60 seconds is aborted and retried (three tries); if it still fails, the check logs [Runtime] update check failed and the next check starts over. A platform with no package published keeps the runtime its app was built with. Until 2026-10-07 that was true of every cloud computer: they ran the image’s runtime from 2026-09-14. Publishing (surfaces/allternit-desktop/scripts/runtime-package.cjs):
The packed binaries must be the target platform’s. A Linux package is packed on any machine with ALLTERNIT_RUNTIME_PLATFORM=linux-x64 and ALLTERNIT_RUNTIME_RESOURCES=<dir>, where <dir>/bin holds allternit-api, gizzi-code and allternit-factory built on Linux x64 (the build host is the alt-linux-build container on allternit-standby, sources in /srv/alt-build/src, script /srv/alt-build/rt.sh; allternit-factory needs Zig 0.15.2) and <dir>/platform holds the screens from npm run prepare:platform-static. The signing key stays on the publishing Mac (~/.config/allternit/runtime-signing-ed25519.pem).