Build Android apps.
Skip the cloud queue.
Turn a managed Expo project into a signed APK or AAB entirely on your own machine — one disposable Docker container, no Expo account required.
What actually happens when you run ebl build .
The same six phases, whether you watch them scroll by in a terminal or on the GUI's live dashboard.
- 01setup
Prepare
Your project is copied into a clean, disposable container — nothing on your machine changes.
- 02install
Install
Dependencies install via npm — cached across builds, so only the first run is slow.
- 03prebuild
Generate
expo prebuild (or eas build --local) turns your managed project into a real native Android app.
- 04signing
Sign
Debug-signed by default, or wired up with your own release keystore for the Play Store.
- 05compile
Compile
Gradle builds the APK or AAB — logs and CPU/memory/network charts stream live.
- 06collect
Collect
The signed artifact, its SHA-256, and build metrics land in your project's ebl_builds/ folder.
Built for the way Expo apps actually ship
No cloud queue
The default Gradle path never touches EAS — no build quota, no account, no waiting in line behind other builds.
CLI or GUI, your call
ebl build . works standalone from any terminal. Prefer a dashboard? ebl start runs a live web GUI with logs and charts.
Disposable containers
Every build gets a fresh container with its own Android SDK, Node, and Gradle — torn down after, nothing lingers.
Real signing, handled safely
Debug by default, or wire in a release keystore — encrypted at rest, decrypted only in memory for the one build that needs it.
Multiple EAS accounts
Save a token per account; ebl build auto-selects the right one by matching your project's app.json owner.
Secrets stay out of your logs
Anything that looks like a secret in your .env, eas.json, or google-services.json is redacted from streamed and saved logs.