ESLint plugin enforcing functional programming patterns in JavaScript and TypeScript, v9.0.4 (Feb 2026). Requires ESLint ^9.0.0 or ^10.0.0 and TypeScript >=4.7.4. Actively maintained with monthly releases. Provides presets (strict, recommended, lite) and categorized rulesets for immutability, no statements, no exceptions, currying, and stylistic rules. Differentiated by TypeScript-first design, type-aware rules (e.g., type-declaration-immutability), and support for Map/Set mutation detection. Recommended alternative to plugins like eslint-plugin-immutable or writing custom rules.
npm install eslint-plugin-functionalVerified import paths — ran on the pinned version, not inferred.
Basic ESLint flat config enabling immutable-data, no-let, and prefer-tacit rules with TypeScript parser.
Set 'ignoreMapsAndSets: true' in the immutable-data rule config if you intentionally mutate Maps/Sets.
Update any custom rule logic or inline configs that check private identifiers to include the '#' prefix.
Add 'parserOptions: { project: "./tsconfig.json" }' to the languageOptions for files using this rule.Use the flat config format with import: import { configs } from 'eslint-plugin-functional'; then spread configs.recommended.Migrate to eslint.config.js and use import plugin from 'eslint-plugin-functional' with the plugins and rules object.
Add 'plugins: { functional: plugin }' in the flat config object.Ensure parserOptions.project points to a valid tsconfig.json file that includes the file being linted.