Back to Pure

No surprises.Byte for byte.

Pure is a drop-in replacement for Node.js and Bun. This is exactly how we check, and exactly what we count.

How we check

  1. 1

    Take a real test

    From Node.js, Bun, the ECMAScript standard, or a project's own repository, unmodified.

  2. 2

    Run it on the real runtime

    Node.js v26.13.0 or Bun v1.4.4, on Linux x86-64, is the oracle. Whatever it prints is the right answer, including its quirks.

  3. 3

    Run it on Pure

    Compile the same input into a native binary and run that.

  4. 4

    Compare everything

    stdout, stderr and the exit code must match, byte for byte. A difference of one character is a failure.

There are two exceptions. First, output the real runtime cannot reproduce itself, such as timestamps, process ids and ports. We mask just those tokens, and only after proving the real runtime's own output differs from run to run.

Second, stack traces. We don't ship Node.js or Bun, so we don't try to duplicate their internals. A frame inside the runtime itself is shown as one “at <node internal>” marker in both outputs before they are compared. Frames in your code and in your dependencies stay exact.

We never add a rule that hides any other difference.

The official suites

Three test suites that we did not write, and that define what these runtimes do.

test262

100%

101,400 tests passing byte for byte

Pinned to commit dd6138f; compared against Node.js v26.13.0

The official ECMAScript conformance suite, maintained by the committee that writes the language standard.

How we count. Tests that apply to both language modes run twice, once in sloppy mode and once in strict mode, and each run counts. That includes about 4,600 tests that check whether invalid syntax is rejected: a test passes only when Node.js rejects the program and Pure rejects it too. Nothing in the suite is left out.

Node.js

100%

5,889 tests passing byte for byte

Node.js v26.13.0's own tests, compared against Node.js v26.13.0

Node.js's own test suite: the tests the Node.js project runs against every release.

How we count. The full upstream test tree at the pinned Node.js version. The only tests left out are ones that cannot apply to a drop-in runtime, each listed with the reason.

Bun

100%

2,347 tests passing byte for byte

Bun v1.4.4's own tests, compared against Bun v1.4.4

Bun's own test suite: the tests the Bun project runs against every release.

How we count. Taken from Bun's repository at the pinned release, and run with Bun's own test runner as the oracle.

Beyond the official suites

Official suites cover what the runtimes promise. These cover what people actually run, and what we worry about.

Other people's code

2,000+
popular npm and GitHub projects

Each project's own unit tests run unmodified. Projects that ship end-to-end tests run end-to-end. And AI-written suites cover every part of each package, catching what maintainers' tests miss.

Our own tests

5,500+
hand-written tests

Each one is checked byte for byte against the real Node.js or Bun, and written to catch what the upstream tests can't.

Memory tests

1,700+
leak tests

They fail on any leak, so long-running servers stay flat instead of creeping up until they are restarted.

Differential fuzzing

Always on
random inputs, three runtimes

Random programs run through Node.js, Bun and Pure side by side, hunting for crashes and any difference in output.

Found a difference?

We treat any mismatch with the real runtime as a bug in Pure, and we fix Pure, never the test. Tell us and we'll reproduce it.

Tell us

Closed alpha

Pure is in closed alpha. Help us shape it.

We're working with a small group of design partners and early testers. If you run Node.js services and want to cut your runtime costs, leave your email and we'll be in touch.

We'll only use your email to contact you about Pure. See our privacy policy.