Android test
infrastructure,
without the device
rack.
Run Appium and WebDriver suites on containerised Android 12–16. Manual sessions and hosted CI runners, without a device rack.
NewHosted Appium 3 runnersEmber
Readycom.ember.coffee · v1.8.0 (140) · targets API 35 · 12.5 MB
Good afternoon, Alex
Ready when you are.
Featured today
Ethiopia Guji
Bright · floral · honey
€4.20 / cup
Today's menu
Runs your Android stack
- Native Android
- Jetpack Compose
- Kotlin Multiplatform
- Flutter
- React Native
- Unity
From upload to result, on one device.
Upload a build and SpawnDroid does the rest: boot, install, and a runner that serves the browser stream and a hosted Appium endpoint at once.
- No device to plug in, and no emulator to keep alive
- The same device for people in the browser and tests in CI
- Logcat and a screen recording retained for every run
Upload APK
console or CI
Device boots
Android 14 · arm64
Build installed
not auto launched
Runner ready
browser stream + Appium URL
Logcat streaming
live from the device
Everything you need to run the app, by hand or in CI.
One platform for the two jobs teams actually have: driving a build yourself, and letting your test suite drive it in a pipeline.
Real Android, not an emulator
Each session boots Android as a container on ARM64 hardware, so your APK links against real arm64-v8a libraries and runs against the same kernel interfaces a phone uses.
- Android 12 to 16, phone or tablet
- No QEMU device model, no hypervisor
- Ready in well under a minute
Hosted Appium runners for CI
Every CI session is an Appium 3 server with the UiAutomator2 driver and your build already installed. Point your existing WebDriver tests at the session URL. There is no SDK to vendor.
- WebdriverIO, Selenium or any Appium client
- Token gated WebDriver URL per run
- Pass or fail reported straight back to the pipeline
curl -X POST "$SPAWNDROID_URL/api/v1/sessions" \
-H "Authorization: Bearer $SPAWNDROID_KEY" \
-H "Content-Type: application/json" \
-d '{ "artifactId": "my-app" }'
# → { "webdriverUrl": "…/ci/sess_7f2c/wd/hub",
# "device": { "apiLevel": 34 },
# "app": { "package": "com.acme.checkout" } }See what the app is actually doing
Stream Logcat beside the screen while you drive the app by hand, and keep the final logcat plus a screen recording from every CI run. Sessions are isolated and destroyed when they end.
- Live Logcat with level filters and search
- Retained logcat and recording per run
- Nothing carried between sessions or workspaces
Wire it into your pipeline.
Upload the build, start a hosted Appium runner, and point your existing WebDriver tests at it. Pick your client below; the only changes are the WebDriver URL and capabilities.
The build is already installed on the session device, so the capabilities never set appium:app. The endpoint is a standard W3C WebDriver URL, so WebdriverIO, Selenium and any Appium client work unchanged. See all integrations.
How teams run Android builds today.
Emulators, device farms and self-hosted racks each solve part of it. SpawnDroid is real Android in a container you can drive by hand or hand straight to Appium.
one per engineer
- No emulator
- No
- Native arm64
- No
- Hosted Appium
- No
- No SDK to adopt
- Yes
Sauce Labs, BrowserStack
- No emulator
- Yes
- Native arm64
- Yes
- Hosted Appium
- Yes
- No SDK to adopt
- Partial
a rack you maintain
- No emulator
- Yes
- Native arm64
- Yes
- Hosted Appium
- Partial
- No SDK to adopt
- Yes
containerised Android, on demand
- No emulator
- Yes
- Native arm64
- Yes
- Hosted Appium
- Yes
- No SDK to adopt
- Yes
“Partial” means it can be done, but only with a device to manage, a queue to wait in, or a framework to wire up first.
Start with Hobby. Scale when your team does.
Hobby is free forever with 200 device-minutes a month. Personal adds a second runner for side-by-side testing, 1,000 minutes and 60-minute sessions; Team adds five runners, five seats, 3,600 minutes and unlimited session length. Enterprise is contracted capacity with an SLA.
What a 10-minute run costs
A run that holds a device for 10 minutes uses 10 device-minutes. Billing starts when the device is ready, not while it boots.
- Hobby
- 20 runs
- 200 minutes, then a hard stop
- Personal
- 100 runs
- Then $0.15 per run, capped at $25/mo
- Team
- 360 runs
- Then $0.10 per run, capped at $250/mo
Prices in USD, excluding VAT · Overage is metered and capped · Cancel anytime
Where your build runs, and who can see it.
Real ARM64 servers, containerised Android and one device per session — all on infrastructure we operate. How the platform works.
ARM64 servers
Native arm64, with no hypervisor in the path.
Android 12–16
Containerised, sharing the host kernel through binder.
One session, every client
A browser stream and a hosted Appium endpoint at once.
Read the security page and the privacy notice for the full detail, or email engineering@spawndroid.io with a security question.
Hard questions, straight answers.
If your question isn't here, talk directly to the engineers building SpawnDroid, not a sales bot.
Neither. SpawnDroid runs Android as a container on ARM64 server hardware — no QEMU device model, no hypervisor and no handset. Your APK links against real arm64-v8a native libraries and runs against the same kernel interfaces Android uses on a phone, which is what makes native crashes, ABIs and framework behaviour trustworthy. What you drive in the browser is the app actually running, not a simulation of it.
Put your next build on real Android.
Upload an APK, then run it by hand or hand it to Appium in your pipeline. No device to plug in and no emulator to keep alive.
One free parallel runner · 200 device-minutes a month · no card