{"id":19928,"library":"eslint-plugin-rxjs-x","title":"eslint-plugin-rxjs-x","description":"Modern ESLint plugin for RxJS, forked from the unmaintained eslint-plugin-rxjs. v1.0.2 requires ESLint ^10.0.1, Node ^20.19.0 || ^22.13.0 || >=24, and RxJS ^7.2.0 with TypeScript >=4.8.4 <6.1.0. Ships TypeScript types. Offers flat-config-only recommended and strict configs, with 33+ rules. Breaking from v0.x: ESLint 10 required, Node 18 dropped, eslintrc unsupported, and namespace changed from 'rxjs' to 'rxjs-x'. Provides typed linting via dependency on typescript-eslint.","status":"active","version":"1.0.2","language":"javascript","source_language":"en","source_url":"https://github.com/JasonWeinzierl/eslint-plugin-rxjs-x","tags":["javascript","lint","rules","eslint","eslintplugin","eslint-plugin","rxjs","typescript"],"install":[{"cmd":"npm install eslint-plugin-rxjs-x","lang":"bash","label":"npm"},{"cmd":"yarn add eslint-plugin-rxjs-x","lang":"bash","label":"yarn"},{"cmd":"pnpm add eslint-plugin-rxjs-x","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency; plugin requires ESLint to function.","package":"eslint","optional":false},{"reason":"Peer dependency; rules check RxJS usage patterns.","package":"rxjs","optional":false},{"reason":"Peer dependency; typed linting requires TypeScript.","package":"typescript","optional":false}],"imports":[{"note":"ESM-only; CommonJS require() is not supported.","wrong":"const rxjsX = require('eslint-plugin-rxjs-x')","symbol":"default import","correct":"import rxjsX from 'eslint-plugin-rxjs-x'"},{"note":"Access via property, not bracket notation with string key.","wrong":"rxjsX.configs['recommended']","symbol":"configs","correct":"rxjsX.configs.recommended"},{"note":"Namespace changed from 'rxjs' to 'rxjs-x' in v1.0.0.","wrong":"// eslint-disable-next-line rxjs/no-subject-value","symbol":"rules prefix in inline comments","correct":"// eslint-disable-next-line rxjs-x/no-subject-value"},{"note":"eslintrc style configs are not supported in v1.0.0; only flat config with import/export.","wrong":"module.exports = { plugins: ['rxjs-x'], extends: ['plugin:rxjs-x/recommended'] }","symbol":"flat config with typescript-eslint","correct":"import tseslint from 'typescript-eslint'; import rxjsX from 'eslint-plugin-rxjs-x'; export default tseslint.config({ extends: [...tseslint.configs.recommended, rxjsX.configs.recommended], languageOptions: { parserOptions: { projectService: true } } })"}],"quickstart":{"code":"// @ts-check\nimport { defineConfig } from 'eslint/config';\nimport tseslint from 'typescript-eslint';\nimport rxjsX from 'eslint-plugin-rxjs-x';\n\nexport default defineConfig({\n  extends: [\n    tseslint.configs.recommended,\n    rxjsX.configs.recommended,\n  ],\n  languageOptions: {\n    parserOptions: {\n      projectService: true,\n    },\n  },\n});","lang":"typescript","description":"Sets up ESLint flat config with typescript-eslint and eslint-plugin-rxjs-x recommended rules for typed RxJS linting."},"warnings":[{"fix":"Upgrade to ESLint ^10.0.1 and Node.js ^20.19.0 || ^22.13.0 || >=24.","message":"ESLint v10 required; Node.js v18 support dropped.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Migrate to flat config using import statements and defineConfig.","message":"eslintrc config no longer supported; only flat config with import/export.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Replace 'rxjs/' with 'rxjs-x/' in all ESLint config rules and inline disable comments.","message":"Namespace changed from 'rxjs' to 'rxjs-x'; all rule references must be updated.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Use 'rxjs-x/no-floating-observable' instead of 'rxjs/no-ignored-observable'.","message":"Rule 'rxjs/no-ignored-observable' replaced by 'rxjs-x/no-floating-observable'.","severity":"breaking","affected_versions":">=1.0.0"},{"fix":"Use rxjsX.configs.recommended in flat config.","message":"'recommended-legacy' config removed in v1; use flat config only.","severity":"deprecated","affected_versions":">=1.0.0"},{"fix":"Add 'projectService: true' to parserOptions; otherwise type-dependent rules won't work.","message":"Typed linting requires projectService: true in parserOptions.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Ensure RxJS is ^7.2.0 and TypeScript >=4.8.4 <6.1.0.","message":"Peer dep upper bounds: rxjs ^7.2.0, typescript <6.1.0.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"last_verified":"2026-04-25T00:00:00.000Z","next_check":"2026-07-24T00:00:00.000Z","problems":[{"fix":"npm install eslint-plugin-rxjs-x --save-dev","cause":"Package not installed or wrong import path.","error":"Error: Cannot find module 'eslint-plugin-rxjs-x'"},{"fix":"Use flat config: import rxjsX from 'eslint-plugin-rxjs-x' and extend rxjsX.configs.recommended.","cause":"Using old eslintrc syntax with 'extends' containing 'plugin:rxjs-x/recommended'.","error":"Configuration for rule \"rxjs-x/no-subject-value\" is invalid: Value \"error\" is not a valid severity."},{"fix":"Use 'import rxjsX from 'eslint-plugin-rxjs-x'' in ESM context.","cause":"Using require() instead of import in flat config.","error":"TypeError: eslint-plugin-rxjs-x is not a function"},{"fix":"Add 'projectService: true' to parserOptions and ensure tsconfig is present.","cause":"Missing 'projectService: true' or TypeScript config not found.","error":"Parsing error: ESLint was configured to run on files that are not included in the project's TypeScript configuration."},{"fix":"Switch to ESM or use dynamic import: const rxjsX = await import('eslint-plugin-rxjs-x').then(m => m.default);","cause":"Importing default export incorrectly in CommonJS.","error":"Cannot read properties of undefined (reading 'configs')"}],"ecosystem":"npm","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}