* docs: README covers iOS + web, surface both example apps * docs(cli): document --ios-device and per-platform doctor * docs: tighten README, fold examples into Docs list * docs(runs): correct --clear-data lifecycle wording Default behavior no longer wipes app data between runs; --clear-data is now opt-in. * docs(getting-started): add iOS path, separate folio and folio-web Document just test-ios under examples/folio, and distinguish the KMP sample from the React + Vite folio-web sample. * docs(inspect): document the eight panels Lists Screenshot, ActionList, Timeline, ViolationsPanel, HierarchyPanel, SnapshotTable, MetricsChart, ExceptionsPanel. Cross-links HierarchyPanel to the spec language reference. * docs(writing-specs): document setup export, flag noLogcatErrors as android-only Mirrors pkg/spec/README.md so the manual covers the runner's setup-first fall-through. Marks noLogcatErrors as Android-only so iOS/web spec authors know it silently no-ops. * docs(folio): document web target and iOS sanderling test recipe After the KMP refactor folio also runs on wasmJs and the justfile exposes just web, just web-build, and just test-ios. Surface all three. * docs(folio-web): add README Covers prerequisites, demo credentials, just test recipe, and how the React + Vite host exposes state to the sanderling spec via stable ids and data-* attributes. * docs: scrub driver-implementation name from user docs Drop the implementation tool name from README, cli.md doctor table, and spec-language.md. These docs should describe behaviour, not the specific underlying tool the native sidecar wraps. * docs(development): scrub driver-implementation name from dev docs architecture, design-principles, decisions now describe the native sidecar by role (gRPC surface over OS UI-test pipeline) rather than by the specific tool it wraps.
2.3 KiB
title
| title |
|---|
| Getting started |
Getting started
Install the CLI, run a spec.
Prerequisites
Android / iOS:
- An Android emulator with API level 30 or newer (or a connected device).
adbon your PATH.
Web:
- Chrome installed. sanderling drives it via CDP; no other setup required.
Run sanderling doctor to check the host environment.
Install
CLI
curl -fsSL https://raw.githubusercontent.com/priyanshujain/sanderling/master/install.sh | bash
Spec package (npm)
npm install --save-dev @sanderling/spec
Your first run
The repo ships two sample apps. examples/folio is a Kotlin Multiplatform personal-ledger app that covers Android, iOS, and web (wasmJs) from one shared codebase. examples/folio-web is a smaller React + Vite app that covers only the web path. Both carry a TypeScript spec under sanderling/spec.ts. Install just, then pick a target below.
Android
From examples/folio:
just install # build and install the folio APK on a booted emulator or device
just test # run the spec
With no device connected and multiple AVDs, pick one:
AVD=Pixel_7 just test
Persistent settings can live in a .env alongside the justfile (AVD=Pixel_7, DURATION=5m, and so on).
iOS
From examples/folio (requires Xcode 16+ and xcodegen):
just test-ios # default simulator: iPhone 17 Pro
IOS_DEVICE="iPhone 15" just test-ios # pick a different simulator
just test-ios boots the simulator if needed, builds and installs the app, then runs sanderling test --platform ios.
Web
From either example. For the KMP wasmJs build, use examples/folio:
just web # serve the wasmJs app on a webpack dev server
For the React + Vite build, use examples/folio-web:
just test # starts the Vite dev server, then sanderling drives Chrome via CDP
No emulator or SDK setup needed for either web path.
Trace output
When the run ends, the trace lands in sanderling/runs/<timestamp>/:
runs/2026-04-18T12-34-56/
├── trace.jsonl
├── screenshots/
└── meta.json
Browse it with sanderling inspect (see inspect), or read trace.jsonl step by step.
Next: writing specs.