Maestro suites

sootsim maestro is a drop-in for the real maestro CLI: swap the binary name and your .maestro/ directory runs against SootSim’s in-browser engine. No Xcode, no .app, no simulator.

Run your existing flows

Start your app’s dev server, open it in SootSim, then point the runner at a flow or a directory:

terminal

sootsim open 8081
sootsim maestro test .maestro/login.yaml
sootsim maestro test .maestro/

Directory runs mirror Maestro’s workspace behavior: config.yaml discovery, flows: inclusion globs, and includeTags / excludeTags against each flow’s frontmatter tags. A multi-flow run prints a per-flow pass/fail summary and exits nonzero when any flow fails, so CI can gate on the exit code.

Start from scratch

terminal

sootsim maestro init

scaffolds .maestro/login.yaml with a runnable starter flow (launch, tap, type, assert).

What’s supported

The compat matrix is built in:

terminal

sootsim maestro --list-compat

Supported verbs include tapOn, longPressOn, inputText, assertVisible, assertNotVisible, waitFor, extendedWaitUntil, scroll, scrollUntilVisible, swipe, takeScreenshot, repeat, runFlow, runScript (Maestro JS with http, output, env vars), evalScript, copyTextFrom, openLink, when: conditions, and ${...} JS-expression interpolation at step time. Verbs that only make sense on a physical device (travel, setLocation, setAirplaneMode) fail loudly rather than pretending to work.

Env interpolation seeds from your full shell environment, and a bare ${NAME} that is undefined fails the step instead of typing the string undefined into your app:

terminal

sootsim maestro --env USERNAME=alice test .maestro/login.yaml

When a step fails

The runner captures a per-failure bundle next to your run, named by the failing step: a screenshot, the rendered tree, the accessibility tree, console output, and the error. That is usually enough to fix a selector without re-running anything.

Hosted replays

Add --preview and the run records itself and uploads a shareable replay:

terminal

sootsim maestro test .maestro/checkout.yaml --preview

The command prints a /preview/<id> link where anyone on your team can watch the recording and scrub through every step. Runs that uploaded a replay (and every run in CI) are also registered in your org dashboard’s Runs view with pass/fail, duration, and a per-step trace.

Next

Ready to build?

Run your React Native app in the browser. No simulators, no native toolchain, no waiting.

curl -fsSL https://sootsim.com/install.sh | sh