Same suite, real hosts.
One standards-based module executes unchanged in Node and Chrome.
Zero build · real runtimes
Write one standards-only ES module and execute it unchanged in Node.js and Google Chrome. Coverage comes directly from each runtime's V8 engine—no bundle, transpiler, or source instrumentation.
import VanillaTest from 'vanilla-test';
const test = new VanillaTest();
test.expects('addition preserves the total');
try {
test.compare(1 + 2, 3);
test.pass();
} catch (error) {
console.error(error);
test.fail();
}
test.done();
const result = test.report();
Check the console or DevTools for expectations, decisions, errors, and the final report.
Why vanilla JavaScript
Vanilla is not a nostalgia choice here; it is a control-surface choice. A suite stays an ordinary ES module that Node.js and Chrome execute unchanged. No framework dialect, bundler, transpiler, or source rewrite sits between the code you wrote and the code that failed.
One standards-based module executes unchanged in Node and Chrome.
Coverage comes from each runtime's V8 engine over the source you inspect.
Fewer test-specific layers mean fewer configuration seams and upgrade surfaces.
Loading verified status… latest successful main build main
One untransformed verification module in both runtimes.
CLI, configuration, timeout, server, and path-safety behavior.
Statements, branches, functions, and lines in Node and Chrome.
Badge information
Badges are compact links to package metadata or build evidence. Use the testing and coverage pages when you need the scope, commit, timestamp, and raw reports behind them.
Links to the workflow that runs the Node matrix, real Chrome coverage, package smoke test, site build, and Pages deployment.
Version and download badges come from npm. The license badge reflects the repository's MIT license.
The quality endpoint is generated from the successful main build. The Testing page shows each gate separately.
Node and Chrome badges stay separate because each runtime collects and enforces its own native V8 coverage.
Engineer paths
The documentation is split into focused pages so you can move between implementation, API behavior, test evidence, and coverage without navigating one oversized document.
Create the shared entry, add the Node adapter, and configure a browser import map.
Read the getting-started guide →Start from runnable browser, Node, async, failure, and type-check examples.
Browse the examples →Understand active-test guards, immutable result snapshots, completion events, and strict decisions.
Open the API reference →Edit a real ES module, inspect its mirrored console output, and reset the isolated runtime between runs.
Launch the playground →Install
The shared core stays host-neutral and uses Web-standard lifecycle primitives. Host tooling stays around the suite instead of leaking into it.
npm install vanilla-testA successful install exits with status 0.