Open source · v0.1.0 · MIT

Test apps.Watch them
live.

Write a YAML file. Run one command.
Flick drives your iOS, Android, or web app — captures every crash, streams the screen, and explains failures with local AI.
Zero config. Zero cloud.

3
Platforms
0
Config needed
Sessions per run
FLICK · RUN
flick run
✓ Config 5 sessions · ios
✓ Dashboard localhost:4040
─────────────────────────────
✓ App found FlickStore.app
✓ Simulator B4AAAC51…
✓ Appium ready
─────────────────────────────
✓ App launches 2.3s
✓ Navigate tabs 5.1s
✓ Add to cart 4.8s
✓ Login flow 8.4s
37 passed 0 failed 0 crashed
iOS TestingAndroid TestingWeb TestingLive PreviewCrash DetectionAI AnalysisZero ConfigOpen SourceYAML DrivenLocal LLM iOS TestingAndroid TestingWeb TestingLive PreviewCrash DetectionAI AnalysisZero ConfigOpen SourceYAML DrivenLocal LLM
Why Flick

Designed for developers
who ship real apps.

01
YAML, not code
No boilerplate. No test framework to learn. Write human-readable steps — Flick executes them with full Appium precision underneath.
tap · fill · assert · scroll · wait
02
Live dashboard
Real-time view of every step, error screenshot, and timing at localhost:4040. Stays alive after the run so you can dig into every failure.
localhost:4040
03
Crash detection
App crashes? Flick captures the last screen, records what caused it, retries twice, then moves on. Nothing gets lost or silently swallowed.
screenshot · retry · report
04
Local AI
Ollama or LM Studio analyses failures after every run. Plain English summaries, actionable suggestions, pattern detection. No API key. No cloud. Free.
ollama · lm studio
05
Zero device setup
Write just the app scheme name. Flick finds the build, detects the booted simulator, installs Appium, and starts. No UDID. No paths. Nothing.
auto-detect · zero config
06
Silent errors
Catches unhandled promises, TypeErrors, frozen screens, and ANRs — even when the UI looks fine. Logs, screenshots, timestamps included.
background monitoring
flick.yml
# describe what a user does
config:
  platform: ios
  app: FlickStore
  retries: 2

auth:
  email: test@example.com
  password: ${TEST_PASSWORD}

sessions:
  - name: "Login flow"
    steps:
      - action: tap
        selector: "~tab-account"
      - action: fill
        selector: "~email-input"
        value: ${auth.email}
      - action: fill
        selector: "~password-input"
        value: ${auth.password}
      - action: tap
        selector: "~login-btn"
      - action: assert
        selector: "~dashboard-screen"
        visible: true
The config

Write it once.
Run it anywhere.

No capability objects. No driver setup. No test runner config. Describe what a user does — Flick makes it happen on iOS, Android, and web from the same YAML file.

Secrets live in .env — loaded automatically. Reference them anywhere with ${VAR}.

  • tapTap any element by testID or CSS selector
  • fillType into any input — always clears first
  • assertAssert element is visible or hidden
  • scrollScroll down one screen height
  • waitWait N milliseconds between steps
Platform support

One tool.
Every platform.

01
🍎
iOS
Drives any iOS Simulator via XCUITest. Auto-detects booted simulators. Write the scheme name — Flick finds the build automatically.
XCUITestAppium 2Simulator
02
🤖
Android
Full UiAutomator2 support. Finds connected devices and emulators via ADB automatically. Same YAML, same sessions, same report.
UiAutomator2ADBEmulator
03
🌐
Web
Headless Chrome via WebdriverIO. Live screenshot stream directly in the dashboard preview panel. CSS selectors just work.
WebdriverIOLive previewHeadless
Install

Running in
60 seconds.

No account. No setup. No bullshit.

npm install -g @flick-run/cli
01
Install
npm install -g @flick-run/cli
02
Init
flick init --platform ios
Generates a starter config
03
Edit
Open flick.yml and add your selectors and test steps
04
Run
flick run
Dashboard opens. Tests run.