Earn 14 free days when your bug report or suggestion is accepted — how it works

Compatibility matrix

CodeLoop’s promise: any developer on macOS, Windows, or Linux, using Cursor or Claude Code, building a web app, desktop app, Flutter mobile app, or native iOS/Android app, gets the full deep-verification loop — build/test verify, real launch, real driven interactions, screenshots, video, log monitoring, and the ≥94 % confidence gate. This page is the honest map of where that promise stands per host × target cell, including the boundaries.

Legend

MarkMeaning
Implemented and proven in logged live end-to-end sessions.
🟡Implemented and covered by the test suite; live proof on real hardware is still being collected.
Not possible on that host (e.g. iOS requires macOS). CodeLoop returns a clear directive instead of failing silently.

Host: macOS (Cursor or Claude Code)

Target appBuild/TestLaunchInteractionsScreenshotsVideoApp logs
Web app✅ Playwright✅ console + server
macOS desktop (Flutter / native)✅ CGEvent / osascript✅ avfoundationlog stream
Flutter iOS Simulator🟡 stall-aware + build reuse✅ real input (idb / CGEvent), Maestro flows✅ simctl✅ simctl recordVideo✅ simctl log stream
Flutter Android emulator✅ gradle🟡🟡 adb (device-pinned) + Maestro✅ adb✅ adb screenrecord✅ logcat
Native iOS (Swift/SwiftUI)🟡 xcodebuild + simctl🟡🟡 scanners + simctl fixtures
Native Android (Kotlin/Compose)🟡 gradle + monkey🟡🟡 adb + scanners
Physical Android device🟡🟡🟡 adb pinned, emulator-only actions guarded🟡🟡🟡
Physical iPhone🟡 detected⬜ best-effort via flutter run
Windows desktop app⬜ directive

Physical iPhone caveat: CodeLoop detects connected iPhones and can attempt a best-effort flutter runlaunch, but Apple provides no supported screenshot / video / input path for physical devices from the command line. Visual evidence requires the iOS Simulator — CodeLoop says so explicitly rather than implying parity.

Host: Windows (Cursor or Claude Code)

Target appBuild/TestLaunchInteractionsScreenshotsVideoApp logs
Web app✅ Playwright✅ gdigrab
Windows desktop (Flutter / .NET)✅ user32 + UI Automation✅ gdigrab
Flutter Android emulator🟡🟡🟡 adb + Maestro (JVM)🟡🟡🟡
Native Android🟡🟡🟡🟡🟡🟡
Physical Android device🟡🟡🟡🟡🟡🟡
iOS (any form)⬜ “iOS requires macOS” directive
macOS desktop app⬜ directive

Windows-specific hardening that makes the Android column work: adb is resolved through ANDROID_HOME / ANDROID_SDK_ROOT/ the default Android Studio install location even when it is not on PATH (the #1 Windows issue — Android Studio does not add platform-tools to the shell PATH), and Maestro gets a PowerShell install directive plus a Java preflight. Follow the Windows + Android quickstart.

Host: Linux

Target appStatus
Web app✅ x11grab + xdotool + Playwright. Wayland-only sessions (no XWayland) get a structured remediation directive instead of cryptic X11 tool errors.
Flutter Linux desktop🟡
Flutter / native Android (emulator + physical)🟡 — same toolchain notes as the Windows host.
iOS / macOS / Windows targets⬜ degrade with a clear directive.

Driving both mobile platforms

On a macOS host you can verify the iOS and Android apps in one loop: set e2e.platforms: ["ios", "android"] in .codeloop/config.json and every full verify drives both sequentially with per-platform screenshots, video, and a per-platform confidence breakdown in gate_check. See the e2e configuration reference.

What “supported” means here

  • Build/Testcodeloop_verify runs the project’s build, tests, and static analysis with the platform-correct toolchain (e.g. Flutter iOS builds go through flutter build ios, never raw xcodebuild).
  • Launch — the verify auto-journey boots the device/browser and launches the real app, with stall-aware deadlines that tolerate cold builds.
  • Interactions — real driven input (taps, typing, swipes, form fills), device-pinned so multi-device setups never cross-fire.
  • Screenshots / Video — per-screen captures and a recording of the actual drive, used as gate evidence.
  • App logs — runtime logs captured during the drive and correlated with the visual evidence.

Cells marked ⬜ never fail silently: the tool response names the boundary and the closest supported alternative. If you hit a cell that behaves worse than this page claims, that is a bug — please report it.

Next steps