A live dashboard in Paseo for a worktree's Playwright test run.
npmjs · Paseo 0.9+
paseo plugin add npm:@stevecastaneda/paseo-playwright-pulse@1.1.1GitHub · Paseo 0.8 fallback
paseo plugin add stevecastaneda/paseo-plugins --ref 764f41794109da5fba12dc33a7533bf80febb8f7 --path playwright-pulseGit security status and fallback installation are pinned to commit 764f41794109.
From the plugin's README
Install the plugin:
paseo plugin add npm:@stevecastaneda/paseo-playwright-pulse
The plugin writes its reporter to ~/.local/share/playwright-pulse/reporter.mjs when it starts, keeps it up to date, and removes it when it stops (including when you remove the plugin). It never replaces or removes a file it didn't write.
Add the reporter to your playwright.config.ts, only when that file is the plugin's own and never in CI:
import { readFileSync } from "node:fs";
import { homedir } from "node:os";
import { join } from "node:path";
import { defineConfig, type ReporterDescription } from "@playwright/test";
const pulseReporter = join(homedir(), ".local/share/playwright-pulse/reporter.mjs");
const pulse: ReporterDescription[] = !process.env.CI && isPulseReporter(pulseReporter) ? [[pulseReporter]] : [];
// Any other file at that path could keep Playwright from starting, so check the plugin's first line.
function isPulseReporter(path: string): boolean {
try {
return readFileSync(path, "utf8").startsWith("// Written by the playwright-pulse Paseo plugin.");
} catch {
return false;
}
}
export default defineConfig({
reporter: [["list"], ...pulse],
});
While Paseo or the plugin isn't running, runs print the list reporter as usual.
Run tests without a --reporter flag. That flag replaces every reporter in the config, Pulse included. To add one for a single run, u…
README
A live dashboard in Paseo for the Playwright test run in a worktree. You see the run as it happens: the test running now and its current step, how far through the run it is, and each failure with its error, screenshot, video and trace.
Tests 12/40, or 1 failed · 12/40 with a red spinner once a test fails). It stays for two minutes after the run ends with the result. Press it to open the panel.Click getByTestId('save'), inside its test.step or hook), the last few steps, and how much of its timeout it has used. The heading counts the busy workers, like 3 of 4 busy, and gives each worker a dot that fills while it runs a test.Open it from Explorer, or with Open Playwright Pulse in the Command Center.
Install the plugin:
paseo plugin add npm:@stevecastaneda/paseo-playwright-pulse
The plugin writes its reporter to ~/.local/share/playwright-pulse/reporter.mjs when it starts, keeps it up to date, and removes it when it stops (including when you remove the plugin). It never replaces or removes a file it didn't write.
Add the reporter to your playwright.config.ts, only when that file is the plugin's own and never in CI:
import { readFileSync } from "node:fs";
import { homedir } from "node:os";
import { join } from "node:path";
import { defineConfig, type ReporterDescription } from "@playwright/test";
const pulseReporter = join(homedir(), ".local/share/playwright-pulse/reporter.mjs");
const pulse: ReporterDescription[] = !process.env.CI && isPulseReporter(pulseReporter) ? [[pulseReporter]] : [];
// Any other file at that path could keep Playwright from starting, so check the plugin's first line.
function isPulseReporter(path: string): boolean {
try {
return readFileSync(path, "utf8").startsWith("// Written by the playwright-pulse Paseo plugin.");
} catch {
return false;
}
}
export default defineConfig({
reporter: [["list"], ...pulse],
});
While Paseo or the plugin isn't running, runs print the list reporter as usual.
Run tests without a --reporter flag. That flag replaces every reporter in the config, Pulse included. To add one for a single run, use --add-reporter instead.
The reporter writes a snapshot of the run to ~/.local/state/playwright-pulse/<worktree>-<hash>/runs/<run-id>.json, outside the repo, so git never sees it, and points latest.json beside it at the newest run. The worktree is the nearest folder with .git above where Playwright runs. Each new run clears out the files of earlier ones, so a run that starts while another is still going takes over the panel. When the plugin starts it deletes the runs of worktrees that no longer exist.
The reporter is plain JavaScript with no dependencies. It never fails a run: a write that fails is skipped. It writes at most four times a second, and right away when a test or the run ends. A run whose process dies without ending shows as interrupted.
Screenshots preview inside Paseo. Videos open in their default app, and traces in the worktree's own node_modules/.bin/playwright show-trace. Only files that the latest run lists, and that sit inside the worktree, can be opened.
Set PLAYWRIGHT_PULSE=0 to turn the reporter off for one run.
Paseo 0.11 or later and Node.js 22.18 or later on the daemon host. Built and tested with Playwright 1.63.
playwright.config.ts.3 of 4 busy. Each worker gets a dot that fills while it runs a test, so you can watch workers go idle as a run winds down. Past 12 workers, or 8 in a narrow panel, the heading drops the dots and keeps the words.using 4 workers line Playwright prints. Pulse used to show the most workers your config allows, so a small run could show empty rows for workers Playwright never started.Search › e2e/catalog/search.spec.ts:29 again. The space after the last › had gone missing.chromium, shows as a grey tag after the command instead of on a line of its own. A run with several projects gets one tag each.Scanned 16 Oct 2026, 06:30 UTC from stevecastaneda/paseo-plugins/playwright-pulse.