Zero build · real runtimes

Test the JavaScript you ship.

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.

  • Node.js ≥ 22.12
  • Native ESM
  • EventTarget completion
  • Independent coverage gates
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

Less machinery between code and truth.

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.

Same source

Same suite, real hosts.

One standards-based module executes unchanged in Node and Chrome.

Native evidence

Evidence from the engine.

Coverage comes from each runtime's V8 engine over the source you inspect.

Fewer seams

A smaller control surface.

Fewer test-specific layers mean fewer configuration seams and upgrade surfaces.

Published quality snapshot

Loading verified status… latest successful main build main

Shared runtime suite Node + Chrome

One untransformed verification module in both runtimes.

Node tooling suite Integration verified

CLI, configuration, timeout, server, and path-safety behavior.

Shared-core coverage Independent gates

Statements, branches, functions, and lines in Node and Chrome.

Badge information

What each badge proves.

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.

CI workflow status npm package version monthly npm downloads MIT license published quality gates published Node core coverage published Chrome core coverage
CI

Required repository gates

Links to the workflow that runs the Node matrix, real Chrome coverage, package smoke test, site build, and Pages deployment.

npm

Published package metadata

Version and download badges come from npm. The license badge reflects the repository's MIT license.

Quality

Test results with provenance

The quality endpoint is generated from the successful main build. The Testing page shows each gate separately.

Coverage

Runtime-specific evidence

Node and Chrome badges stay separate because each runtime collects and enforces its own native V8 coverage.

Engineer paths

Start with the problem you have.

The documentation is split into focused pages so you can move between implementation, API behavior, test evidence, and coverage without navigating one oversized document.

Learn by example

Copy complete working patterns

Start from runnable browser, Node, async, failure, and type-check examples.

Browse the examples →
Integrate

Use the lifecycle correctly

Understand active-test guards, immutable result snapshots, completion events, and strict decisions.

Open the API reference →
Experiment

Run code in the playground

Edit a real ES module, inspect its mirrored console output, and reset the isolated runtime between runs.

Launch the playground →

Install

One package, no build pipeline.

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-test
Check the terminal.

A successful install exits with status 0.