Appearance
Publish your first release
This walkthrough uploads one Android APK and makes it available on the public stable channel. You can use another supported file format, but change the platform, arch, and format values to match the file.
You need a running ReleaseDesk instance, permission to create an app, and an APK ready to upload. Sign in through the dashboard with GitHub. The first account to sign in is allowed to bootstrap the instance; later users need to meet the instance's access rules or have an invitation.
1. Create an app
In the dashboard, create an organization if you do not already have one, then create an app. Give it a name such as Field Notes and a slug such as field-notes. The app starts with dev, beta, and stable channels. stable is public; dev and beta are private.
Keep the app's ID handy. The management API and CLI use that ID, while the public page uses the slug. An app slug is unique inside its organization, not necessarily across the whole server.
2. Create a token for automation
Open Settings → Tokens for the organization. Create a token scoped to this app with upload, promote, and read scopes. Copy the rd_... value when it appears: ReleaseDesk shows the plaintext token only once. Keep it in your shell or CI secret store, not in a committed script. An organization admin can create or revoke tokens.
The examples below use the CLI from this repository. From the checkout, set its connection variables and check that the token points to the intended app:
sh
export RD_URL="https://releases.example.com"
export RD_TOKEN="rd_your_token_here"
curl -H "Authorization: Bearer $RD_TOKEN" "$RD_URL/api/v1/token/whoami"RD_URL is the ReleaseDesk server's public base URL. The response above shows the token's orgId, appId, and scopes. An app-scoped token lets the CLI resolve the organization and app IDs itself. If your token is organization-wide, supply --org <orgId> --app <appId> to the commands below.
3. Upload the APK
sh
bun run packages/cli/src/index.ts upload \
--file ./build/field-notes.apk \
--version 1.4.0 \
--build 104 \
--platform android \
--arch arm64 \
--format apkThe CLI prints a release_id and the artifact's SHA-256 hash. The server checks the uploaded file type, computes SHA-256 and SHA-512, and tries to extract package metadata. For APKs, ReleaseDesk also checks that the signing certificate matches earlier APK releases of the same app.
The upload creates a release but does not publish it. You can upload more artifacts with the same version and build number to attach them to that release. Use a different platform, architecture, format, or variant for each additional artifact; an exact combination cannot be uploaded twice to one release.
4. Add notes and inspect the release
Open the release in the dashboard. Check the reported platform, architecture, package metadata, hashes, and any signing information. Add release notes before promotion if you want them to appear on the download page and in supported feeds. The notes are Markdown and are sanitized when rendered.
If metadata extraction failed, the artifact can still exist. Verify the file yourself before distributing it. A successful upload means ReleaseDesk stored the artifact; it does not prove the application installs or runs.
5. Promote to stable
Use the release_id printed by the upload command:
sh
bun run packages/cli/src/index.ts promote \
--release rel_your_release_id \
--channel stable \
--percent 100The CLI resolves the stable channel's ID and calls the promotion endpoint. At 100%, update clients do not need a device ID to see the release. A smaller rollout percentage requires update clients to send X-Device-Id for stable bucketing.
6. Check the result
Open https://releases.example.com/d/<org-slug>/field-notes. The page should list the Android build, its version, and its download link. The page uses the organization slug and app slug, not their IDs. You can also check the release in the dashboard to confirm that stable appears in its channels.
If the page exists but has no download, check that the release is promoted to a public channel and that the app's public page is enabled. If the upload returned artifact_conflict, the release already has an artifact with the same platform, architecture, format, and variant. If it returned signer_mismatch, the APK certificate differs from the one already recorded for that app.
For direct HTTP calls, see API conventions and Authentication and access. For private testing, promote to beta or distribute the release to a tester group instead of using stable.
Get the rdesk CLI
An instance owner sets the download link under Settings > Site > Public pages > rdesk CLI download URL. It appears on the in-app Help page and in the in-app docs. Binaries exist for linux-x64, linux-arm64, darwin-x64, darwin-arm64 and windows-x64.