The CheckOps Engineer home

Tools directory

M

The CheckOps Engineer

Maestro

Maestro is a YAML UI test runner for Android, iOS, and web. The CLI is free and open source; Maestro Cloud is paid.

Visit website

Latest public signals

Not refreshed yet. Refresh reads the public site and, when the entry has a GitHub repository, the latest release.

Visit Website

Introduction

Maestro runs UI flows written in YAML against Android, iOS, and web. A flow is a list of steps: launch an app, tap text, input into a field, assert that something is visible. The CLI waits for the UI to settle between steps, which removes a class of explicit sleeps that Appium suites often accumulate. The CLI and Maestro Studio are Apache-2.0, developed at mobile-dev-inc/maestro.

Local runs use devices and emulators you already have. Maestro Cloud runs the same YAML on hosted devices in parallel. Cloud pricing is per concurrent device, not per seat. The open-source tool does not include that device farm.

Features

  1. YAML flows: Steps such as tapOn, inputText, assertVisible, and launchApp read as a script. Flows can call other flows.
  2. Built-in waiting: Commands retry until the element is ready or a timeout hits. You do not write Thread.sleep between taps.
  3. Selectors: Tap by visible text, id, or index. Text selectors survive some layout shifts that coordinate-based tools do not.
  4. Platforms: Android (including React Native and Flutter apps installed as Android apps), iOS, and web via a Chromium driver. One flow file is not automatically portable across all three; selectors differ.
  5. JavaScript hooks: runScript runs JavaScript when YAML is not enough for a calculation or a generated input.
  6. Studio: A desktop UI inspects the hierarchy and can record steps into a flow.
  7. CLI in CI: maestro test runs a file or a directory and returns a non-zero exit code on failure. Reports and screenshots are written locally.
  8. Cloud parallel runs: maestro cloud uploads flows and the app binary, then runs them across concurrent hosted devices.

Pros

  1. Flows are short: A login path is often a single screen of YAML, which product people can read.
  2. Less flake from timing: The retry loop is the default, so new flows do not start with a pile of sleeps.
  3. Local use is free: Studio and the CLI run on your emulators with no license check.
  4. CI is the same command: The binary you run locally is the binary CI runs. Cloud is optional.
  5. Covers mobile and simple web: Teams that already use Maestro for apps can add web flows without a second DSL, with the limit that selectors are not shared.

Cons

  1. YAML tops out: Loops, data setup, and API seeding are awkward. runScript helps, and a large suite can become a second programming language with worse tooling.
  2. Not Appium’s driver model: Deep gesture control, custom WebDriver agents, and existing Appium grids do not move over unchanged.
  3. Cloud price is per device: Hosted Android and iOS are listed at $250 per device per month, based on max concurrent executions. Web or Chromium capacity is quoted separately on the pricing page.
  4. Hierarchy still flakes: Animations, permission dialogs, and system sheets need explicit steps. Waiting does not fix a selector that matches two nodes.
  5. Web is the newer surface: Mobile flows are the mature path. Browser coverage is not a replacement for a dedicated cross-browser lab.

Install the CLI from the docs, then:

maestro test flow.yaml
maestro studio
appId: com.example.app
---
- launchApp
- tapOn: "Sign in"
- inputText: "[email protected]"
- tapOn: "Continue"
- assertVisible: "Inbox"

Cloud, after you have an API key:

maestro cloud --api-key "$MAESTRO_API_KEY" app.apk flow.yaml

Resources:

Pricing

  1. Local, free: Maestro Studio and the CLI are Apache-2.0. Running on your own emulators, simulators, and devices has no license fee.
  2. Cloud: The pricing page lists $250 per device per month for hosted Android and iOS, billed on the maximum number of concurrent executions, with unlimited hosted runs on those devices. Web and Chromium devices are “ask for pricing” on that page. A 2026 Maestro article also cites $125 per browser per month; treat that as secondary to the pricing page.
  3. Enterprise Cloud: Custom contracts, SSO, and managed tests. No public sticker price.
  1. Mobile teams who want readable UI flows and can live with YAML.
  2. React Native and Flutter apps where the test should tap what the user sees, not call a framework-specific driver first.
  3. CI that already has emulators, using the CLI now and Cloud only when local devices are the bottleneck.
  4. Groups leaving Espresso or XCUITest for a shared DSL across Android and iOS, accepting that some native edge cases stay in the platform frameworks.

Conclusion

Maestro is a practical mobile UI runner: YAML flows, default waits, and a free local CLI. Use it when the team will actually read the flows. Move complex data setup into scripts or API calls instead of stretching YAML. Budget Cloud as a device-concurrency product at the published $250 per device rate, and confirm web pricing on maestro.dev before you plan browser capacity there.