Bravo — an internal fork of Maestro
Bravo extends Maestro with Apple TV (tvOS) support and for driving canvas-based UIs (e.g. Lightning/WebGL TV apps). It tracks upstream Maestro and adds Bravo-specific capabilities.
Bravo is a minimal, linear stack of feature commits on top of upstream/main (the original Maestro). The table below registers every fork commit so the delta to upstream is always auditable. It is keyed on commit subject + purpose, not SHA — rebasing on upstream rewrites the SHAs, but the subjects are stable. Keep commits minimal: prefer amending an existing commit over adding a new one. See CLAUDE.md for the full workflow.
| # | Commit subject | Purpose | Upstream |
|---|---|---|---|
| 1 | feat: setup Bravo fork |
README rebrand, CLAUDE.md, the update-from-upstream skill, this registry, the major.minor.patch.build versioning scheme (CLI_VERSION tracks Maestro; the fork-owned BRAVO_BUILD adds a 4th segment, auto-incremented at release time by publish-cli, so fork-only fixes ship without drifting from upstream), and the houwert.dev distribution — releases land on DouweBos/Bravo and the installer (curl -fsSL https://houwert.dev/bravo/get | bash) plus CLI update-check/changelog point at the houwert.dev reverse proxy instead of upstream Maestro. |
— (fork-only) |
| 2 | fix(web): prefer data-testid for element selection |
Web driver selects elements by data-testid first for stabler Lightning/WebGL selection. |
not yet upstreamed |
| 3 | feat(tvos): add apple tv support |
Apple TV (tvOS) driver, device handling, RN Expo tvOS demo app, and tvOS e2e flows. | PR #3021 |
| 4 | feat(web): expand web driver keyboard support |
Maps REMOTE_DPAD keycodes (arrows + center) to Selenium arrow keys for Arrow-based navigation on Lightning web apps. |
not yet upstreamed |
| 5 | feat(web): detect web flows from a URL-shaped appId |
FileUtils.isWebFlow() also treats an http(s):// appId as a web target, so a flow can drive the web driver via appId alone (no separate url: field). |
not yet upstreamed |
| 6 | feat(web): expose focus state to the focused selector |
Emits focused into the typed TreeNode.focused from document.activeElement (real web focus) or a data-focused flag, so focused: true selectors resolve on the web driver — including canvas UIs (Lightning), where the canvas itself is always the active element. |
not yet upstreamed |
| 7 | fix(web): honor -p web when selecting the web device |
An explicit --platform web forces web-device inclusion, so flows whose appId is a runtime variable (resolved via -e APP_ID=…) pick the web driver instead of failing with "0 devices connected". |
not yet upstreamed |
| 8 | feat(cli): restore bundled Maestro Studio |
Reverts upstream's removal of the bundled Studio (#3299): restores the maestro-studio:server/web modules and the full studio command so maestro studio launches the local web Studio again instead of only printing a desktop-app download link. |
reverts upstream (fork-only) |
| Remote | URL | Role |
|---|---|---|
origin |
https://github.com/DouweBos/Bravo.git |
The fork; main is canonical. |
upstream |
https://github.com/mobile-dev-inc/Maestro.git |
Original Maestro; we rebase onto upstream/main. |
To pull in the latest Maestro, rebase the fork on upstream — use the update-from-upstream skill (Claude Code), or manually: git fetch upstream && git rebase upstream/main && git push --force-with-lease origin main.
Tip
Great things happen when testers connect — Join the Maestro Community
Maestro is an open-source framework that makes UI and end-to-end testing for Android, iOS, and web apps simple and fast.
Write your first test in under five minutes using YAML flows and run them on any emulator, simulator, or browser.
- Why Maestro?
- Getting Started
- Resources & Community
- Contributing
- Maestro Studio – Test IDE
- Maestro Cloud – Parallel Execution & Scalability
Maestro is built on learnings from its predecessors (Appium, Espresso, UIAutomator, XCTest, Selenium, Playwright) and allows you to easily define and test your Flows.
By combining a human-readable YAML syntax with an interpreted execution engine, it lets you write, run, and scale cross-platform end-to-end tests for mobile and web with ease.
- Cross-platform coverage – test Android, iOS, and web apps (React Native, Flutter, hybrid) on emulators, simulators, or real devices.
- Human-readable YAML flows – express interactions as commands like
launchApp,tapOn, andassertVisible. - Resilience & smart waiting – built-in flakiness tolerance and automatic waiting handle dynamic UIs without manual
sleep()calls. - Fast iteration & simple install – flows are interpreted (no compilation) and installation is a single script.
Simple Example:
# flow_contacts_android.yaml
appId: com.android.contacts
---
- launchApp
- tapOn: "Create new contact"
- tapOn: "First Name"
- inputText: "John"
- tapOn: "Last Name"
- inputText: "Snow"
- tapOn: "Save"
Maestro requires Java 17 or higher to be installed on your system. You can verify your Java version by running:
java -version
Installing the CLI:
Run the following command to install Bravo on macOS, Linux or Windows (WSL):
curl -fsSL "https://houwert.dev/bravo/get" | bash
This installs the Bravo CLI (a drop-in maestro command) from the Bravo distribution — see Fork commit registry for how it's served. To install a specific version, set MAESTRO_VERSION (e.g. MAESTRO_VERSION=2.6.1) before running.
Upstream Maestro installs via
curl -fsSL "https://get.maestro.mobile.dev" | bash— use the Bravo URL above instead to get the Bravo multi-platform build.
The links below will guide you through the next steps.
- Installing Maestro (includes regular Windows installation)
- Build and install your app
- Run a sample flow
- Writing your first flow
Maestro is open-source under the Apache 2.0 license — contributions are welcome!
- Check good first issues
- Read the Contribution Guide
- Fork, create a branch, and open a Pull Request.
If you find Maestro useful, ⭐ star the repository to support the project.
Maestro Studio Desktop is a lightweight IDE that lets you design and execute tests visually — no terminal needed. It is also free, even though Studio is not an open-source project. So you won't find the Maestro Studio code here.
- Simple setup – just download the native app for macOS, Windows, or Linux.
- Visual flow builder & inspector – record interactions, inspect elements, and build flows visually.
When your test suite grows, run hundreds of tests in parallel on dedicated infrastructure, cutting execution times by up to 90%. Includes built-in notifications, deterministic environments, and complete debugging tools.
Pricing for Maestro Cloud is completely transparent and can be found on the pricing page.
Built with ❤️ by Maestro.dev
