Open source and self-hosted. Write Playwright specs or Cucumber feature files, run them from the CLI or UI, and view reports, all in one place. Connect an AI agent and it will tell you why a test failed — and fix it.
Manual suites and runs, Playwright or Cucumber automation, reports, session replay and distributed runners. Scroll the strip, click any shot to step through them full size.














One global npm package. No database to provision, no config file to write. Plum brings its own.
npm install -g plum-e2e
mkdir plum && cd plum
plum server start
A living home for every manual test: suites, cases, structured steps, and collaborative test runs.
Tests run in real browsers, with session replay, an element inspector and distributed runners.
Connect Claude or OpenAI and let the agent diagnose a failing report, then fix it.
Each project runs on one framework, chosen when you create it. Pick Playwright and you write tests in its own API. Pick Cucumber and every scenario is Gherkin that product, QA and engineering all read the same. Either way Plum runs them the same and gives you the same reports and replays.
test("user can log in with valid credentials", async ({ page }) => { await page.goto("/"); await page.getByPlaceholder("Username").fill("standard_user"); await page.getByPlaceholder("Password").fill("secret_sauce"); await page.getByRole("button", { name: "Login" }).click(); await expect(page).toHaveURL(/inventory/); });
Feature: Demo Sauce Login Scenario: User can log in with valid credentials Given I am in Demo Sauce Login page When I enter "standard_user" in username field And I enter "secret_sauce" in password field And I click on the login button Then I should be navigated to the products page
Plum ships an MCP server. Point Claude, Cursor or any MCP client at it with a per-project key and it authors test cases, triggers runs, and reads back reports and logs. It acts as you, scoped to one project, every action tagged (MCP).
{
"mcpServers": {
"plum-checkout": {
"type": "http",
"url": "https://plum.example.com/mcp",
"headers": {
"Authorization": "ApiKey plum_live_…"
}
}
}
}
Self-hosted and open source: no telemetry, your data on your server. Up and running in the time it takes to read this.
Get started →