# Integrations: Playwright, Cypress and libraries

> What we publish for your test framework, in what order, and what we will not publish. Four packages on npm, and an HTTP API that needs none of them.
> https://facteur.eu/en/integrations

## The channel is your test framework

On this market you do not integrate an API: you install a package into your framework. We publish four of them, and this page carries the address of each, what stays conditional, and what we will not publish.

## An HTTP API, and nothing to install

The four packages are optional, and that is the point: the waiting happens on the server and the extraction on reception, so a test calls the message search without installing anything. Here is a complete email verification journey, in Playwright, without a single package from us.

- **The request goes out before the click** : It waits, and answers the moment the message lands, not at the deadline. Issued after, it would be chasing a message already there.
- **Subaddressing separates the tests** : Everything after the “+” is yours. It is what lets two tests share an inbox without stealing each other’s messages.
- **status is read before any derived field** : A message is accepted before it is parsed: for a few milliseconds it has no subject, no code and no links. That is what separates “there is no code in this message” from “the code is not extracted yet”.
- **The key is read from the environment** : Never written into the test, never passed as an argument. That is the convention the plugins keep.

## A plugin before a library, and JavaScript before anything else

The order is not negotiable along the way, and it is not a matter of taste: it follows a measurement, retaken before every delivery.

- Deliverable
- State
- What unlocks it

#### A minimal Node library

Open an inbox, wait for a message, read it with what was extracted from it, purge. That is all, and it is deliberate: the product’s narrow scope holds for its public surface too. Zero dependencies: a test suite does not want a dependency tree.

#### A Playwright plugin

An address derived from the test itself, so two tests running in parallel never read the same mail, and a retried test does not re-read the mail of its first attempt. The assertions are retried by Playwright’s own engine, the wait stops inside the test’s budget, and the message is attached to the report: a failure shows the mail that arrived, not just a red line.

#### An npm create initialiser

From an empty repository to a first passing test in one command.

#### A Cypress plugin

A registered command returning a chainable, rather than a fixture. Eighty per cent of the work is shared with the one above.

#### A Python library

The only credible second ecosystem. We are not taking it on anticipation: the trigger is a number, not an impression.

#### The other ecosystems

Not on the programme, and we would rather write it down. Demand there is two to three orders of magnitude below npm, and the incumbent, who maintains ten, leaves its oldest package three major generations behind its main library. Nine libraries with no measured use are nine debts, not coverage.

## The largest channel on the market is unoccupied

Read off npm, on the date shown, and replayable by anybody.

- Framework
- Monthly installs
- Competitor plugin
