Open Source AI
testing framework
Customizable TypeScript testing framework for web, mobile apps and more.
[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.
01/05
Connect on your terms.
Use your preferred gateway and keep control of how your AI connects.
02/05
Your favorite AI? Bring it along.
Choose the model that works for you. Your testing framework shouldn't decide for you.
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.
04/05
Your app. Your environment.
Test on the web, go mobile, or bring your own engine. One framework, built to adapt.
05/05
Your stack. Ready to test.
Your model, your agent, your engine. All connected through one testing framework.
[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.
(opens on X in a new tab)Guillermo Rauch
@rauchg
The agentic mobile testing game just changed.
(opens on X in a new tab)Expo
@expo
We’ve all been building our version of this, but this is better. Well done!
(opens on X in a new tab)Jean-Michel Lemieux
@jmwind
e2e looks great!
(opens on X in a new tab)David Cramer
@zeeg
congrats on the launch! looks amazing
(opens on X in a new tab)Enzo Manuel Mangano
@reactiive_
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!
(opens on X in a new tab)Michał Pierzchała
@thymikee
this is fire 🔥 congrats man
(opens on X in a new tab)vansh patel
@vanshdevx
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
(opens on X in a new tab)Miłosz Jankiewicz
@Jaaneek
the mix of deterministic and agentic APIs sounds like a powerful approach
(opens on X in a new tab)Brjan | AI Builder
@MrBrjan
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.
