Mobile tests that feel
like web tests.

Tapsmith is a test framework for native iOS and Android. We took the parts of Playwright that engineers actually love — the locators, the auto‑waiting, the trace viewer — and rebuilt them for real devices.

checkout.test.ts passed · 1.4s
import { test, expect } from "tapsmith"

test("user can complete checkout", async ({ device }) => {
  await device.getByRole("button", { name: "Add to cart" }).tap()
  await device.getByText("Checkout").tap()

  // mock the payment API
  await device.route("**/api/payment", async (route) => {
    await route.fulfill({ json: { status: "success" } })
  })

  await expect(device.getByText("Order Confirmed")).toBeVisible()
})
Tapsmith driving an iOS app
iPhone 17 Pro · iOS 26.5

Open source under the Apache 2.0 licence. Native agents on XCUITest and UIAutomator2 — no browser shims or half-working bridges.

Apache 2.0 licence
2 platforms
TS TypeScript-first
1 test suite, both OS

Three things mobile testing should feel like — and finally does.

Read the guide →
01

Write tests in a language your team already speaks.

If you know Playwright, you already know Tapsmith. Same locators, same expect, same auto‑waiting. The only difference is what they drive.

02

Run them on real iOS and Android — from one suite.

Tapsmith ships native agents on top of XCUITest and UIAutomator2. No browser shims. No half‑working bridges. The same test file targets both.

03

Catch the failure, not just the symptom.

Every run records a trace: every tap, every network call, every screenshot. When a test fails at 3am, you scrub through it like a video — not dig through logs.

How it stacks up

We've all tried the others.

This is a snapshot, not a sales pitch. Every tool in this list does something well; we just think the table tilts our way for most teams shipping consumer mobile apps in 2026.

Feature
Tapsmith● us
Appium
Maestro
Detox
Playwright-style API
iOS + Android single suite
Auto-waiting on every action
Network interception (built-in)
Trace viewer
Parallel sharding & blob reports
TypeScript-first
Interactive UI mode
Built-in MCP server

✓ supported    ◐ partial / via plugin    — not available

An API you can guess your way through.

// Same readable API across platforms
await device.getByRole("button", { name: "Sign in" }).tap()
await device.getByLabel("Email").type("[email protected]")
await device.getByText("Forgot password?").tap()

Developer tools

A visual runner and a built‑in MCP server.

UI mode

A browser-based interactive runner. Click any test to run it, see results stream in live, browse traces and screenshots inline, and mirror the device screen — all without leaving the browser.

npx tapsmith test --ui

MCP server

16 tools for AI coding agents — snapshot the screen, tap elements, run tests, read traces. Works with Claude Code, Cursor, Codex, and any MCP client over stdio or HTTP.

claude mcp add tapsmith -- npx tapsmith mcp-server

Spend the rest of the afternoon on something more interesting.

Install Tapsmith, point it at your app, and your first test runs in under a minute.