This site is available as Markdown for AI agents. For the full index, see llms.txt.
AI-native · MCP-native · local-first

Your agent writes the E2E tests. You review and commit.

unotest is AI-native end-to-end testing. Your AI agent drives your real app over MCP and writes clean, reviewable tests in your repo — for web and for iOS.

Works with Claude Code · Cursor · Codex

Full control

AI does the work. You keep control.

The whole point: speed from the agent, ownership stays with you.

Plain .js in your repo

Tests are ordinary JavaScript in unotest/e2e/*.js. Git, code review, CI — no proprietary format, no binary blob.

No silent fixes

agent_fix composes context and a suggestion — it never calls an LLM itself and never applies a patch on its own. You read the diff and commit.

Runs locally

Everything runs on your machine. Your app never leaves it. No cloud, no account to start.

Safe to run blindly

Scenarios execute in a sandboxed AST interpreter — no require, no fetch, no filesystem. AI-generated tests can run without surprises.

What's new

unotest 0.42.0

Released 24 September 2026.

Test a browser extension

A new launch block in the config starts the browser with extra arguments and a profile of its own: load an unpacked extension, keep what it installed between runs. On a profile the scenarios share one browser context, and each run says so in its log. Bundled headless Chromium ignores extensions without a word, so that combination is refused instead of silently testing nothing. In CI, set the new chromium channel, whose headless mode loads them. Locally, run headed.

Your box moves to a new version when you say so

A box no longer installs a new release on its own. Box status shows the version the box runs, the one its channel offers and where the box is between the two. Pressing Update in the dashboard takes effect within minutes once your box checks for a new target every five minutes; a box still on the hourly check takes up to an hour and a half, and only until that check reaches it. The box then reports how the update ended: applied, rolled back, refused or failed, and why. An update that failed is not retried by the box itself. It runs again when you press Update again.

See how your box installed the suite

The environments list and a run's details now say how long the box took to install your suite, and whether the packages came from the registry or from the box's own cache. The box measures this itself: before an install it checks what the lockfile names against what its cache already holds, and prints the counts so the word can be checked. A box older than this release prints exactly what it printed before.

Pick your platform

Same idea, two surfaces — the web and iOS.