Build distribution, by Hash Media
Every build, on every device, in seconds.
Send one link. Your testers and your clients install the current build on the phone in their hand — and you can see who did, hear what broke, and push a fix the same day.
Free to start, no card · Android and iOS · instant JavaScript updates
Three steps, then it is someone else’s turn
Push a build
Drop an .apk or .ipa in, or post it from CI in one curl. Version, build number and bundle ID are read out of the file — nothing to type.
Send one link
A link or a QR code. No account, no TestFlight invite, no 200 MB file in WhatsApp. It always points at the newest build on that channel.
They tap install
It installs over the air on the device they are holding. You see who got it, on what, and when — and they can report a bug from inside the app.
Everything the handover needs
The parts of shipping a build to other people that usually get done by hand, or not at all.
Over-the-air install
Android and iOS, straight from the browser. Ad Hoc iOS builds are handled properly, including device enrolment and provisioning-profile expiry warnings before apps stop launching.
Always the current build
A share link tracks a channel, not a file. Prelive and Live stay separate, and nobody is ever testing last week's build by accident.
Instant JavaScript updates
Push a React Native fix to installed apps without a store release. Speaks the CodePush protocol, so an app already using react-native-code-push only needs its server URL changed.
Feedback from inside the app
A tester taps 'report a problem' and you get the words, a screenshot, the exact build, the device and the OS — instead of 'it crashed on my phone'.
Client sign-off
Give your client an account that can review and approve a build, or send it back with a note. Approvals are advisory, so nobody's link breaks at the wrong moment.
Your brand, not ours
Your logo, your colour, your domain on every page your client sees. On a white-labelled portal our name appears nowhere at all.
Who actually installed it
Real install counts per build, per device — deduplicated, and not inflated by link previews or a browser prefetching in the background.
Built for CI
Scoped tokens, a plain HTTP upload, and a webhook into Slack or Discord when a build lands. Fits in a GitHub Actions step you can read in one glance.
For agencies and studios
Hand your client a portal with your name on it
Every project ends up with the same ritual: a build goes out over WhatsApp, someone installs the wrong version, and the client asks for a status update. Put them on a portal that carries your branding on your own domain, let them install the current build themselves and sign it off, and the ritual disappears.
- Your logo, colour and domain — our name appears nowhere
- A client role that can install and approve, and nothing else
- Separate organisations per client, with no way to see across them
For mobile teams
Stop losing hours to build distribution
Testers install from a link on the device they are holding. Builds expire on a schedule so old artifacts do not pile up, the newest on each channel is always kept, and every install is recorded so you know what was actually tested before you ship.
- Android and iOS, including Ad Hoc device enrolment
- Prelive and Live channels, with store and test-track links alongside
- 90-day retention that never deletes the newest build on a channel
For teams leaving App Center
CodePush, without the retirement notice
App Center is gone and CodePush went with it. This speaks the same client protocol: point react-native-code-push at your own server, keep your deployment keys in the binary, and carry on shipping JavaScript fixes the same day you write them.
- Staging and Production deployments, promote between them
- Partial rollout by percentage, mandatory updates, one-click rollback
- Install and failure counts per release, so a bad bundle is visible fast
Pricing
Per organisation, per month. Prices exclude GST. Nothing here is metered by surprise — when you reach a limit you are told, and nothing you already published stops working.
Free
₹0/mo
One app, for trying it out.
- 1 app
- 3 team members
- 2.0 GB storage
- 20 builds this month
- 1 CI token
- No custom branding
- No custom domain
- No build webhooks
- No instant js updates
Starter
₹1,999/mo
A small team shipping a couple of apps.
- 3 apps
- 10 team members
- 20.0 GB storage
- 150 builds this month
- 3 CI tokens
- No custom branding
- No custom domain
- Build webhooks
- No instant js updates
Growth
₹4,999/mo
Your brand, your domain, and updates without the store.
- 10 apps
- 25 team members
- 100 GB storage
- 600 builds this month
- 10 CI tokens
- Custom branding
- Custom domain
- Build webhooks
- Instant JS updates
Scale
Talk to us
Unlimited, with terms to match, for teams running many apps or a large fleet of devices.
- Unlimited apps, people and storage
- Everything in Growth
- Onboarding and a named contact
Not sure which one? Start where you are — moving between plans takes effect immediately and never interrupts a build that is already out.
Questions people actually ask
Do my testers need an account?
No. An install link works for anyone who has it. You can put a password on it, give it an expiry, or cap how many installs it allows. Accounts are for your team and your clients, not for testers.
Does iOS really work without TestFlight?
Yes, over-the-air, the same mechanism enterprises have always used. With a standard Apple Developer account, builds are Ad Hoc, which means each device's UDID must be in the provisioning profile — so there is a device enrolment page that collects them, and each build shows which of your registered devices it actually covers.
What happens when a provisioning profile expires?
An expired profile stops an installed iOS app from launching, not just from installing — which is why every build shows the expiry date and warns you a month ahead.
Can I push updates without going through review?
For the JavaScript half of a React Native app, yes. Native code still needs a store release. Instant updates are for the code you change most often, and each release targets a range of binary versions so a bundle never lands on a binary that cannot run it.
Where does my data live?
On our servers in one place, with nightly backups that are restored and row-counted to prove they work. Build artifacts are served directly by the web server rather than streamed through the application, so a large download does not slow anything else down.
Can I use my own domain?
Point a CNAME at us and the portal answers on it, wearing your branding. A TLS certificate for the hostname is arranged as part of setting it up.
Put your next build in their hands
Bring your team across in an afternoon. The docs cover the whole path, from a first upload to shipping a JavaScript fix without a store release.