This ESLint plugin is intended to prevent issues with RxJS.
Most of these rules require TypeScript typed linting and are indicated as such below.
This project started as a fork of eslint-plugin-rxjs
but has since introduced new features which involve breaking changes.
- 
Migrate your config from the old
.eslintrcformat toeslint.config.mjs(or similar), and uninstalleslint-plugin-rxjs.- See ESLint's guide here: [https://eslint.org/docs/latest/use/configure/migration-guide].
 - If you need to continue using the deprecated format, use the original 
eslint-plugin-rxjsor a different fork. 
 - 
Install
eslint-plugin-rxjs-x, and import it into your config.+ import rxjsX from 'eslint-plugin-rxjs-x'; - 
If you previously used the
plugin:rxjs/recommendedshared config, addrxjsX.configs.recommendedto yourconfigsblock:configs: { + rxjsX.configs.recommended, },- Note: 
eslint-plugin-rxjs-xprovides astrictshared config, so consider usingrxjsX.configs.strictinstead. 
 - Note: 
 - 
If you previously did not use a shared config, add the plugin to your
pluginsblock with the new namespace:plugins: { + 'rxjs-x': rxjsX, },- Note: this is unnecessary if you are using a shared config.
 
 - 
In your
rulesblock, replace the namespacerxjswithrxjs-x:- 'rxjs/no-subject-value': 'error', + 'rxjs-x/no-subject-value': 'error',
 - 
If you previously used
rxjs/no-ignored-observable, replace it withrxjs-x/no-floating-observables.- 'rxjs/no-ignored-observable': 'error', + 'rxjs-x/no-floating-observables': 'error',
 
Tip
A complete description of all changes are documented in the CHANGELOG file.
See typescript-eslint's Getting Started for a full ESLint setup guide.
- Enable typed linting.
- See Linting with Type Information for more information.
 
 - Start with the 
recommendedshared config in youreslint.config.mjs. 
// @ts-check
import { defineConfig } from 'eslint/config';
import tseslint from 'typescript-eslint';
import rxjsX from 'eslint-plugin-rxjs-x';
export default defineConfig({
    extends: [
        ...tseslint.configs.recommended,
        rxjsX.configs.recommended,
    ],
    languageOptions: {
        parserOptions: {
            projectService: true,
        },
    },
});| Name | |
|---|---|
| ✅ | recommended | 
| 🔒 | strict | 
The package includes the following rules.
💼 Configurations enabled in.
✅ Set in the recommended configuration.
🔒 Set in the strict configuration.
🔧 Automatically fixable by the --fix CLI option.
💡 Manually fixable by editor suggestions.
💭 Requires type information.
❌ Deprecated.
| Name | Description | 💼 | 🔧 | 💡 | 💭 | ❌ | 
|---|---|---|---|---|---|---|
| ban-observables | Disallow banned observable creators. | |||||
| ban-operators | Disallow banned operators. | 💭 | ||||
| finnish | Enforce Finnish notation. | 💭 | ||||
| just | Require the use of just instead of of. | 
🔧 | ||||
| macro | Require the use of the RxJS Tools Babel macro. | 🔧 | ❌ | |||
| no-async-subscribe | Disallow passing async functions to subscribe. | 
✅ 🔒 | 💭 | |||
| no-compat | Disallow the rxjs-compat package. | 
❌ | ||||
| no-connectable | Disallow operators that return connectable observables. | 💭 | ||||
| no-create | Disallow the static Observable.create function. | 
✅ 🔒 | 💭 | |||
| no-cyclic-action | Disallow cyclic actions in effects and epics. | 💭 | ||||
| no-explicit-generics | Disallow unnecessary explicit generic type arguments. | |||||
| no-exposed-subjects | Disallow public and protected subjects. | 🔒 | 💭 | |||
| no-finnish | Disallow Finnish notation. | 💭 | ||||
| no-floating-observables | Require Observables to be handled appropriately. | 🔒 | 💭 | |||
| no-ignored-default-value | Disallow using firstValueFrom, lastValueFrom, first, and last without specifying a default value. | 
🔒 | 💭 | |||
| no-ignored-error | Disallow calling subscribe without specifying an error handler. | 
🔒 | 💭 | |||
| no-ignored-notifier | Disallow observables not composed from the repeatWhen or retryWhen notifier. | 
✅ 🔒 | 💭 | |||
| no-ignored-replay-buffer | Disallow using ReplaySubject, publishReplay or shareReplay without specifying the buffer size. | 
✅ 🔒 | ||||
| no-ignored-subscribe | Disallow calling subscribe without specifying arguments. | 
💭 | ||||
| no-ignored-subscription | Disallow ignoring the subscription returned by subscribe. | 
💭 | ||||
| no-ignored-takewhile-value | Disallow ignoring the value within takeWhile. | 
✅ 🔒 | ||||
| no-implicit-any-catch | Disallow implicit any error parameters in catchError operators. | 
✅ 🔒 | 🔧 | 💡 | 💭 | |
| no-index | Disallow importing index modules. | ✅ 🔒 | ||||
| no-internal | Disallow importing internal modules. | ✅ 🔒 | 🔧 | 💡 | ||
| no-misused-observables | Disallow Observables in places not designed to handle them. | 🔒 | 💭 | |||
| no-nested-subscribe | Disallow calling subscribe within a subscribe callback. | 
✅ 🔒 | 💭 | |||
| no-redundant-notify | Disallow sending redundant notifications from completed or errored observables. | ✅ 🔒 | 💭 | |||
| no-sharereplay | Disallow unsafe shareReplay usage. | 
✅ 🔒 | ||||
| no-sharereplay-before-takeuntil | Disallow using shareReplay({ refCount: false }) before takeUntil. | 
🔒 | ||||
| no-subclass | Disallow subclassing RxJS classes. | 🔒 | 💭 | |||
| no-subject-unsubscribe | Disallow calling the unsubscribe method of subjects. | 
✅ 🔒 | 💭 | |||
| no-subject-value | Disallow accessing the value property of a BehaviorSubject instance. | 
💭 | ||||
| no-subscribe-handlers | Disallow passing handlers to subscribe. | 
💭 | ||||
| no-subscribe-in-pipe | Disallow calling of subscribe within any RxJS operator inside a pipe. | 
✅ 🔒 | 💭 | |||
| no-tap | Disallow the tap operator. | 
❌ | ||||
| no-topromise | Disallow use of the toPromise method. | 
✅ 🔒 | 💡 | 💭 | ||
| no-unbound-methods | Disallow passing unbound methods. | ✅ 🔒 | 💭 | |||
| no-unnecessary-collection | Disallow unnecessary usage of collection arguments with single values. | 🔒 | ||||
| no-unsafe-catch | Disallow unsafe catchError usage in effects and epics. | 
💭 | ||||
| no-unsafe-first | Disallow unsafe first/take usage in effects and epics. | 
💭 | ||||
| no-unsafe-subject-next | Disallow unsafe optional next calls. | 
✅ 🔒 | 💭 | |||
| no-unsafe-switchmap | Disallow unsafe switchMap usage in effects and epics. | 
💭 | ||||
| no-unsafe-takeuntil | Disallow applying operators after takeUntil. | 
✅ 🔒 | 💭 | |||
| prefer-observer | Disallow passing separate handlers to subscribe and tap. | 
✅ 🔒 | 🔧 | 💡 | 💭 | |
| prefer-root-operators | Disallow importing operators from rxjs/operators. | 
✅ 🔒 | 🔧 | 💡 | ||
| suffix-subjects | Enforce the use of a suffix in subject identifiers. | 💭 | ||||
| throw-error | Enforce passing only Error values to throwError or Subject.error. | 
✅ 🔒 | 💭 |