How a version gets from the repository to people's phones, and where it is listed. Written so it is repeatable by anyone with the signing key.
- Update
versionCode(add one) andversionNameinapp/build.gradle.kts. - Add the release's entry to
CHANGELOG.md, and copy its user-facing lines tofastlane/metadata/android/en-GB/changelogs/<versionCode>.txt(F-Droid shows that file). - Build and install on at least one reference phone and go through: sign-in (debug build, so the real session is untouched), chat list, a chat, send, a notification arriving with the app in the background, Settings.
- Commit, then tag:
git tag -a v0.3.0-beta -m "Operator 0.3.0-beta"and push the tag.
export JAVA_HOME="/Applications/Android Studio.app/Contents/jbr/Contents/Home"
./gradlew clean :app:assembleOperatorReleaseShipped builds are unshrunk (about 16 MB), which is what has been tested and what F-Droid builds. -Pminify turns R8 on for experiments; the shrunk build has not been verified against a real sign-in, so do not ship it without doing so.
Signing needs keystore.properties at the repository root (never committed), pointing at the keystore ~/.operator-signing/operator-release.jks, alias operator. The certificate's SHA-256 fingerprint, published in the README, is c978a97c7ce5eb6b4cd4cb14416e2f0fb2d15945c6f9795dd80cdc0bf7431f34. Losing this key means future updates cannot install over existing ones, so it is backed up offline.
Rename the output to operator-<version>.apk.
- GitHub release on the tag, with the APK attached and the changelog entry as the body. This is the source of truth; everything below follows from it. Update the "Download the APK" link and size at the top of
README.mdto the new file name. - IzzyOnDroid: not listed. The inclusion request (October 2026) was declined under their policy on AI-assisted code, which Operator disclosed.
- F-Droid builds from the tag using the metadata file in the fdroiddata repository. New versions are picked up automatically when the metadata's auto-update mode is set to tags. The first submission is a merge request to https://gitlab.com/fdroid/fdroiddata adding
metadata/io.github.operatorchat.operator.yml(a ready draft is infdroid/here). It needs a gitlab.com account to open the merge request. Expect the review to take weeks. - Obtainium users get the GitHub release directly; nothing to do.
| Place | Updated by | Notes |
|---|---|---|
| GitHub releases | Us, manually | Source of truth. Signed with our key. |
| F-Droid | Automatic from tags, built by F-Droid | F-Droid's signature. Listing text comes from fastlane/metadata. Shows the "NonFreeNet" anti-feature because Operator depends on Beeper. |
| Obtainium | Automatic from GitHub releases | Not a store; a user-side updater. |
Google Play: not listed. If that ever changes, the "Support Operator" row must be hidden in that build (Play forbids external donation links) and a data-safety form and privacy-policy URL are required.
- Install the published APK on a phone from the download, not from the build directory, and check it opens and signs in.
- Tell the beta testers.
- Open the next changelog entry as "unreleased".