Write tests your whole team can read. Execute with direct widget-tree access — no accessibility layer, no WebDriver overhead.
test "user can log in" open the app tap "Sign In" type "user@test.com" into "Email" type "secret" into "Password" tap "Continue" see "Dashboard" <!-- 7 lines. Done. -->
Two components. One WebSocket. Zero flakiness.
Parses .probe files, manages devices, dispatches commands, generates reports
Go · 15MB binaryRuns inside your app. Walks widget tree, executes actions, captures screenshots
Dart · dev dependencyNo plugins to install. No extra packages. Batteries included.
ProbeScript reads like English. No locators, no async/await. QA, product, and engineering can all read the tests.
Direct widget-tree access via the Dart agent. No XPath, no accessibility bridge. Command round-trips under 50 milliseconds.
Re-runs on file save with hot-reload awareness. Iteration cycles under 2 seconds. No recompilation needed.
Same tests on Android emulators and iOS simulators. Permissions, lifecycle, and platform quirks handled automatically.
Record taps, swipes, and text input on a real device. FlutterProbe writes the .probe file as you interact.
Screenshot baselines with configurable pixel thresholds. Catch unintended UI changes before they ship.
Mock API responses directly in test files. No external packages, no separate mock server.
JUnit XML, JSON, HTML reports. Official Docker image. GitHub Actions workflow included. Test sharding with --shard N.
Same login test. Different experience.
probe-convert handles 7 source formats. 100% construct coverage.
Single binary. No runtime deps.
curl -Lo probe ...releases/latest/download/probe-linux-amd64Scaffolds config and test directory.
probe initPlain English in a .probe file.
tests/login.probeAgainst any connected device.
probe test tests/ -v