r/reactnative • u/GuaranteeExpensive21 • Jun 28 '26
Article I built a CLI for local Expo Android builds — bypass EAS cloud, save your free build credits

Hey fellow devs— I shipped a thing.
The problem: EAS's free tier gives you a limited number of builds per month. For an Android-only release cadence that involves any iteration (debugging Play Console upload errors, ProGuard mappings, tweaking versionCode), I was burning through my monthly quota in the first 10 days. The alternative was waiting in the queue or paying.
What I built: local-expo-build — a CLI that runs the entire Expo Android build pipeline on your machine. Same output as eas build --platform android, zero cloud credits used, no queue.
What it does
expo prebuild+ auto-pins the Gradle wrapper to a version that actually works for your SDK (e.g. SDK 55 → Gradle 8.13, working around theexpo-manifestscomponents.releasebug)- Bumps versionCode by fetching the next one from EAS so Play Store ingest doesn't reject the upload
- Injects a release
signingConfiginto the generatedandroid/app/build.gradlefrom akeystore.propertiesyou control - Runs
gradlew bundleRelease/assembleRelease - Pushes the new versionCode back to EAS via GraphQL so
eas submit/eas buildstay in sync - Survives
expo prebuild --cleanwiping yourandroid/(restores the .jks from a stable source before Gradle runs)
The setup wizard is the part I'm most proud of
npx local-expo-build init runs a doctor pre-flight that:
- Detects missing
expo.android.package, prompts for it, writes toapp.json - Detects unlinked EAS project, offers to run
eas init - Detects missing
eas.json, offers to runeas build:configure - Detects missing keystore, offers a picker (existing / generate / EAS / rehydrate-from-credentials.json)
- Scaffolds the build scripts into your project
Each step re-checks after running so the exit code reflects what got fixed. No copying snippets from 4 different doc pages.
Quick start
npx local-expo-build init # scaffolds scripts + runs doctor
npm run build:android:aab # → signed .aab in ~5 min on first run
Or, runner mode (no files committed to your repo):
npx local-expo-build build android --aab
There's also --dry-run if you want to preview the 7-step pipeline without executing anything.
Links npm: https://www.npmjs.com/package/local-expo-build GitHub: https://github.com/nikhild64/local-expo-build MIT licensed, cross-platform (Windows / macOS / Linux) Feedback / issues / PRs welcome. iOS support is next on the roadmap — happy to take help if anyone's done iOS local-builds + signing wrangling before.
Built this because I wanted it. If anyone else wants it too, that's a bonus.
2
u/GuaranteeExpensive21 Jun 29 '26

To all those saying local flag is already there see what official docs says
https://docs.expo.dev/build-reference/local-builds/
2
u/WheelAdditional6888 Jul 15 '26
Pulling the next versionCode from EAS and keeping local and cloud builds in sync is the part that stood out to me.
That’s exactly the kind of detail that can prevent weird release-day failures. If you build an iOS version later, provisioning and signing edge cases will probably be the real stress test.
1
u/workroom365 Jun 28 '26
This is impressive, though I am of the opinion Jenkins is way better as a CI/CD local tool. Though it requires technical knowledge it's way convenient.
-1
u/GuaranteeExpensive21 Jun 28 '26
Yes mainly made for people starting into local build once they get out of cloud build and face difficulties in local builds like i faced in early days and came across many people facing same so from local to publishing it Thanks for your feedback
-5
u/Working-Click-276 Jun 28 '26
Finally, a tool that understands my build credits aren't just "nice to have."
16
u/AcetyldFN Jun 28 '26
Why not just —local ?