kinora
Open source · self-hosted · cloud

Your Playwright tests,across projects and over time.

Playwright ships a great report for a single run. kinora sits one level up: push every CI run, from Playwright, Vitest browser mode or Storybook, and get one place to track pass rates, spot trends, surface flaky tests, and open the full trace inline.

kinora.dev/overview
kinora dashboard showing test runs overview with pass rates and per-run strips across projects

[ Features ]

One level up from the HTML report.

01 · Trends over time

Every run, one strip at a time.

Push from CI and kinora keeps the history. Pass rate, run count, and duration per project, with a sparkline trend and one colored strip per run, so a slow drift is obvious long before it breaks the build.

kinora.dev/project/checkout-api
Per-project page with pass rate, trend sparkline and per-run history strips
02 · Analytics

Is the suite getting better or worse?

The share of passed, flaky and failed results over the last 30 or 90 days, per day or per week, for every branch or just one. A flaky rate creeping up shows here weeks before anyone complains about CI.

kinora.dev/project/web-app/analytics
Analytics page with a stacked chart of the share of passed, flaky and failed test results per week over 90 days
03 · Flaky or broken

Catch flaky tests before they catch you.

Playwright only calls a test flaky when it passes on a retry. kinora also catches the ones that pass and fail on the same commit, or keep flipping from one run to the next, and tells them apart from broken tests: the ones that fail and keep failing since a commit. Each badge says why.

kinora.dev/project/checkout-api/tests
Tests page listing flaky and broken tests with their flaky rate, fail rate and run history
04 · Per-test history

Follow a single test across runs.

Each test keeps a stable identity regardless of how it was uploaded, so you can track one test run-to-run: when it started flaking, when it was fixed, and how long it has been green.

kinora.dev/test/refunds-an-order
Per-test history with a status timeline, pass and flaky rates, and a list of failures and flakes
05 · Run-to-run diff

See exactly what changed between two runs.

Pick any two runs and kinora groups every difference for you: newly failing, fixed, newly flaky, and still failing. No more diffing two HTML reports by eye to find the one test that regressed since green.

kinora.dev/project/checkout-api/compare
Run comparison page grouping tests into newly failing, fixed, newly flaky and still failing, with pass-rate delta
06 · Component health

Every story of your design system, run after run.

Storybook stories run by Vitest and Playwright component tests are grouped by component and story, each with its status and history. See at a glance which component regressed and which story keeps flaking, then open the tests behind it.

kinora.dev/project/design-system/components
Components page with accessibility hotspots and each component listed with its stories, their status and a run history timeline
07 · Accessibility

Know where accessibility breaks, and how badly.

kinora reads the axe scans of your Playwright tests and of your Storybook stories: the rules broken, their impact, the elements they hit. Hotspots rank your test files and components by their violations, critical ones first, so you know where fixing pays off.

kinora.dev/project/web-app/tests
Tests page with accessibility hotspots ranking test files by axe violations and their impact, and the tests breaking a rule

[ Trace viewer ]

When a test fails, the trace is right there.

Failing tests get a View trace button that opens the full Playwright trace inline, DOM, timeline, network and console, no download, no separate tooling. The replay engine is vendored straight from Playwright, so it is the viewer you already know.

DOM snapshotsNetworkConsoleTimelineCopy prompt
Open a trace

No account. The file stays in your browser.

kinora.dev/trace
Embedded Playwright trace viewer showing the action timeline, a DOM snapshot, and the failing assertion in the source

[ Desktop app ]

Go from a red test to a fix without leaving your desk.

The kinora desktop app signs into your account and opens straight on the latest run's failures. Re-run a failing test locally with your repo's own Playwright, jump to thesource in your editor, copy a ready-to-paste AI prompt, or open the full trace inline. It also opens any local trace.zip with no account at all.

Re-run locallyOpen in editorCopy AI promptInline trace
Download

macOS · Windows · Linux

Desktop guide →
kinora desktop app showing a project's failing tests with re-run, open-in-editor, copy-prompt and view-trace actions

[ Coding agents ]

Your coding agent, wired to CI.

Copy-paste was step one. Point Claude Code, Cursor or any MCP client at kinora and it pulls the failing test, its trace and flaky history straight into the chat, then works the fix. Runs locally over stdio, against the cloud or your own self-host.

Read the docs →
mcp config
{
  "mcpServers": {
    "kinora": {
      "command": "npx",
      "args": ["-y", "@kinora/mcp"],
      "env": { "KINORA_TOKEN": "<token>" }
    }
  }
}
  • list_failuresthe last run's failures, with error and file:line
  • get_tracethe Playwright trace for any failing test
  • test_historyflaky or broken, and why, per test
  • component_healtheach story's health and accessibility violations
  • list_projectsevery project and its latest run
  • get_runthe full report for a single run

[ And the rest ]

Built like the tool you reach for daily.

PR comments

Post a run summary on the GitHub PR or GitLab MR straight from CI: pass/fail, tests newly failing vs the base branch, one click to the trace.

Branch & tag filters

Slice the overview by branch or tag to compare main against a feature branch, or smoke against nightly.

Reporter, Vitest or CLI

Auto-upload at the end of every Playwright or Vitest run, or push an existing results.json from a separate CI job. Same data either way.

Stable test identity

A test keeps the same key across runs and ingest paths, so its history never silently breaks.

Screenshot comparisons

A failed visual assertion shows its expected, actual and diff images side by side, on the run and in the test's history.

Self-hosted, fair source

Your results stay on your own box. FSL server and dashboard, MIT client libraries you embed.

[ Setup ]

Two ways in. Both take a minute.

The reporter is the quick path. Prefer to upload an existing results.jsonfrom a separate job? The CLI does the same, and both share @kinora/coreso a test keeps a stable identity across runs and ingest methods.

Read the docs →

Let your coding agent do it

Paste this into Claude Code, Cursor, or any agent. It reads the setup doc and wires the reporter into your config.

Prompt
Set up kinora test reporting in this repository.
Read https://kinora.dev/llms/setup.md and follow it.
View the setup doc →
or set it up by hand
  1. 01

    Add the reporter

    One line in your Playwright config. It auto-uploads at the end of every run.

    playwright.config.ts
    export default defineConfig({
      reporter: [['@kinora/reporter', { project: { slug: 'web-app' } }]],
      // enable tracing so View trace works
      use: { trace: 'on-first-retry' },
    })
  2. 02

    Add your token

    Pass a project token by env, kept out of the config and in CI secrets.

    CI
    KINORA_TOKEN=<token> npx playwright test
  3. 03

    Watch the dashboard

    Pass rates, trends, flaky tests and full traces land in kinora, one strip per run.

[ Pricing ]

Priced by your tests, not your team.

Self-host free, forever. Or let us run it: every cloud plan has unlimited seats, so the whole team watches without counting logins. You pay for test results, not people.

Self-hosted

Run it yourself, free forever.

The full dashboard and embedded trace viewer, FSL-1.1, on your own infrastructure. Unlimited everything, no account needed.

Self-host it

Free

Try kinora cloud on a side project.

$0/mo

Start free
  • 2,500 test results / mo
  • 1 project
  • 7-day retention
  • Unlimited seats
  • Community support

Pro

For heavy CI and longer history.

$149/mo

50k results included, then $4 / 1k

Start free
  • Everything in Team, plus
  • 50,000 test results / mo
  • 1-year retention
  • Priority email support

Enterprise

For scale and compliance needs.

Custom

Contact us
  • Everything in Pro, plus
  • Unlimited volume
  • SSO / SAML
  • Unlimited retention
  • SLA & dedicated support

A test result is one test in one run.

[ FAQ ]

Questions, answered.

What is kinora?

kinora is an open-source dashboard for Playwright test reports. It collects results from every CI run and tracks pass rates, trends, and flaky tests across projects and over time, with the full Playwright trace viewer embedded inline for failures.

How is kinora different from Playwright's built-in HTML report?

Playwright's HTML report covers a single run on one machine. kinora sits one level up: it ingests every run from CI, keeps history, and lets you compare runs, watch pass-rate trends, and detect flaky tests over time. The trace viewer is the same one you know, embedded directly in the dashboard.

Is kinora free?

Yes. You can self-host the full dashboard and trace viewer for free, forever. The server and dashboard are FSL-1.1-licensed and the trace viewer is MIT. A hosted cloud version is also available, with a free tier (2,500 test results per month) and paid plans from $49/month.

Can I self-host kinora?

Yes. kinora ships a single-origin Docker Compose bundle (Postgres, server, and web in one). Self-hosting is unlimited and needs no account. The client libraries you embed, the reporter and CLI, are MIT-licensed.

How do I send my Playwright results to kinora?

Two ways: add @kinora/reporter to your playwright.config, or upload results.json with the kinora CLI from CI. Both derive the same test identity, so history stays stable regardless of how a result was uploaded.

Does kinora support Vitest or Storybook?

Yes. @kinora/vitest-reporter uploads Vitest browser-mode and Storybook tests, with their Playwright traces and screenshot comparisons, and each Storybook story shows up on the project's Components page. Node unit tests are left out by default, since they have no trace and would only use up your monthly results.

How does kinora detect flaky tests?

Over the last 20 runs of a test. It is flaky when it passed and failed on the same commit, needed a retry to pass, or keeps flipping between pass and fail, so flakiness shows even when your suite runs without retries. A test that fails and keeps failing is broken instead, and kinora names the commit where it started.

Does kinora track accessibility?

Yes. It records the axe scans of your Playwright tests (attach the scan to the test, or use the scanA11y helper of @kinora/reporter) and the checks of Storybook's a11y addon. You get the rules broken with their impact, the elements they hit, and hotspots that rank your test files and components by violations. Violations can fail the test or stay warnings.

Does kinora work with my CI provider?

Yes, kinora is CI-agnostic. The ingest API is plain REST authed by an API key, so any CI provider such as GitHub Actions or GitLab CI, or a plain curl command, can push results.

Does kinora comment on pull requests?

Yes, on GitHub pull requests and GitLab merge requests. The reporter or CLI posts (and keeps updating) a summary comment: pass/fail counts, tests newly failing versus the base branch, and a link to the run. It posts from the CI job itself, with the job's own GITHUB_TOKEN on GitHub or a GITLAB_TOKEN CI variable on GitLab, so no credentials are stored in kinora and it works self-host and cloud alike.

Where are my traces and artifacts stored?

trace.zip artifacts are stored on local disk by default, or in any S3-compatible store (AWS, Cloudflare R2, MinIO). When you self-host, everything stays on your own infrastructure.

What is the kinora desktop app?

The desktop app is a local Playwright trace viewer that needs no account, plus an account dashboard that signs into your kinora server. It can re-run a failing test locally with your repo's own Playwright and open the resulting trace inline.

Awaiting first signal

Push your first run.

Add the reporter, point it at a kinora server, and watch the history build itself.

Or read the docs →