Open-source mobile testing tools follow a predictable arc: launch free, gain adoption, then gradually move the most useful features behind a paid service. It is a proven business model. It is also the reason half the teams we talk to are stuck choosing between a limited local tool and an expensive cloud subscription.
maestro-runner does not follow this arc. Every feature ships free, under Apache 2.0, with no enterprise tier coming later. But we are not doing it out of idealism – we are doing it because it makes business sense. And we think you deserve to know exactly how.
What free actually looks like
| Feature | Maestro Cloud (Paid) | maestro-runner (Free) |
|---|---|---|
| Test execution | Cloud-hosted | Local + any cloud via Appium |
| HTML reports with screenshots | Cloud dashboard | Local HTML files |
| Parallel execution | Cloud feature | Native --parallel flag |
| CI/CD integration | Cloud-based | Standard CLI, any CI system |
| Team sharing | Cloud accounts | Git + CI artifacts |
| Real iOS devices | Limited | Full WebDriverAgent support |
| JUnit XML reports | Cloud dashboard | Built-in |
| Allure reports | N/A | Built-in |
| Error messages | Java stack traces | Readable one-liners with file + line |
| App install (.apk/.ipa) | Cloud upload | --app flag, local or URL |
| Emulator management | Cloud-managed | --auto-start-emulator |
| Tag filtering | --tags only |
--include-tags + --exclude-tags |
| Configurable timeouts | Not available | --wait-for-idle-timeout, --boot-timeout |
For a detailed breakdown of what cloud providers charge, see our mobile testing cloud pricing comparison.
There is no “community edition” versus “enterprise edition.” There is no cloud service required to unlock capabilities. The binary you download today is the complete product. The binary you download next year will also be the complete product.
This is not a criticism of the cloud model. Cloud services provide genuine value – managed infrastructure, zero-ops setup, team dashboards that work out of the box. For some teams, that is exactly what they need and what they should pay for. But for teams that already have CI runners, already have devices, and have opinions about where their test data lives, a fully-featured local tool is the better fit.
The key difference: when maestro-runner adds a feature, it goes into the same binary everyone downloads. There is no “upgrade to Pro for parallel execution.” There is no “contact sales for real device support.” You install the tool, you have the tool. All of it.
The Hidden Cost of Cloud Testing
Cloud testing introduces costs beyond the subscription line item. Network latency on every device interaction. Screenshots routed through remote servers. Reports behind a login. When the service has an outage, your CI pipeline blocks. You have traded a tool dependency for a service dependency.
maestro-runner runs on your own infrastructure. Your existing GitHub Actions runners, Jenkins agents, or bare metal CI machines already have the compute. The infrastructure cost is already in your budget. The test runner should not be a second line item.
The performance difference compounds: maestro-runner starts in under 20ms (no JVM boot), uses ~27 MB of RAM (not ~350 MB), and runs tests 2-3x faster. On a shared CI runner, that means more test jobs per machine, shorter queue times, and faster feedback loops – all without adding hardware.
What Others Gate Behind Paid Tiers
Most commercial testing tools ship a limited free version and gate the features teams actually need behind paid plans. Here is where maestro-runner differs:
| Feature | Typical Cloud Tool | maestro-runner |
|---|---|---|
| Parallel execution | Paid tier | --parallel N |
| Real iOS devices | Enterprise plan | --team-id flag |
| HTML reports | Dashboard subscription | Built-in, local |
| Screenshot on failure | Cloud feature | Automatic |
| Configurable timeouts | Not available | CLI flags + YAML |
| Exclude-tag filtering | Not available | --exclude-tags |
| Multiple report formats | Premium | HTML + JUnit + Allure, all at once |
Every row in that table is a zero-dollar feature in maestro-runner. Not free-trial. Not free-for-5-users. Free. Permanently.
The pattern in the industry is predictable: launch with generous free tiers, wait for adoption, then move the features that teams depend on into paid plans. By the time the paywall appears, switching costs are high and teams pay up. We think that is a bad deal for developers. maestro-runner’s license is Apache 2.0 – even if the project disappeared tomorrow, you could fork it and keep going. That is the difference between “free” and “free until we decide otherwise.”
How we sustain the project
Here is the part most open-source READMEs leave out. It is also, in our opinion, the most important part. Because the first question any experienced engineer asks about a free tool is: “Who is paying for this, and when will they stop?”
maestro-runner is built by DeviceLab.dev. DeviceLab is a device lab management platform – it helps teams manage physical device farms for mobile testing. The test runner and the device lab are complementary but independent products. You can use maestro-runner without DeviceLab. You can use DeviceLab with Appium, Espresso, XCUITest, or whatever else you prefer.
We built maestro-runner because we needed a better test runner for the devices we manage. The problems we were solving – real iOS device support, performance on CI, reliability under resource constraints – turned out to be the same problems the broader mobile testing community shares. Making the runner open source means more users, more bug reports, more edge cases caught, and a better tool for everyone. Including our own customers.
This is not charity. It is a business decision that happens to align with the needs of the open-source community. We make money from DeviceLab. maestro-runner makes DeviceLab more valuable by expanding the ecosystem of teams who can use it. You get a free test runner with no strings attached. We get a larger, more battle-tested product and a broader community. Everybody wins.
We are telling you this explicitly because the alternative – pretending we built a free tool out of pure altruism – would be dishonest. And dishonest open-source projects are the ones that surprise you with a pricing page six months after you have built your entire CI pipeline around them.
That is not us. The incentive structure is transparent, and it stays transparent.
If the model ever changes – if we ever decide to gate a feature – it will be announced publicly, well in advance, with migration paths documented. We do not expect that to happen, because the current model works. But the commitment to transparency extends to hypotheticals too.
What open source means here, concretely
Five specific commitments:
- No telemetry. maestro-runner does not phone home, track usage, or collect analytics. The only network request is an optional version check, which you can disable with a flag.
- No account required. No sign-up, no API key, no license file. Download the binary and run your tests.
- No vendor lock-in. Your flows are standard Maestro YAML. If you decide to switch tools next month, your flows still work with the original Maestro CLI. You own your tests completely.
- Full source on GitHub. Every line is public. Verify exactly what the tool does, how it communicates with devices, and what data it collects (nothing).
- Contributions welcome. Found a bug? Submit a PR. Want a feature? Open an issue. The project accepts contributions under standard open-source practices.
These are not aspirational bullet points on a marketing page. They are architectural decisions baked into the codebase. There is no telemetry code to disable because we never wrote telemetry code. There is no license check because there is no license to check. There is no “call home on startup” to comment out. The binary does what you tell it to do, and nothing else.
We think this level of transparency should be the norm for developer tools. Your test runner should not be a black box that reports your usage patterns to a vendor. It should be a tool that runs your tests and gets out of the way.
That is what maestro-runner does. Nothing more, nothing less.
Getting started
curl -fsSL https://open.devicelab.dev/install/maestro-runner | bash
maestro-runner test flow.yaml
maestro-runner --platform ios test flow.yaml
maestro-runner test --parallel 3 flows/
maestro-runner --report-format html --report-output results/ test flows/
Generate a full HTML report with zero configuration:
maestro-runner test --format html --output results/ flows/
# Open results/report.html in browser — no cloud account needed
Run on real iOS devices with a single flag:
maestro-runner --platform ios --team-id ABCDE12345 test flows/
Every command above works today, on every platform, at no cost. No trial expiration. No usage cap. No “contact us for pricing.”
For the complete CLI reference and advanced usage, see the full documentation.
GitHub: github.com/devicelab-dev/maestro-runner
Docs: open.devicelab.dev/maestro-runner