Maestro CLI commands and options
Complete reference for Maestro CLI global options and subcommands including test, cloud, record, start-device, and their specific options.
This document lists all the options and subcommands you can pass to the Maestro CLI.
Usage
To use the subcommands and/or options with the Maestro CLI, follow this pattern:
maestro [options] [subcommand] [subcommand options]For example, to run a test with verbose logging and a specific tag:
maestro --verbose test my-flow.yaml --include-tags=smokeOptions
You can pass these global options with the Maestro CLI:
--[no-]ansi, --[no-]color
Enable or disable color and ANSI output.
--udid, --device
Pass the device ID to run the test on. Usage: --device=00008030-001C195E0E88002E.
-h, --help
Display the help message for the flag or subcommand.
-p, --platform
Select the platform to run the test on. Usage: --platform=ios.
--verbose
Enable verbose mode.
-v, --version
Display the version of the Maestro CLI you have installed.
Subcommands
You can pass these subcommands with the Maestro CLI:
bugreport
Send a bug report.
chat
Use Maestro GPT to help you with the apps and tests.
cloud
Upload your Flows to Maestro Cloud.
download-samples
Download sample Flows and sample apps for running with the Maestro CLI.
driver-setup
Setup Maestro drivers for your device.
login
Login into Maestro Cloud.
logout
Logout from Maestro Cloud.
mcp
Start the Maestro Model Context Protocol (MCP).
record
Record your Flows.
start-device
Start an iOS Simulator or an Android Emulator.
test
Test a Flow or a selected set of Flows on a local iOS Simulator or Android Emulator.
Subcommand Options
Each subcommand of Maestro CLI supports specific options.
test
testRun tests on your local device or emulator.
--analyze
[Beta] Enhance the test output analysis with AI Insights.
--api-key=<apiKey>
[Beta] API key.
--api-url=<apiUrl>
[Beta] API base URL.
--[no-]ansi, --[no-]color
Enable / disable colors and ANSI output.
--config=<configFile>
Optional YAML configuration file for the workspace.
-c, --continuous
Run tests in continuous mode.
--debug-output=<debugOutput>
Configures the debug output in this path, instead of default.
-e, --env=<String=String>
Set environment variables.
--exclude-tags=<excludeTags>
List of tags that will remove the Flows containing the provided tags.
--flatten-debug-output
All file outputs from the test case are created in the folder without subfolders or timestamps for each run.
--format=<format>
Test report format (default=NOOP). Options: JUNIT, HTML, NOOP.
-h, --help
Display help message.
--headless
(Web only) Run the tests in headless mode.
--include-tags=<includeTags>
List of tags. Only flows containing these tags will be run.
--output=<output>
Specify the output destination.
--screen-size=<width>x<height>
Specify the dimensions of the headless browser, e.g. 1920x1080. Web only.
-s, --shards=<count>
Number of parallel shards to distribute tests across.
--shard-all=<shardAll>
Run all the tests across N connected devices.
--shard-split=<shardSplit>
Run the tests across N connected devices, splitting the tests evenly across them.
--test-output-dir=<testOutputDir>
Configures the test output directory for screenshots and other test artifacts.
--test-suite-name=<testSuiteName>
Test suite name.
<flowFiles>...
One or more flow files or folders containing flow files.
cloud
cloudUpload and run your flows on Maestro Cloud.
--android-api-level=<level>
Android API level to run your flow against.
--apiKey, --api-key=<key>
API key for Maestro Cloud.
--apiUrl, --api-url=<url>
API base URL.
--appBinaryId, --app-binary-id=<id>
The ID of an app binary previously uploaded to Maestro Cloud.
--app-file=<path>
App binary to run your Flows against.
--async
Run the upload asynchronously and exit immediately.
--branch=<name>
The branch this upload originated from.
--commitSha, --commit-sha=<sha>
The commit SHA of this upload.
--config=<file>
Optional .yaml configuration file for Flows.
--device-locale=<locale>
Locale for the device (e.g., "de_DE" for Germany).
--device-model=<model>
iOS device model to run against (e.g., iPhone-11).
--device-os=<os>
iOS version to run against (e.g., iOS-17-5, iOS-18-2).
-e, --env=<Key=Value>
Environment variables to inject into your Flows.
--exclude-tags=<tags>
List of tags that will remove the Flows containing the provided tags.
--flows=<path>
A Flow path or a folder path that contains Flows.
--format=<format>
Test report format (default=NOOP). Options: JUNIT, HTML, NOOP.
-h, --help
Display help message.
--include-tags=<tags>
List of tags. Only flows containing these tags will be run.
--ios-version=<version>
(Deprecated) iOS version. Use --device-os instead.
--mapping=<path>
dSYM file for iOS or Proguard mapping file for Android.
--name=<name>
Name of the upload.
--[no-]ansi, --[no-]color
Enable / disable colors and ANSI output.
--output=<path>
File to write report into (default is report.xml).
--projectId, --project-id=<id>
Project ID.
--pullRequestId, --pull-request-id=<id>
The ID of the pull request this upload originated from.
--repoName, --repo-name=<name>
Repository name (e.g., GitHub repo slug).
--repoOwner, --repo-owner=<owner>
Repository owner (e.g., GitHub organization or user slug).
--test-suite-name=<name>
Test suite name.
record
recordRecord your flow execution.
<flowFile>
The Flow file to record.
[<outputFile>]
Output file for the rendered video. Only valid for local rendering using --local.
--apple-team-id=<appleTeamId>
The unique 10-character Apple Team ID assigned to your team's account.
--[no-]ansi, --[no-]color
Enable or turn off colors and ANSI output.
--config=<configFile>
Optional .yaml configuration file. Defaults to config.yaml in the root directory.
--debug-output=<debugOutput>
Configures a custom path for debug output.
-e, --env=<String=String>
Environment variables to inject into the Flow.
-h, --help
Display the help message.
--local
Record using local rendering (Beta).
--output=<path>
Write the report to this file. The default is report.xml.
--repoName, --repo-name=<name>
Set the repository name.
--repoOwner, --repo-owner=<owner>
Set the repository owner.
start-device
start-deviceLaunch an emulator or simulator.
--device-locale=<locale>
Combination of lowercase ISO-639-1 code and uppercase ISO-3166-1 code (e.g., "de_DE").
--force-create
Overrides the existing device if it already exists.
-h, --help
Display the help message.
--os-version=<version>
OS version to use. iOS: 16, 17, 18. Android: 28, 29, 30, 31, 33.
--platform=<platform>
Platforms: android, ios, or web
Named parameters
While Maestro supports positional parameters for quick commands, using named parameters is strongly recommended for clarity and reliability, especially in CI/CD pipelines.
Named parameters such as --app-file and --flows can be provided in any order, making scripts easier to read and less error-prone.
--app-file
Specifies the local app file path you are uploading.
--flows
Specifies the local directory or specific file of flows to test.
Because named parameters are explicit, their order does not matter:
If you rely on positional parameters, the order must be correct or the command will fail:
For CI environments and long-lived scripts, prefer named parameters to avoid subtle errors.
Last updated