The open-source Playwright test intelligence platform. Store every test run historically, track pass rates, surface flaky tests, and connect to your CI pipeline β self-hosted or on our cloud.
Your CI runner
ββ npx playwright test
ββ @actboard/playwright-reporter ββPOST /api/runsβββΆ ActBoard Server
β
SQLite / PostgreSQL
β
Dashboard UI βββ You
- Install
@actboard/playwright-reporterand add it toplaywright.config.ts - Run your tests β results stream to your ActBoard server automatically
- Open the dashboard to see historical trends, failures, flaky tests, and analytics
- Sign up at actboard.io
- Get your API key from Settings β API Keys
- Skip to Step 3 below
# Start the server (SQLite, no other dependencies)
npx actboard-server
# In a new terminal β seed 30 days of demo data:
npx actboard-server seed
# Dashboard is live at http://localhost:3141# Single container, data persisted in a named volume
docker run -p 3141:3141 -v actboard_data:/app/data actboard/server:latest
# Seed demo data:
docker exec actboard node scripts/seed.jscurl -O https://raw.githubusercontent.com/actboard/actboard/main/docker-compose.yml
docker compose up -d
# Seed demo data:
docker compose exec actboard node scripts/seed.jsnpm install --save-dev @actboard/playwright-reporter// playwright.config.ts
import { defineConfig } from '@playwright/test';
export default defineConfig({
reporter: [
['list'],
['@actboard/playwright-reporter', {
serverUrl: 'http://localhost:3141', // or https://actboard.io
apiKey: process.env.ACTBOARD_API_KEY,
project: 'e2e-production', // your project slug
branch: process.env.GITHUB_REF_NAME || 'local',
commitSha: process.env.GITHUB_SHA,
triggeredBy: process.env.CI ? 'ci' : 'local',
}],
],
});ACTBOARD_API_KEY=act_yourkey npx playwright test
# Results appear in the dashboard immediately βactboard/
βββ server/ β actboard-server (npm + Docker)
β βββ index.js β Fastify/Express server entry point
β βββ cli.js β npx actboard-server CLI
β βββ db.js β SQLite schema + query helpers
β βββ routes/
β β βββ runs.js β POST/GET /api/runs
β β βββ projects.js β CRUD /api/projects
β β βββ analytics.js β /api/analytics/summary|trend|flaky|browsers
β βββ middleware/
β β βββ auth.js β API key authentication (SHA-256 hashed)
β βββ scripts/
β β βββ seed.js β Demo data generator (30 days, 5 suites)
β βββ public/
β βββ index.html β Dashboard SPA (all 6 views, Chart.js)
β
βββ reporter/ β @actboard/playwright-reporter (npm)
β βββ src/index.ts β TypeScript reporter source
β βββ dist/ β Compiled output (run `npm run build` after cloning)
β
βββ examples/ β Example Playwright project with reporter wired up
β
βββ Dockerfile β Multi-stage build (node:20-alpine, ~120MB image)
βββ docker-compose.yml β Single-command self-host
βββ .env.example β Environment variable reference
| View | What you get |
|---|---|
| Dashboard | Pass rate metric, total runs, avg duration, flaky count. 14-day area chart + pass/fail donut. Recent runs table. |
| Test Runs | Full run history. Search by branch/commit. Filter by status, branch, browser. Paginated. |
| Run Detail | Suite accordions with collapsible test rows. Stack traces rendered like Playwright's own output. Retry counts. |
| Analytics | 30-day pass rate trend. Avg run duration chart. Flaky test detector (top 10 by flake rate). Browser breakdown donut. |
| Integrations | GitHub, GitLab, Jira, Slack, Jenkins, Linear, CircleCI, Azure DevOps cards with connect/disconnect state and reporter config snippets. |
| Settings | Project config with Save. API key management (create/revoke). Notification toggles. Danger zone (clear history). |
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/api/health |
None | Health check + version |
GET |
/api/projects |
None | List all projects |
POST |
/api/projects |
None | Create project (returns API key) |
GET |
/api/projects/:id |
None | Get project by ID or slug |
PATCH |
/api/projects/:id |
None | Update project name/URL |
GET |
/api/projects/:id/keys |
None | List API keys (prefixes only) |
POST |
/api/projects/:id/keys |
None | Create new API key |
POST |
/api/runs |
API Key | Publish a test run (reporter endpoint) |
GET |
/api/runs |
None | List runs (filter by project, status, branch, browser) |
GET |
/api/runs/:id |
None | Get run detail with suites + tests |
DELETE |
/api/runs/:id |
None | Delete a run |
GET |
/api/analytics/summary |
None | KPIs for a project |
GET |
/api/analytics/trend |
None | Daily pass rate over N days |
GET |
/api/analytics/flaky |
None | Top flaky tests |
GET |
/api/analytics/browsers |
None | Browser breakdown |
npx actboard-server # Start server on port 3141
npx actboard-server --port 8080 # Custom port
npx actboard-server --data /var/actboard # Custom data directory
npx actboard-server seed # Seed demo data
npx actboard-server seed --clear # Wipe existing data then seed
npx actboard-server --version # Print version
npx actboard-server --help # Full usage| Variable | Default | Description |
|---|---|---|
PORT |
3141 |
Server port |
HOST |
0.0.0.0 |
Bind address |
DATA_DIR |
./data |
SQLite database directory |
CORS_ORIGIN |
* |
Allowed CORS origin (restrict in production) |
NODE_ENV |
development |
Set to production in deployments |
Reporter env variables (set in CI):
| Variable | Description |
|---|---|
ACTBOARD_API_KEY |
Project API key |
ACTBOARD_SERVER_URL |
ActBoard server URL |
ACTBOARD_PROJECT |
Project slug (if not set in config) |
See reporter/README.md for full examples:
- GitHub Actions β copy/paste workflow YAML
- GitLab CI β
.gitlab-ci.ymlsnippet - CircleCI β
config.ymlsnippet - Jenkins β Jenkinsfile snippet
- Azure DevOps β
azure-pipelines.ymlsnippet
| Platform | Method |
|---|---|
| Railway | Deploy from Docker Hub image: actboard/server:latest |
| Fly.io | fly launch --image actboard/server:latest |
| Render | New Web Service β Docker β image: actboard/server:latest |
| AWS ECS | Use our Terraform module (Phase 2) |
| Azure Container Apps | Deploy from actboard/server:latest |
| GCP Cloud Run | gcloud run deploy --image actboard/server:latest |
| Kubernetes | Helm chart coming in Phase 3 |
# Clone the repo
git clone https://github.com/actboard/actboard.git
cd actboard
# Start server in dev mode (auto-restarts on file changes)
cd server && npm install && npm run seed && npm run dev
# Build the reporter from source (dist/ is not committed)
cd reporter && npm install && npm run build
# Try the example project
cd examples && npm install && npx playwright install chromium
ACTBOARD_API_KEY=act_e2e-production_demo_key_for_testing_only_1234 npx playwright testPRs welcome. Please open an issue before large changes.
MIT Β© ActBoard