Release channels
Every release belongs to one channel: stable, beta or alpha. Stable is always on; beta and alpha are off until you turn on Enable Beta Channel or Enable Alpha Channel in the app settings.
Channel from the tag
The channel comes from the GitHub tag when the release is synced:
| Tag | Channel |
|---|---|
v1.4.0 | stable |
v1.5.0-beta.1 | beta |
v1.5.0-rc.2 | beta |
v1.6.0-alpha.3 | alpha |
alpha anywhere in the tag means alpha; beta or rc means beta; anything else is stable. GitHub’s “pre-release” checkbox does not change the channel.
Requesting a channel
Add ?channel=beta or ?channel=alpha to any public URL. Without it, or with an unknown value, the channel is stable.
- Sparkle:
https://releaseflow.net/{username}/{slug}/sparkle/appcast.xml?channel=beta - Electron:
https://releaseflow.net/{username}/{slug}/update/{platform}/{version}?channel=beta - Downloads and listings:
https://releaseflow.net/{username}/{slug}/download/{platform},https://releaseflow.net/{username}/{slug}/releasesand the download pagehttps://releaseflow.net/{username}/{slug}take the same parameter.
Fallback
A channel includes everything more stable than itself, and the newest version wins:
stablesees stable releases.betasees beta and stable, so beta users move to the final release once it ships.alphasees alpha, beta and stable.
A disabled channel drops out: with beta off, ?channel=beta serves stable releases only. Electron responses report the result in x-releaseflow-requested-channel, x-releaseflow-resolved-channel and x-releaseflow-fallback-applied.
Private dev builds
Tags with a -dev pre-release (v1.6.0-dev.4) go to a private dev channel. It never appears on public pages or feeds and is never a fallback. Generate a token with POST https://releaseflow.net/api/rest/apps/{slug}/dev-channel, then request ?channel=dev on the Electron update route with the token as a bearer header:
autoUpdater.requestHeaders = { Authorization: `Bearer ${DEV_CHANNEL_TOKEN}` };
autoUpdater.setFeedURL({
provider: "generic",
url: `https://releaseflow.net/{username}/{slug}/update/${platform}/${app.getVersion()}?channel=dev`,
});Without a valid token, the dev channel answers exactly like an unknown app.