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 "[email protected]" 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, iOS simulators, and physical devices. Stable WiFi testing with zero connection drops. 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/ -vYes. FlutterProbe supports physical iOS devices via USB or WiFi. WiFi is recommended — it provides a stable, drop-free connection. USB-C cables can cause intermittent disconnects due to charge/data mode switching. Build with --dart-define=PROBE_WIFI=true and connect with --host <device-ip>.
USB-C cables switch between charging and data transfer modes, which momentarily disconnects the device. FlutterProbe auto-reconnects (up to 2 retries), but this adds latency. Switch to WiFi testing to eliminate drops entirely, or use a USB-A cable which doesn’t have this issue.
restart the app work over WiFi?Yes. The CLI pre-shares a token with the agent before restarting. After restart, the agent uses the pre-shared token — no USB log reading needed.
clear app data, allow/deny permission, and set location are skipped with a warning on physical iOS devices (no simulator sandbox access). On Android physical devices, only set location is unsupported. All other operations work normally.
Add flutter_probe_agent as a dev dependency and call ProbeAgent.start() in your main entrypoint, guarded by --dart-define=PROBE_AGENT=true. No other changes needed. The agent is stripped from release builds.
Yes. FlutterProbe includes GitHub Actions workflows for Android (ubuntu + emulator) and iOS (macOS + simulator) with 3-way test sharding, automated app build, and HTML report generation. Use --format junit -o results.xml for CI integration.