E2e README

The full upstream README, mirrored for reference. Install config, tool schemas, adoption signals and our own overview live on the E2e listing page.

e2e, the agentic testing framework

npm version License: Apache-2.0 Join the community on Discord

tester-army/e2e | Trendshift

e2e

e2e is an end-to-end testing framework for web and mobile apps. Describe a goal in natural language and an agent drives the app to reach it. Check the result with locators and assertions in the same test.

server.ts
// tests/checkout.e2e.ts
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');
});

An agent step that a later assertion verifies records its actions, and the next run replays them with no model calls until the app changes. Tests without agent steps need no model. Bring your own subscription, API key, or local model.

Quick start

Terminal
npx e2e init

init asks for an engine, web or mobile, and a model provider, then writes a config and an example test. The quickstart covers the rest.

To see a finished setup in your stack, open examples/: Vite, Next.js, Astro, Angular, Expo, SwiftUI, Jetpack Compose, Kotlin Multiplatform, Flutter, and .NET MAUI, each a standalone project with a passing suite.

Packages

Core

PackageWhat it does
e2eThe SDK, runner, and CLI.
@e2e-dev/webBrowser engine: Chromium, Firefox, and WebKit through Playwright.
@e2e-dev/mobileiOS and Android engine: simulators and emulators through agent-device.
@e2e-dev/decisionDecision-model executors for bounded semantic actions and assertions, and decisionFilter(), which leaves out the tests a pull request is unlikely to affect.
@e2e-dev/acpRuns agent steps on your own coding agent (Claude Code or Codex) over the Agent Client Protocol.

Integrations

PackageWhat it does
@e2e-dev/kernelKernel hosted browsers for the web engine.
@e2e-dev/lightpandaLightpanda, the open-source headless browser, started per run for the web engine.
@e2e-dev/smolsmol machines browsers for the web engine: by default, each attempt branches a warm Chromium microVM.
@e2e-dev/testmuTestMu AI (formerly LambdaTest) hosted Android emulators, iOS simulators, and real devices for the mobile engine, and hosted Chrome and Edge for the web engine.
@e2e-dev/browserstackBrowserStack App Automate real Android and iOS devices for the mobile engine.
@e2e-dev/limrunLimrun hosted iOS simulators and Android emulators for mobile tests.
@e2e-dev/easExpo Simulators hosted iOS simulators and Android emulators for the mobile engine.
@e2e-dev/githubReporter that posts results as a pull request comment.

Documentation

e2e.com/docs. The e2e package ships every page, so coding agents can read them offline in node_modules/e2e/docs.

Join us

Join us in changing how software gets tested. We are hiring.

Questions? Ask on Discord. Issues are for bugs and feature requests.

Want to hack on e2e? See Contributing. We prefer an issue or a Discord discussion before a pull request.

Security

Please don't open public issues for security vulnerabilities. Follow SECURITY.md and report them to security@e2e.com.

Telemetry

The CLI sends anonymous usage data, such as which commands and engines run and where runs fail, but no test content, app content, or credentials. Opt out with npx e2e telemetry disable or E2E_TELEMETRY_DISABLED=1. Telemetry lists every field.

Status

[!NOTE] e2e is in active development on the way to 1.0. APIs and config can still change between minor releases.