<aside> 🪖
Everything you need to show e2e in your videos and posts. What e2e does and its features, ideas for what to show on camera, logos, stills, colours, fonts, the words to use and the links to share. Download the two packs below and you are ready to record.
</aside>
<aside> 📦
Logo pack
Icon, helmet, lockup and wordmark in SVG and PNG, for dark and light backgrounds.
Logos: icon, helmet, lockup and wordmark, SVG and PNG
Logos: icon, helmet, lockup and wordmark, SVG and PNG
</aside>
<aside> 🎞️
Stills pack
Five ready-made frames at 2400 x 1260 to cut into your video.
Stills for your videos: five ready-made frames, 2400 x 1260
Stills for your videos: five ready-made frames, 2400 x 1260
</aside>
e2e is a free, open source testing framework for web, iOS and Android, made by TesterArmy (YC 26). A developer describes a goal in plain language, an agent drives the app to reach it, and locators and assertions check the result in the same test.
It runs on your own model subscription, API key or local model, and works with Claude Code, Codex and Cursor.
<aside> ⚡
Start in one command
npx e2e init
</aside>
One line to copy: e2e is a free, open source testing framework where an agent tests your web or mobile app from a goal you write in plain language.
| Licence | Apache-2.0, free forever |
|---|---|
| Platforms | Web, iOS and Android |
| Works with | Claude Code, Codex, Cursor |
| Get started | npx e2e init |
A test mixes plain-language goals that an agent completes with exact checks that need no model. This one upgrades a workspace and checks the result:
import { test, expect } from 'e2e';
test('a member upgrades to Pro', async ({ app, agent, screen }) => {
await app.open('/settings/billing');
await agent.act('upgrade the workspace to the Pro plan');
await agent.assert('the invoice preview shows a prorated amount');
await expect(screen.getByRole('status')).toContainText('Pro');
});
| Step | API | What it does | Model call |
|---|---|---|---|
| Goal | agent.act |
The agent drives the app until the goal is done | Yes, unless the cache replays it |
| Judgement | agent.assert, agent.waitFor, agent.extract |
The agent checks or reads what is on screen | Yes |
| Exact check | screen and expect |
Locators and assertions, like Playwright | No |
<aside> 💬
Goals in plain language
Write what a user wants to do instead of a script of selectors and waits. When the UI changes, the agent adapts, so you fix fewer tests.
</aside>
<aside> ⚡
Replay cache
Once a later check verifies a goal, e2e records the actions. The next run replays them with no model calls and hands back to the agent when the app has changed.
</aside>
<aside> 📱
Web, iOS and Android
The web engine drives Chromium, Firefox and WebKit through Playwright. The mobile engine drives iOS simulators, Android emulators and connected phones through agent-device. You can also write your own engine.
</aside>
<aside> 🔑
Bring your own model
Use a plan you already pay for (ChatGPT, GitHub Copilot, OpenCode, SuperGrok, or Claude API credits), any API key through the AI SDK, or a local model.
</aside>
<aside> 🤖
Built for coding agents
e2e init installs a skill for Claude Code, Codex and Cursor, and e2e mcp lets the agent use your app, try locators and read failure traces.
</aside>
<aside> 🧭
Explore and bug bash
e2e explore gives the agent a goal with no test file, and it reports what it finds with steps to reproduce. A bug bash runs many explorers at once and proves each bug with a failing test.
</aside>
<aside> 🖼️
Visual comparison
toHaveScreenshot compares the screen, or one element, with a stored screenshot, on web, iOS and Android in the same test.
</aside>
<aside> 🔌
API tests in the same run
Call your API with fetch and check the response against a Zod, Valibot or ArkType schema, next to the UI tests.
</aside>
<aside> 🔐
Sign in once, keep secrets secret
A setup test signs in and saves a session that other tests reuse. Passwords are handles: the runner types them and redacts them from model input and reports.
</aside>
<aside> 🚦
CI and pull requests
Runs on GitHub Actions, EAS Workflows, Bitrise, Codemagic or any CI with Node. The GitHub reporter posts the results as a pull request comment.
</aside>
<aside> ☁️
Hosted browsers and devices
Official integrations with Kernel, EAS Simulators, Limrun and smol machines, or plug in any provider of your own.
</aside>
<aside> 🔍
Readable reports
Every failed test gets a trace page with each step, the evidence and the screen at failure, for you or your coding agent.
</aside>
The docs have step-by-step migration guides from Playwright, Cypress, Selenium, Maestro and Detox: e2e.tester.army/docs.
Standalone apps with passing suites you can clone and run: Vite, Next.js, Astro, Expo, SwiftUI, Jetpack Compose, Kotlin Multiplatform and Flutter. They live in the examples folder of the repo.