Standalone
When to use it
For a manual check against a page open in a real browser, a bookmarklet, or any other context with no automation driver and no build step to reach for.
Usage
@surea11y/core ships surea11y.browser.js at the package root, a bundle generated from the same rule sources as the Node package. Loading it directly defines one global, a11ycore:
<script src="node_modules/@surea11y/core/surea11y.browser.js"></script><script>const result = a11ycore.runa11yCoreInPage(location.href, null, {}, null);console.log(result.checksResults.filter((r) => r.outcome === 'fail'));</script>
a11ycore.runa11yCoreInPage is the exact same function the bindings call under the hood — the bundle exists only to solve loading it without require/a module system, not to add a separate API surface.
The bundle carries English only. Every other locale ships beside it as its own file — load one after the bundle and that language becomes available:
<script src="node_modules/@surea11y/core/surea11y.browser.js"></script><script src="node_modules/@surea11y/core/surea11y.i18n.de.js"></script><script>const result = a11ycore.runa11yCoreInPage(location.href, null, { locale: 'de' }, null);</script>
Ask for a locale whose file you haven't loaded and you get English, not an error — see Locales.
Deliberately excluded from the bundle: runa11yCoreAcrossFrames/a11yCoreEnableFrameResponder (cross-frame scanning needs the embedded frame to load the engine and opt in too — not a fit for a single dropped-in script tag). Use the npm package directly if you need it — see INTEGRATION.md.
require('@surea11y/core') directly, without any binding, is the other standalone path — this is Pattern 1/Pattern 2 in INTEGRATION.md: jsdom in Node with no real browser, or driving Puppeteer/Playwright yourself instead of going through a binding.