ReactiveX/rxjs
{ "createdAt": "2015-03-15T06:17:10Z", "defaultBranch": "master", "description": "A reactive programming library for JavaScript", "fullName": "ReactiveX/rxjs", "homepage": "https://rxjs.dev", "language": "TypeScript", "name": "rxjs", "pushedAt": "2026-08-04T19:52:15Z", "stargazersCount": 31697, "topics": [ "javascript", "rxjs" ], "updatedAt": "2026-08-04T18:51:12Z", "url": "https://github.com/ReactiveX/rxjs"}[]!(docs/rxjs-next/ARCHITECTURE.md#native-selection-and-polyfill-boundary)
[
]!(docs/rxjs-next/ARCHITECTURE.md#symbol-extension-model)
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. Thenexttag still points to the earlier RxJS 8 prerelease, while RxJS 7 remains the productionlatestline and continues to be maintained.
Why RxJS 9? What happened to RxJS 8?
Section titled “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?
Section titled “What is different in RxJS 9?”- RxJS uses the native web-platform
Observablewhen 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
ColdObservablewhen each direct subscription must create its own producer. - Cancellation is built on
AbortSignaland 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
Section titled “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.
Packages and documentation
Section titled “Packages and documentation”| Package | Purpose | Documentation |
|---|---|---|
rxjs | Symbol extensions and intentional RxJS primitives | [Package guide]!(packages/rxjs/README.md) · [API]!(packages/rxjs/docs/API.md) · [RxJS 7 migration]!(packages/rxjs/MIGRATION.md) |
@rxjs/observable-polyfill | Conditional platform Observable fallback | [Package guide]!(packages/observable-polyfill/README.md) |
@rxjs/test | Implementation-neutral virtual-time and marble testing | [Package guide]!(packages/test/README.md) |
@rxjs/migrate | Deterministic migration engine and canonical agent Skill | [Package guide]!(packages/migrate/README.md) |
Release support, budgets, and exact environment gates are documented in the
[rxjs package]!(packages/rxjs/docs/RELEASE_GATES.md). The irreversible npm
publication process is the public [secure release runbook]!(docs/RELEASE_PROCESS.md).
The [RxJS 9 security-assurance document]!(packages/rxjs/docs/SECURITY_ASSURANCE.md)
explains the release evidence, verification commands, sole-maintainer model,
and OpenSSF Scorecard in context.
Repository-wide design records live in
[docs/rxjs-next]!(docs/rxjs-next/PROJECT_CHARTER.md).
Supported environments
Section titled “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
Section titled “Contributing”Requires Node 22.13+ and pnpm 10.34.5. Run commands from the repository root.
pnpm installpnpm --filter rxjs exec vitest --run srcpnpm --filter rxjs run test:packagepnpm run release:checkStart with the [repository contribution guide]!(CONTRIBUTING.md) and the
[rxjs package contribution guide]!(packages/rxjs/CONTRIBUTING.md). The active
execution queue is [PROJECT_PLAN.md]!(docs/rxjs-next/PROJECT_PLAN.md).
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.
Community and governance
Section titled “Community and governance”- [Code of Conduct]!(CODE_OF_CONDUCT.md)
- [Contribution guidelines]!(CONTRIBUTING.md)
- [Apache 2.0 License]!(LICENSE.txt)
- Issues
- Discussions