faster end-to-end startup
Compatibility measured · speed measured
Same tests.
Different engine.
Run your JavaScript and TypeScript tests with Jest-style assertions, mocks, snapshots, and configuration. Rust coordinates the run; Node executes your code. Alpha.2 beats Jest on all four controlled benchmark workloads below.
Alpha.2 · 4 controlled benchmark wins · 288 passing scenarios · raw samples included
The destination—not a claim that every Jest project is there today.
Why rebuild it in Rust?
Rust earns
its place.
On the September 18 Apple M2 run, alpha.2 beats pinned Jest on all four workloads. Many-file execution now reuses one Node host with a fresh isolate per file. Compare your own suite too.
faster across 50,000 assertions
faster listing 1,500 test files
faster across 48 files, 4 workers
Download raw timing samples ·
Full method and variance ·
Earlier alpha.1 results
Controlled workloads on one machine; results will vary with your project.
Evidence before adjectives
Measured against
the real thing.
Official Jest is the oracle. Every fixed disagreement becomes a permanent differential fixture. Existing open-source suites add the pressure that synthetic tests cannot.
APOLLO CLIENT
9,974test identities compared across 563 suites
99.940% frozen-status parity · zero Rjest-only failuresSTYLED-COMPONENTS
1,465passing tests, plus 749 matching snapshots
59 / 59 suites on the unchanged web projectREACT NAVIGATION
1,303matching identities in a two-project monorepo
Exact statuses, including the same 2 upstream failuresCORPUS REPORTS
25pinned project and package workloads
React · RN · TS · npm · pnpm · Yarn · PnPHistorical pinned reports; these projects were not all rerun for alpha.2.
Keep the ecosystem
Jest-shaped where
it matters.
Rjest reaches into the existing Jest ecosystem instead of asking mature projects to abandon their transforms, environments, snapshots, and module conventions.
Tests & expectations
Nested suites, hooks, async and callback tests, retries, focus, skips, custom matchers, asymmetric values, promise chains, return-history assertions, argument-routed mocks, spies, teardown state, and lifecycle resets.
expect(result).resolves.toMatchSnapshot()
Snapshots
External and inline snapshots, serializers, property matchers, source-map writes, update mode, and Prettier 2/3 formatting.
Modern + legacy timers
Covered scheduling in Node and JSDOM, including manual, next-async, and interval tick modes.
Transforms & ESM
Babel, ts-jest, JS, JSX, TS, TSX, native ESM, top-level await, async transformers, module mapping, and conditional exports.
Projects at scale
Executable configs, Circus selection, presets, multi-project matrices, display filters, global setup/teardown, result processors, sharding, bail, failed-test history, explicit related-test selection, native all/changed-test watch, interactive interruption, live custom reporters, resolvers, sequencers, pnpm, and Yarn Plug'n'Play.
Babel + V8 coverage
Babel instrumentation and precise V8 ranges, source maps, cross-worker merging, text, JSON, LCOV/HTML, Clover, collection globs, ignores, and Jest-compatible grouped thresholds.
A deliberate hybrid
Rust controls.
Node executes.
Rust handles discovery, scheduling, cancellation, and result aggregation. Multi-file batches reuse one Node host with a fresh worker-thread isolate per file. Globals, module caches, environment changes, and timers stay separate. Babel and snapshot formatting tools initialize when needed.
Read the architecture Read the benchmark policyConfig · discover · select · schedule
Fresh isolate per file · one reused host
Results · snapshots · coverage
Bring a real suite
Try your existing suite.
Install alpha.2 from the release below. Requires Node.js 22.18 or newer and rustup; installation builds the native coordinator with Rust 1.95. Compare discovery, then run serially and in parallel with official Jest.
# Install alpha.2 from GitHub
$ npm install --save-dev https://github.com/OthmaneBlial/Rjest/releases/download/v0.1.0-alpha.2/rjest-rust-runner-0.1.0-alpha.2.tgz
# Compare discovered tests
$ npx jest --listTests
$ npx rjest --listTests
# Compare serial results, then run in parallel
$ npx jest --runInBand
$ npx rjest --runInBand
$ npx rjest --maxWorkers=4
Alpha means alpha
The remaining
work matters.
The approximate 91% readiness view is directional, not an automated Jest API percentage. The measured claim remains 288/288 of the current bounded matrix.
- 01 Watch plugins and terminal polish plus non-Git SCM support remain open. Core controls and active-worker interruption are tested against Jest.
- 02 Persistent discovery/transform caches and reuse of test isolates remain open. Alpha.2 reuses the Node host; every file still gets a fresh isolate.
- 03 Custom VM identity, specialized reporter built-ins, custom Istanbul reporters, cross-project provider combinations, and long-tail resolvers need broader proof.
-
04 Multi-file threads share a PID and native
process resources. Main-thread-only APIs such as
process.chdirare unavailable; a native crash or killing the host PID can stop the batch. Single-file runs use a separate process. - 05 Unlisted Jest behavior needs comparison with your project. Test execution uses your permissions and is not a security sandbox.