Skip to content
Back to Blog

Add a Download Button for Your Beta App to a README (That Never Goes Stale)

BetaDrop Team
5 min read
download button for beta app readmegithub readme download buttondownload beta badgeapp download button html

Reviewed by Kaushal Rola

Founder, Immersive Mobile Designs — we build the OTA tooling this post describes.

Share:

A README with a “Download beta” button gets more installs than one with a URL. Not because the button is prettier, but because a URL to an .apk asks the reader to know what to do with it, and a URL to an .ipa does nothing at all on an iPhone. A button that opens an install page asks nothing.

This is how to put a “Download from BetaDrop” button on a README, a landing page or a wiki in about a minute, and how to make it point at your latest build forever with one line in your CI. Everything below is the free flow until the last section.

Step 1: upload a build and copy the button

Upload your signed .ipa or .apk to BetaDrop. The screen that shows your install link has a row underneath it labelled Embed a download button on your site. Open it and you get:

  • a dark or light badge, matching your page,
  • the snippet as HTML or Markdown,
  • a copy button.

The Markdown version is what a README wants. It looks like this, with your own install link where the placeholder is:

[![Download Pocket Ledger from BetaDrop](https://betadrop.app/badge/download-dark.svg)](https://betadrop.app/install/YOUR-LINK?ref=badge)

And the HTML version, for a landing page or a Notion doc:

<a href="https://betadrop.app/install/YOUR-LINK?ref=badge"><img src="https://betadrop.app/badge/download-dark.svg" alt="Download Pocket Ledger from BetaDrop" width="200" height="60"></a>

That is the whole snippet. One link, one image. There is no script tag and no iframe, which is why GitHub, Notion, Confluence and every Markdown renderer accept it without complaint, and why it cannot slow your page down or break it.

Step 2: paste it under the screenshots

In a README the button belongs where a reader has just decided they want the app: right after the screenshots, or at the top of an “Install” section. Commit the change and the badge renders on GitHub immediately.

A few things worth knowing:

  • GitHub proxies the image. README images load through GitHub’s image proxy rather than straight from betadrop.app. The badge is a plain SVG, so that is fine; it just means the image is fetched by GitHub, not by each reader.
  • The alt text names your app. The snippet carries “Download Pocket Ledger from BetaDrop” (or whatever your build is called), so the button still makes sense to a screen reader or when images fail to load.
  • Keep the badge as shipped. Two colours, 200 by 60 pixels, scale both dimensions together. Loading it from betadrop.app rather than copying the file means it stays current if the design is refreshed.

Step 3: stop the link from going stale

Here is the catch with a button pointed at one build: builds expire. A BetaDrop build link lasts 3 days by default and up to 7 days on the free plan (a year on Pro). The badge in your README keeps rendering after that, but the tap lands on an expired page. For a client review or a sprint demo that is fine, because the page is as short-lived as the build. For a README it is not.

The fix is a channel: a fixed link on your account, such as betadrop.app/install/nightly, that you point at any build you have uploaded. Copy the button with the channel as its target (the embed panel offers it first whenever a channel already serves the same app) and every copy of the button, on every page, serves whatever build the channel currently points at. You point the channel; the README never changes.

Channels are part of the Pro and Studio plans. If you distribute one app to the same testers more than a couple of times, this is the feature that pays for itself, because the alternative is editing every place you ever pasted a link.

Step 4: let CI point the channel

Pointing the channel by hand from the dashboard works. Pointing it from the pipeline that builds the app is better, because then a merge to main updates the button in your README without anyone remembering to.

With the GitHub Action:

- name: Publish to BetaDrop
  uses: betadrop-app/upload-action@v1
  with:
    file: app/build/outputs/apk/release/*.apk
    token: ${{ secrets.BETADROP_TOKEN }}
    channel: nightly

Or with the CLI, in any CI system or on your own machine:

betadrop publish ./build/MyApp.ipa --channel nightly

Both check the channel before uploading: if it cannot be used, the command fails and nothing is stored, so a green pipeline always means the button is current. The Action also exposes the channel’s link as a step output, which is handy for a PR comment. Setup guides for GitHub Actions, fastlane, GitLab CI, Bitrise and Codemagic are on the integrations pages.

What the button does not change

The button opens the same install page a shared link opens, so the platform rules are the same. An Android APK installs on any device that allows installs from unknown sources. An iOS build signed Ad Hoc installs only on devices whose UDID was in the provisioning profile when it was signed, so collect your testers’ UDIDs first; an enterprise-signed build installs on any device that trusts the certificate. And BetaDrop is for pre-release builds going to testers and clients, not a storefront: put the button on pages those people read.

Summary

  1. Upload a build, open the embed panel, copy the Markdown snippet.
  2. Paste it under the screenshots in your README.
  3. Point the button at a channel so it survives your next release.
  4. Add channel: to your CI step and never touch the README again.

Questions

How do I add a download button for my beta app to a GitHub README?

Upload the build to BetaDrop, open "Embed a download button on your site" under the install link, choose Markdown, and paste the one-line snippet into the README. It is an image link, so GitHub renders it like any badge. Point it at a channel rather than a single build so the link keeps working after your next release.

Why not just link to the APK in the README?

A raw APK link installs on Android but does nothing for iOS, and it goes stale the moment you rebuild. A BetaDrop install link serves both platforms from one page, and a channel makes the link permanent: your CI points it at the newest build and the README never changes.

Does the download button expire?

The badge keeps rendering, but a link to one build lasts as long as that build: 3 days by default, up to 7 days on the free plan and a year on Pro. A channel link does not expire in that sense; it always serves whichever build it currently points at.

The full reference, including the badge guidelines and the FAQ, is on the download button page.

Ready to Distribute Your App?

Upload your IPA or APK file and get a shareable install link in seconds. Your first upload needs no account. Completely free.