TesterArmy/e2e
docs
DiscordJoin communityGitHubGitHub

Open Source AI
testing framework

Customizable TypeScript testing framework for web, mobile apps and more.

GitHubGITHUB
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');
});

[01] Why e2e

Most AI tests start from scratch.
Every single time.

e2e remembers your agent's actions
and replays them when possible,

without calling the model again.

Less repeated reasoning.
Fewer tokens. Lower costs.

[02] Configure e2e

Your testing stack. Your call.

Pick every layer. The config writes itself.

[02] Configure e2e

Your testing stack. Your call.

Pick every layer. The config writes itself.

e2e.config.ts
import type { E2EConfig } from 'e2e';
import { web } from '@e2e-dev/web';
import { gateway } from 'ai';

export default {
targets: [{ engine: web(), app: { url: '' } }],
agents: {
default: {
model: gateway(''),
system: '',
},
},
} satisfies E2EConfig;

01/05

Connect on your terms.

Use your preferred gateway and keep control of how your AI connects.

e2e.config.ts
import { gateway } from 'ai';

model: gateway('openai/gpt-6-luna-fast'),

02/05

Your favorite AI? Bring it along.

Choose the model that works for you. Your testing framework shouldn't decide for you.

e2e.config.ts
import { gateway } from 'ai';

agents: {
default: {
model: gateway(''),
},
},

03/05

Your agent. Your rules.

Give your agent a purpose. Define how it should approach testing, what to look for, and what matters to you.

e2e.config.ts
agents: {
default: {
system: '',
},
},

04/05

Your app. Your environment.

Test on the web, go mobile, or bring your own engine. One framework, built to adapt.

e2e.config.ts
import { web } from '@e2e-dev/web';

export default {
targets: [{ engine: web(), app: { url: '' } }],
agents: {
default: {
model: gateway('openai/gpt-6-luna-fast'),
},
},
} satisfies E2EConfig;

05/05

Your stack. Ready to test.

Your model, your agent, your engine. All connected through one testing framework.

e2e.config.ts
import type { E2EConfig } from 'e2e';
import { web } from '@e2e-dev/web';
import { gateway } from 'ai';

export default {
targets: [{ engine: web(), app: { url: 'http://localhost:3000' } }],
agents: {
default: {
model: gateway('openai/gpt-6-luna-fast'),
system: 'You are a QA testing agent.',
},
},
} satisfies E2EConfig;

[03] Core features

AI where it helps. Code where it counts.

Don't make AI think twice.

Replay compatible cached actions without unnecessary model calls.

Goals, not scripts.

Describe your testing goals in plain language. Let your agent handle the actions.

Exact when it matters.

Combine AI-driven actions with precise locators and deterministic assertions.

Your AI. Your choice.

Choose your preferred AI model and customize your testing agent.

One API. Multiple environments.

Test web and mobile applications through one shared API.

Bring your own engine.

Extend the framework with your own execution backend.

[04] Testimonials

Loved by developers.

  • The future is verification-engineering. Proofs, (e2e) tests, benchmarks, linters… Some tests will be deterministic, some agentic. This looks great.

    Guillermo Rauch

    @rauchg

    X(opens on X in a new tab)
  • The agentic mobile testing game just changed.

    Expo

    @expo

    X(opens on X in a new tab)
  • We’ve all been building our version of this, but this is better. Well done!

    Jean-Michel Lemieux

    @jmwind

    X(opens on X in a new tab)
  • e2e looks great!

    David Cramer

    @zeeg

    X(opens on X in a new tab)
  • congrats on the launch! looks amazing

    Enzo Manuel Mangano

    @reactiive_

    X(opens on X in a new tab)
  • the future of end-to-end testing is partially agentic, partially deterministic. glad that libraries like e2e build in this area, supporting both mobile and web development from day one. it was also a pleasure to collaborate with Oskar on making @agent_device, which is a driver behind mobile support, more reliable in deterministic flows. let's go! write some tests!

    Michał Pierzchała

    @thymikee

    X(opens on X in a new tab)
  • this is fire 🔥 congrats man

    vansh patel

    @vanshdevx

    X(opens on X in a new tab)
  • Test your apps with X Premium or SuperGrok @o_kwasniewski really cooked with this, you write tests in natural language, the agent uses tokens only once, it remembers what it did for all future runs

    Miłosz Jankiewicz

    @Jaaneek

    X(opens on X in a new tab)
  • the mix of deterministic and agentic APIs sounds like a powerful approach

    Brjan | AI Builder

    @MrBrjan

    X(opens on X in a new tab)
  • Esto tiene una pintaza espectacular! He hecho 2-3 pruebas rapidas y wow... 👇🏼

    Translated from SpanishThis looks spectacular! I did 2-3 quick tests and wow...

    Carlos Beneyto

    @CarlosBeneyto

    X(opens on X in a new tab)
  • oh shit I was building this but this is better than the thing I was building

    Christian Genco

    @cgenco

    X(opens on X in a new tab)
  • yeah this is it. once agents write the code, the scarce skill is deciding what to prove vs what to agent-test. mixing both in one harness feels right

    Vamshi

    @idohodl

    X(opens on X in a new tab)
  • verification loops are the future. This massively enables that.

    Tanay Kumar

    @TanayKmr

    X(opens on X in a new tab)
  • it's fantastic. Just use it. trust me

    Caleb Panza ☾

    @CalebPanza

    X(opens on X in a new tab)
  • Can't wait to review this migration 🔥

    Piotr Trocki

    @trozee_dev

    X(opens on X in a new tab)
  • وجود حل يدمج بين العهد القديم والجديد في أختبار البرمجيات بشكل سلس كان تحدي خلال الشهور الماضية ولكن الوضع اختلف مع e2e شي رهيب ان يقوم بعمل كاش للخطوات لتقليل التكلفه عند اعاده الاختبار مالم تتغير خطوات الاختبار حل واعد جداً 💪

    Translated from ArabicSeamlessly combining the old and new approaches to software testing has been a challenge in recent months. That changed with e2e: it's great that it caches steps to cut the cost of re-running tests as long as the steps don't change. A very promising solution.

    Salah Alkhwlani

    @SalahAlkhwlani

    X(opens on X in a new tab)
  • this looks interesting for reducing token usage when testing web and mobile apps. it mixes deterministic and non deterministic testing, along with caching actions so you don’t have to call the model multiple times

    Elliott Callender

    @the__elliott

    X(opens on X in a new tab)
  • Needed this. Pure agentic e2e flakes hard in CI. Mixing deterministic assertions with agent steps, plus BYO model and infra, is the only setup that stays useful once agents actually drive real UIs.

    Edwin | AI Systems

    @EdwinAI_Systems

    X(opens on X in a new tab)
  • npx e2e just saved me 0.60$ on this coffee order, thanks @TesterArmy 🙏 Works out of the box with @expo EAS Simulator 😎

    szymon

    @szdziedzic

    X(opens on X in a new tab)
  • A probarlo! Me encanta este concepto mix de instrucciones deterministas y agenticas. Lo mejor de todo es que tiene cache de los steps hechos por agentes.

    Translated from SpanishTime to try it! I love this mix of deterministic and agentic instructions. Best of all, it caches the steps the agents take.

    Javo 🧉

    @javicerodriguez

    X(opens on X in a new tab)
  • congrats @TesterArmy team! you have really done some exceptional work with e2e, and i'm glad we got to be part of the launch 👏

    Danny Prevoznik

    @DanielPrevoznik

    X(opens on X in a new tab)
  • you have no idea how long I've been begging for this

    Kevin Rajan

    @_kvnloo

    X(opens on X in a new tab)
  • use e2e alongside @poteto's verification skill and you have a reliable workflow for mobile development.

    Saeed

    @stringsaeed

    X(opens on X in a new tab)
  • Love it!!! Testing it right now!

    Danny Suárez 🍄‍🟫 d/acc

    @dannysuarez

    X(opens on X in a new tab)
  • Ya lo estoy probando pero toca tener cuidado con el consumo de tokens ando construyendo algo hibrido usando e2e y playwright

    Translated from SpanishAlready trying it, but you have to watch token usage. I'm building something hybrid with e2e and Playwright.

    Danny Suárez 🍄‍🟫 d/acc

    @dannysuarez

    X(opens on X in a new tab)
  • Suena interesante, tengo que echarle un ojo. Yo de momento resuelvo con Playwright generado por AI, a lo mejor es hora de cambiar...

    Translated from SpanishSounds interesting, I need to take a look. For now I get by with AI-generated Playwright, maybe it's time to switch...

    Carlos Castellanos

    @karloscodes

    X(opens on X in a new tab)
  • This is very interesting. Most e2e tests either break on every UI tweak or hand the whole run to an agent that burns tokens redoing the same clicks. e2e (TesterArmy) mixes both: stable locators where you know them, agent steps where you don’t - and caches the agent passes so the next run replays without calling the model again. Web, iOS, Android. BYO model. Basically: Let AI figure it out once, and then replay without cost.

    Hrobjartz

    @hrobjartz

    X(opens on X in a new tab)
  • Love this. I’ve been doing the same thing in a vacuum.

    dgaspard

    @dgaspard

    X(opens on X in a new tab)
  • just started using it and i'm already in love w this. Demo coming soon🙂‍↕️

    Rami Maalouf

    @rami__maalouf

    X(opens on X in a new tab)
  • This is very cool! I was thinking about building something similar for @DispatchinoAI

    Amr

    @Amr0Khalid

    X(opens on X in a new tab)
  • I like the action replay. An unchanged login screen shouldn’t need a fresh opinion every time CI runs.

    Ryan Gilpatric

    @RyanGilpatric

    X(opens on X in a new tab)
  • This looks like magic 🪄 can’t wait to give it a go

    Antonie Huang

    @antoniehuang

    X(opens on X in a new tab)
  • @TesterArmy E2E is amazing 🙌. It found a form submission case I haven't covered. Basically a http 500 left the user with no error message during failure. Was easy to miss on my happy path tests.

    Nandy

    @parzival1l

    X(opens on X in a new tab)
  • wait the mix of deterministic + agentic apis is the bit tho. pure agent e2e always felt flaky in ci

    anytan

    @anytanreal

    X(opens on X in a new tab)
  • playing around with e2e two days in the row. it's amazing, the hybrid approach super useful! kudos to @TesterArmy team

    dimasike

    @dimasike_

    X(opens on X in a new tab)

[05] FAQ

Questions, answered.

The short version. When in doubt, the docs win.

Read the docs

Any AI SDK model works. Sign in with the ChatGPT, GitHub Copilot, or SuperGrok subscription you already pay for, bring a Vercel AI Gateway or OpenRouter key, or point the runner at a local server. The config selects the model; e2e adds no markup.

Secrets stay in environment variables: the config references named credentials and the runner fills them at run time, so values never live in your test code or transcripts.

Yes. @e2e-dev/mobile drives iOS simulators and Android emulators through agent-device, with the same tests, fixtures, and assertions you write for the web.

Yes. CI mode switches on automatically: one retry, a read-only trace cache, and agent steps replay verified actions without model calls when nothing changed. Pass your model key as a secret and run it like any other test job.

Yes: the docs include migration guides for Playwright, Cypress, Selenium, Detox, and Maestro. Locators and assertions map closely, and agent steps replace the most brittle parts first.

You get a report with the exact failing step, a screenshot, a trace, and logs under .e2e. Re-run with --headed or --debug to watch it live; every error code maps to a fix in the docs.

Framework

Getting startedExamples

Resources

DocumentationChangelog

Social

GitHubDiscordLinkedInX

Less setup. More testing.

© 2026 TesterArmy, Inc.

Back to the top
GitHubGitHub4.7k