Skip to main content
Introducing packages.sweber.dev
All packages
BetaMIT + Pro

SurjectionAccessibility checks for CI and tests, client-ready reports and accessibility statements in five languages. Built on axe-core, no overlay.

pnpm add -D @sweberdev/surjection

Surjection helps agencies make accessibility part of every project instead of a one-off scan. It runs axe-core in Playwright and Vitest, maps every finding to WCAG 2.2 and EN 301 549, and fails the build only on new problems thanks to a baseline for existing sites.

It also generates the accessibility statement (Erklärung zur Barrierefreiheit) in German, Swiss German, French, Italian and English, and ships small accessible React building blocks. Surjection is deliberately not an overlay widget: it helps you fix the code, it does not hide problems. Automated tests find only part of all barriers, so Surjection does not promise legal conformity.

Example

A short exampleCopy it into your project.

tests/a11y.spec.ts

import { test } from "@playwright/test"
import { expectAccessible } from "@sweberdev/surjection/playwright"
import baseline from "./a11y-baseline.json"

for (const path of ["/", "/shop", "/checkout"]) {
  test(`${path} is accessible`, async ({ page }) => {
    await page.goto(path)
    await expectAccessible(page, { baseline, failOn: "serious", locale: "de" })
  })
}

Features

What you getFree under MIT, with Pro on top.

Free, MIT

  • Playwright helper and Vitest matcher on top of axe-core, tested against WCAG 2.2 AA by default
  • Every finding mapped to its WCAG success criterion and EN 301 549 clause
  • Baseline for existing sites: CI fails only on new issues, not on the whole backlog
  • Markdown report for pull requests and job summaries, in German, Swiss German, French, Italian and English
  • Accessibility statement generator (DE, DE-CH, FR, IT, EN) as Markdown and HTML
  • Accessible React building blocks: skip link, visually hidden text, live announcements, reduced motion

Pro

  • Client reports in your agency's branding, as HTML and PDF
  • History across all client projects, so you can show progress over time
  • Guided manual checklist for the criteria automated tests cannot cover

Compare

Free and ProSide by side.

FeatureFreePro
Playwright helper, Vitest matcher and CLIIncludedIncluded
WCAG 2.2 and EN 301 549 mappingIncludedIncluded
Baseline for existing sitesIncludedIncluded
Markdown report and accessibility statement in five languagesIncludedIncluded
Accessible React building blocksIncludedIncluded
Client report in your branding (HTML and PDF)Not includedIncluded
History and dashboard across client projectsNot includedIncluded
Manual WCAG 2.2 checklist with browser editorNot includedIncluded
LicenceMITPer person
SupportGitHub issuesAgency and Lifetime

Pro

Pro packagesAdd-ons on top of the core.

Live demo

Try the themes, browse the catalog and read a real scanner report. The demo also shows the GTM container check, the monitoring of many client sites and the catalog changes per project.

  • @weber-development/surjection-report

    Client reports in your branding as HTML and PDF, in German, Swiss German, French, Italian and English.

  • @weber-development/surjection-history

    Records every run per project and renders a dashboard with status, change and trend.

  • @weber-development/surjection-checklist

    The 55 WCAG 2.2 A/AA criteria with instructions for manual testing, a browser editor and export to the statement.

Pricing

PricingPrices are in CHF.

Freelancer

For one person working on client projects.

CHF 190

per year

2 months free

  • 1 person
  • No support entitlement
Subscribe

Agency

Recommended

For teams of up to ten named people, one price.

CHF 590

per year

2 months free

  • Up to 10 people
  • Support included
Subscribe

Lifetime

Pay once for up to ten people and keep updates and repository access.

CHF 1'990

one-time

  • Up to 10 people
  • Support included
Buy lifetime licence

11 people or more: get in touch

  • After cancelling, every version you already received keeps working. Only updates and repository access end.
  • No licence key, no phone-home. The packages never contact a server to check your licence.
  • Agency and Lifetime cover up to ten named people for one price: you choose the number of seats at checkout and assign them in Polar. Your clients and their websites need no licence of their own.
  • Checkout, invoices and VAT are handled by Polar as merchant of record.
Read the licence terms

FAQ

QuestionsShort answers.

Does Surjection make my website legally compliant?

No tool can promise that. Automated tests detect only part of all barriers. Surjection makes testing and documentation part of your workflow, but a manual review is still needed.

Is this an accessibility overlay?

No. Overlays add a widget on top of a site and leave the code unchanged. Surjection runs in development and CI and helps you fix the code itself.

Who needs a licence?

Every person on your team who works with the Pro packages. Freelancer covers one person. Agency and Lifetime cover up to ten named people for the same price: you pick the number of seats at checkout, assign them in Polar, and each person connects their own GitHub account. For eleven or more, get in touch.

What happens when I cancel?

Every version you already received keeps working, in every project you used it in. Only new updates and access to the private repository end.

Do my clients need their own licence?

No. The licence covers the people building the sites. The websites you deliver and the clients who own them need nothing.

Is there a licence key or usage tracking?

No. The packages are installed from a private GitHub Packages registry and never contact a licence server.

Who issues the invoice, and is VAT included?

Polar sells Surjection Pro as merchant of record. It handles checkout, invoices and VAT for your country.

Can I use the open-source part on its own?

Yes. @sweberdev/surjection and @sweberdev/surjection-react are MIT-licensed and complete without Pro.

Articles

ArticlesGuides and release notes.