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

bash
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:

bash
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:

bash
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