Open source · MIT · scoring model v4

playwright-score

A deterministic, AI-free quality score for Playwright specs. Lint anti-patterns, get a 0–100 grade, and gate CI—especially for AI-generated tests.

Built and maintained by QA Guardian. Open methodology, one standard profile — community best practices, not house rules.

Install & run

# Install
npm install -D @qaguardian/playwright-score

# Score a suite (scoped package binary)
npx -p @qaguardian/playwright-score playwright-score ./tests --profile standard --threshold 80

# JSON output for CI / tooling
npx playwright-score ./flow.spec.ts --threshold 80 --format json

Exit codes: 0 pass · 1 below threshold · 2 tool error. Formats: text, json, markdown, sarif.

Why teams use it

One number, frozen formula

The scoring model is versioned (v4) and documented: the weighted share of your tests that are clean. Same inputs always produce the same score—safe for PR gates and AI regen loops.

Built on community rules

Uses eslint-plugin-playwright for real best practices, then adds suite metrics: locator mix, empty expects, structure smells.

Made for AI-generated tests

We dogfood it on QA Guardian codegen. Score → findings → repair → rescore. Rules grade; models write.

What gets scored

Dimensions combine into a single 0–100 score with letter grades A–F. Details live in the open METHODOLOGY.md.

Playwright hygiene

No hard waits, force clicks, networkidle, missing awaits, element handles.

Assertions

Tests must assert; prefer web-first expect patterns.

Locators

Ratio of getByRole/Label/TestId/Text vs raw page.locator() (statistical).

Structure

Focused/skipped tests, oversized files, describe shape.

Tested against real code, not just our own fixtures

100 public Playwright suites, scored with the published package against each project's actual source — chosen to include both well-known, heavily-engineered platforms and smaller, less mature projects. Not curated to look good; 35 of 100 fail the default threshold (80), for real, verifiable reasons.

Tested on 2026-09-24 · v2.1.0 · model v4

100

suites scored

7,281

spec files

39,059

tests covered

65 / 100

passed threshold

GradeResult
pinterest/gestalt
playwright/accessibility
100/100APASS
TryGhost/Ghost
e2e/tests
99/100APASS
hashicorp/vault
ui/e2e
98/100APASS
microsoft/playwright
examples/todomvc
98/100APASS
plausible/analytics
e2e
98/100APASS
segmentio/analytics-next
packages/browser-integration-tests/src
98/100APASS
cloudflare/templates
playwright-tests
97/100APASS
glpi-project/glpi
tests/e2e/specs
97/100APASS
shopify/hydrogen
e2e/specs
97/100APASS
dubinc/dub
apps/web/playwright
96/100APASS
keycloak/keycloak
js/apps/admin-ui/test
96/100APASS
mozilla/fxa
packages/functional-tests/tests
96/100APASS
penpot/penpot
frontend/playwright
96/100APASS
temporalio/ui
tests
96/100APASS
xmlui-org/xmlui
xmlui
96/100APASS
SigNoz/signoz
tests/e2e
95/100APASS
argos-ci/argos
tests
95/100APASS
baloise/design-system
packages/core
95/100APASS
nextcloud/server
tests/playwright/e2e
95/100APASS
storybookjs/storybook
code/e2e-internal
95/100APASS
Automattic/jetpack
projects/plugins/jetpack/tests/e2e/specs
94/100APASS
LambdaTest/playwright-sample
playwright-test-ts/tests
94/100APASS
carbon-design-system/carbon
e2e
94/100APASS
freeCodeCamp/freeCodeCamp
e2e
94/100APASS
strapi/strapi
tests/e2e
94/100APASS
WordPress/gutenberg
test/e2e
93/100APASS
apache/apisix-dashboard
e2e/tests
93/100APASS
documenso/documenso
packages/app-tests
93/100APASS
godotlauncher/launcher
e2e
93/100APASS
google/site-kit-wp
tests/playwright/specs
93/100APASS
n8n-io/n8n
packages/testing/playwright
93/100APASS
radix-ui/primitives
e2e
93/100APASS
sanity-io/sanity
e2e
93/100APASS
supabase/supabase
e2e
92/100APASS
umami-software/umami
tests/e2e
92/100APASS
coder/coder
site/e2e
91/100APASS
primer/react
e2e
91/100APASS
vendure-ecommerce/vendure
packages/dashboard/e2e
91/100APASS
cupcakearmy/cryptgeon
test
89/100BPASS
element-hq/element-web
apps/web/playwright
89/100BPASS
woocommerce/woocommerce
plugins/woocommerce/tests/e2e
89/100BPASS
PostHog/posthog
playwright
88/100BPASS
go-gitea/gitea
tests/e2e
88/100BPASS
wireapp/wire-webapp
apps/webapp/test/e2e_tests
88/100BPASS
clerk/javascript
integration/tests
87/100BPASS
grafana/grafana
e2e-playwright
87/100BPASS
nuxt/nuxt
test/e2e
87/100BPASS
shopify/cli
packages/e2e/tests
87/100BPASS
checkly/checkly-cli
examples/advanced-project/src
86/100BPASS
mtlynch/whatgotdone
e2e
86/100BPASS
zotero/web-library
test/playwright
86/100BPASS
Studio-Saelix/sencho
e2e
85/100BPASS
formbricks/formbricks
apps/web/playwright
85/100BPASS
Automattic/wp-calypso
test/e2e
84/100BPASS
saleor/saleor-dashboard
e2e-legacy
84/100BPASS
twentyhq/twenty
packages/twenty-e2e-testing/tests
84/100BPASS
usebruno/bruno
tests
84/100BPASS
RocketChat/Rocket.Chat
apps/meteor/tests/e2e
83/100BPASS
handsontable/handsontable
tests/e2e
83/100BPASS
adobe/spectrum-web-components
gen2/packages/swc/components
82/100BPASS
hashicorp/consul
ui/packages/consul-ui/e2e-tests/tests
82/100BPASS
novuhq/novu
apps/dashboard/tests
82/100BPASS
appsmithorg/appsmith
app/client/playwright/tests
80/100BPASS
elastic/elastic-charts
e2e/tests
80/100BPASS
microsoft/fluentui
packages/web-components/src
80/100BPASS
KittyCAD/modeling-app
e2e/playwright
79/100CFAIL
mattermost/mattermost
e2e-tests/playwright
79/100CFAIL
payloadcms/payload
test/admin/e2e
79/100CFAIL
eclipse-theia/theia
examples/playwright/src/tests
78/100CFAIL
immich-app/immich
e2e/src/specs
78/100CFAIL
invoiceninja/invoiceninja
tests/e2e
78/100CFAIL
tanstack/table
examples
78/100CFAIL
apache/superset
superset-frontend/playwright/tests
77/100CFAIL
apache/zeppelin
zeppelin-web-angular/e2e
77/100CFAIL
guardian/dotcom-rendering
dotcom-rendering/playwright/tests
77/100CFAIL
pradosoft/prado
tests/playwright
77/100CFAIL
cloudflare/vinext
tests/e2e/pages-router
76/100CFAIL
mermaid-js/mermaid
e2e
76/100CFAIL
microsoft/vscode
test/componentFixtures/playwright
76/100CFAIL
withastro/astro
packages/astro/e2e
75/100CFAIL
bbc/simorgh
ws-nextjs-app/playwright
74/100CFAIL
BuilderIO/builder
packages/sdks-tests/src/e2e-tests
72/100CFAIL
ionic-team/ionic-framework
core
72/100CFAIL
openplayerjs/openplayerjs
e2e
72/100CFAIL
tagspaces/tagspaces
tests/e2e
72/100CFAIL
tldraw/tldraw
apps/examples/e2e
72/100CFAIL
toeverything/AFFiNE
tests/blocksuite/e2e
72/100CFAIL
calcom/cal.com
apps/web/playwright
71/100CFAIL
live-codes/livecodes
e2e
70/100CFAIL
wekan/wekan
tests/playwright/specs
70/100CFAIL
QwikDev/qwik
e2e
69/100DFAIL
currents-dev/currents-examples
playwright/pnpm/tests
69/100DFAIL
gitkraken/vscode-gitlens
tests/e2e/specs
69/100DFAIL
EnixCoda/Gitako
e2e
66/100DFAIL
openreplay/openreplay
frontend/tests/playwright
66/100DFAIL
Flagsmith/flagsmith
frontend/e2e/tests
62/100DFAIL
activepieces/activepieces
packages/tests-e2e
58/100FFAIL
th3cyb3rhub/TheCyberHub
e2e
56/100FFAIL
DataDog/documentation
hugo/e2e
50/100FFAIL
getsentry/spotlight
packages/spotlight/tests
33/100FFAIL

Repo names link to the exact source scanned. Full methodology, findings breakdown, and a re-runnable script to reproduce every number here live in VALIDATION.md on GitHub.

Open tool · managed platform

Free scorer. Full coverage when you want it.

playwright-score grades the code you already have. QA Guardian maps critical journeys, generates maintainable Playwright, and keeps it green with human-in-the-loop review—using the same quality bar we open-sourced.

  • You own standard Playwright TypeScript—export anytime
  • AI drafts + senior engineers verify
  • Parallel cloud runner, not a brittle Selenium grid

# example output

Playwright Spec Score v4 · profile=standard
Score: 86/100 (B) · PASS (threshold 80)

Dimensions:
  playwrightHygiene: 90
  assertions: 100
  locators: 70
  structure: 95

Findings:
  [warning] playwright/no-raw-locators …

FAQ

Is the score AI-based?

No. The score is fully deterministic and AI-free. Same files always produce the same score under the versioned scoring model (v4). AI can generate or repair code using the findings; rules grade the code.

How is this different from eslint-plugin-playwright?

We run eslint-plugin-playwright under the hood for community best practices, then add a versioned 0–100 score, suite-level metrics (locator ratio, assertion-delegation tracing, Page Object Model import resolution), and CI exit codes.

Does it grade real-world code accurately, or just clean examples?

We validate it against real, public Playwright suites on an ongoing basis — not just our own fixtures. See the real-world results table on this page, or re-run the validation yourself from the GitHub repo.

Can I use this in CI?

Yes. playwright-score exits 0 when the score meets your threshold and 1 when it fails. JSON, markdown, and SARIF outputs are supported.

Who maintains it?

QA Guardian (qaguardian.com). We dogfood it on AI-generated Playwright flows in our managed QA platform. The core scorer is MIT open source.

Score your suite. Own your Playwright.

Star the repo, drop it in CI, or let QA Guardian build and maintain journey coverage for you.