Releases and Updates
Update channels, which packages self-update, semantic version tags, and the tag-triggered release pipeline.
Automatic updates
Bundled desktop packages check for updates automatically. The updater is
electron-updater, wired up in electron/integrations/updater.js.
Channels
Two channels: stable (the default) and beta.
Switch in Settings → Application → Beta channel. Turning it on sets
allowPrerelease and points the updater at the prerelease feed. The choice is written to a
preferences file in Orchard’s per-user data directory and applied on the next check.
Beta builds are prereleases. They get less testing and can regress. Turning the toggle back off returns you to stable, though a beta already installed stays installed until stable catches up to or passes its version.
Which installs update themselves
| Package | Auto-update |
|---|---|
| Windows NSIS | Yes |
| macOS ZIP | Yes |
| Linux AppImage | Yes |
Linux .deb / .rpm / Arch | Update through your package manager |
| Flatpak | Update through Flatpak |
Packages installed by a system package manager deliberately do not self-update, since that would fight the package manager.
Versioning
Orchard uses semantic version tags: vMAJOR.MINOR.PATCH, with prereleases as
v4.0.0-beta.1. The release workflow validates that the tag matches package.json’s
version before anything builds, so a mismatched tag fails fast rather than shipping a
mislabeled build.
Release pipeline
.github/workflows/release.yml runs on a pushed tag, in these jobs:
| Job | Produces |
|---|---|
prepare | Tag and version validation, full test suite, mobile unit tests on JDK 17 |
build-linux | AppImage, Flatpak, .deb, .rpm (x86_64) |
build-linux (arm64) | AppImage and Flatpak on native arm64 runners |
build-arch | Arch Linux package |
build-windows | NSIS installer |
build-macos | ZIP for Apple Silicon and Intel |
build-android | Orchard Mobile APK |
publish | Assembles artifacts, checksums, and the release |
publish-github-beta | Prerelease publishing for beta tags |
Two details worth knowing:
- arm64 builds run on native arm64 runners rather than cross-compiling, and the job includes an explicit step verifying the native addon’s architecture. A wrong-architecture addon fails at load time rather than at build time, which is a bad place to find out.
- macOS universal ZIPs can also be cross-built from Linux with
npm run make:mac, which merges per-architecture apps viascripts/merge-macos-apps.mjs.
Update metadata is merged per platform by scripts/merge-windows-update-metadata.mjs,
scripts/merge-macos-update-metadata.mjs, and
scripts/generate-android-update-metadata.mjs.
Continuous integration
.github/workflows/node.js.yml runs npm ci, npm run build, and npm test on pushes and
pull requests. .github/workflows/android.yml covers the Android app, with
android-canary-build.yml for canary APKs.
Where releases are published
- GitHub releases on SFG5453/Orchard
- sfg545.dev/orchard as the front door
- downloads.sfg545.dev/orchard with
SHA256SUMS.txt
Signing
Current Windows and macOS builds are unsigned. Your operating system will warn on first launch. Verify checksums, and install only from the official website or the GitHub releases page. See Installation for the per-platform first-launch steps.
Android release builds are signed from ANDROID_KEYSTORE_FILE,
ANDROID_KEYSTORE_PASSWORD, ANDROID_KEY_ALIAS, and ANDROID_KEY_PASSWORD.
Changelog
The in-app changelog is src/data/changelog.js, shown after an update. Mobile release notes
live in mobile/release-notes.md.