OrchardDocs

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

PackageAuto-update
Windows NSISYes
macOS ZIPYes
Linux AppImageYes
Linux .deb / .rpm / ArchUpdate through your package manager
FlatpakUpdate 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:

JobProduces
prepareTag and version validation, full test suite, mobile unit tests on JDK 17
build-linuxAppImage, Flatpak, .deb, .rpm (x86_64)
build-linux (arm64)AppImage and Flatpak on native arm64 runners
build-archArch Linux package
build-windowsNSIS installer
build-macosZIP for Apple Silicon and Intel
build-androidOrchard Mobile APK
publishAssembles artifacts, checksums, and the release
publish-github-betaPrerelease 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 via scripts/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

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.