End-to-end tests that survive your next redesign.
Declarative flows for React Native that survive UI drift instead of breaking on it. When a test does fail, every failure ships with a verdict, a suspect commit, and a proposed fix.
Enter the test fixtures, tap sign-in, then assert the home feed loads.email: test@klera.io
password: hunter2-passClick any redesign — or build your own. The test never changes; the runtime adapts.
Your tests heal themselves when the design changes.
When a button moves, gets renamed, or shifts component, the test finds it anyway and keeps going. The change is recorded as drift you can review on your own time — your flow file on disk stays untouched, your CI stays green.
# A returning user signs in
Open the app and tap **Sign In**.
Enter the test fixtures and confirm
the home feed loads.Where every framework agrees, and where they don't.
| Capability | klera | Detox | Maestro | Appium |
|---|---|---|---|---|
| tap (by testID / label / text) | ✓ | ✓ | ✓ | ✓ |
| type text into input | ✓ | ✓ | ✓ | ✓ |
| swipe (direction or coordinate) | ✓ | ✓ | ✓ | ✓ |
| Hardware back (Android only) | ✓ | ✓ | ✓ | ✓ |
| Permission grant (Android runtime) | ✓ | ✓ | ✓ | ✓ |
| Visual regression diff | ✓ | ◐ | ✓ | ◐ |
| Network mocking + assertions | ✓ | ◐ | ⛔ | ◐ |
| Self-healing strategy ladder | ✓ | ⛔ | ⛔ | ⛔ |
| Run-time intent-drift recovery | ✓ | ⛔ | ⛔ | ⛔ |
| Failure evidence capture | ✓ | ⛔ | ⛔ | ⛔ |
| Auto-triage on failure | ✓ | ⛔ | ⛔ | ⛔ |
| Proactive PR-time maintenance | ✓ | ⛔ | ⛔ | ⛔ |
Every failure ships with a full forensic record.
When a flow fails, the run captures the element graph, the final frames, and a link back to the change that caused it. A written narrative explains what happened, with confidence noted when the cause is ambiguous. You open the report and you know whether to revert a commit, update the flow, or rerun.
tap: "Place order" dispatched, but the next screen never mounted. The element graph shows the button transitioning to disabled — no navigation event followed.
+ - setPaymentMethod: visa-test
- tap: "Place order"
- assert:
visible: "Order received"Write it like a script. Read it in a PR. Run it on a phone.
Flows are plain English (or YAML, if you prefer). Six lines describing what the user does — readable by your PM, reviewable in a diff, runnable on a real device. No JS or Swift authoring path, by design.
Try it on a flow tonight.
One command and a flows/ directory. Works against bare Expo and managed RN projects. Free, MIT licensed, no account.