RxJS is a library for composing asynchronous and event-based programs with
Observable values. This repository contains the platform-based next generation
of RxJS, planned for release as RxJS 9.
RxJS 9 is prerelease work in development. The planned first beta is
9.0.0-beta.0, but it has not been published to npm yet. The next tag still
points to the earlier RxJS 8 prerelease, while RxJS 7 remains the production
latest line and continues to be maintained.
Why RxJS 9? What happened to RxJS 8?
RxJS 8 was real work, not a skipped release. Development began years ago and
was paused while the Web Platform Observable proposal was finalized. The new
implementation is a platform-based generation rather than a continuation of
that paused RxJS 8 branch, so it starts at version 9 to make the architectural
break unmistakable and avoid presenting the old RxJS 8 work as the released
product.
What is different in RxJS 9?
RxJS uses the native web-platform Observable when one exists and installs
a conforming fallback only when needed.
RxJS operators and factories are exact, module-owned Symbols. They do not add
string-named RxJS methods to the platform API.
Platform Observable behavior and producer-per-subscription behavior are
explicit, separate contracts. Use ColdObservable when each direct
subscription must create its own producer.
Cancellation is built on AbortSignal and the platform Subscriber lifecycle.
Published JavaScript is ESM-only. Current Node can bridge require() to the
same ESM files; there is no duplicate CommonJS build.
Preview the RxJS 9 API
The following example shows the planned beta API. Until 9.0.0-beta.0 is
published, do not use npm's next tag to install RxJS 9.
import { ColdObservable } from 'rxjs';
import { map } from 'rxjs/map';
const source = new ColdObservable<number>((subscriber) => {
subscriber.next(1);
subscriber.next(2);
subscriber.complete();
});
source[map]((value) => value * 2).subscribe(console.log);
Import the Symbol and call it with bracket syntax. A platform method such as
observable.map(project) remains the platform contract;
observable[map](project) is the separately versioned RxJS contract.
Release support, budgets, and exact environment gates are documented in the
rxjs package. The irreversible npm
publication process is the public secure release runbook.
The RxJS 9 security-assurance document
explains the release evidence, verification commands, sole-maintainer model,
and OpenSSF Scorecard in context.
Repository-wide design records live in
docs/rxjs-next.
Supported environments
The planned beta supports Node 22.13+ and Node 24 as blocking lanes, with Node
26 in an advisory lane. Current Chrome, Firefox, desktop Safari, Mobile Safari,
Deno, Bun, and Webpack 5 are blocking. Every supported consumer receives the
same ESM implementation, so Deno and Bun support adds no runtime-specific
package or application-bundle code.
Contributing
Requires Node 22.13+ and pnpm 10.34.5. Run commands from the repository root.
pnpm install
pnpm --filter rxjs exec vitest --run src
pnpm --filter rxjs run test:package
pnpm run release:check
The complete source-pinned RxJS 7 corpus intentionally retains reviewed
lifecycle and compatibility divergences, so it is migration evidence rather
than a blanket RxJS 9 compatibility gate. Focused source, package, runtime,
browser, performance, and WPT commands are the release gates.