Open-Awesome
CategoriesAlternativesStacksSelf-HostedExplore
Open-Awesome

© 2026 Open-Awesome. Curated for the developer elite.

TermsPrivacyAboutGitHubRSS
  1. Home
  2. ESLint
  3. functional

functional

MITTypeScriptv9.0.4

An ESLint plugin to disable mutation and promote functional programming in JavaScript and TypeScript.

GitHubGitHub
974 stars36 forks0 contributors

What is functional?

eslint-plugin-functional is an ESLint plugin that enforces functional programming principles in JavaScript and TypeScript codebases. It provides linting rules to disable mutation, restrict imperative statements, and promote immutable, side-effect-free coding patterns. The plugin helps developers write more predictable and maintainable code by preventing common anti-patterns in functional programming.

Target Audience

JavaScript and TypeScript developers adopting functional programming, teams enforcing coding standards for immutability, and projects transitioning from imperative to functional styles.

Value Proposition

It offers a comprehensive, configurable set of rules with multiple presets (strict, recommended, lite) to support gradual adoption, integrates seamlessly with existing ESLint setups, and provides TypeScript-specific rules for type-level immutability enforcement.

Overview

ESLint rules to disable mutation and promote fp in JavaScript and TypeScript.

Use Cases

Best For

  • Enforcing immutability in JavaScript and TypeScript projects
  • Adopting functional programming practices incrementally
  • Preventing side effects and mutable state in codebases
  • Linting code to restrict classes and object-oriented patterns
  • Ensuring error handling without exceptions in functional code
  • Integrating functional linting with existing ESLint configurations

Not Ideal For

  • Projects heavily reliant on object-oriented patterns, such as those using class-based React components or extensive inheritance hierarchies.
  • Codebases that must interface with imperative JavaScript libraries requiring side effects or mutation, like certain DOM manipulation or state management tools.
  • Teams prioritizing rapid prototyping over code purity, where strict rules could hinder quick iteration and experimentation.

Pros & Cons

Pros

Incremental Adoption Path

Offers lite, recommended, and strict presets, allowing teams to start gently and tighten rules over time, as highlighted in the philosophy section for balanced integration.

Comprehensive Functional Coverage

Includes rulesets for mutations, statements, exceptions, and other paradigms, ensuring holistic enforcement of functional principles across codebases.

TypeScript-First Design

Many rules require type information, providing deep integration with TypeScript for type-level immutability checks, such as prefer-immutable-types.

Active Maintenance and Support

Shown by badges for CI/CD, coverage, and enterprise options via Tidelift, indicating reliable upkeep and community engagement.

Cons

Type Information Dependency

Several rules require TypeScript type checking, which can slow down linting and complicate setup in non-TypeScript or loosely-typed projects.

Strictness Clashes with Imperative Code

The strict preset disallows common patterns like try-catch and classes, making integration with non-functional libraries or legacy code challenging and error-prone.

Limited Auto-Fix Support

Not all rules are auto-fixable; only a few have the 🔧 icon in the rules table, meaning developers often need manual interventions for fixes.

Frequently Asked Questions

Quick Stats

Stars974
Forks36
Contributors0
Open Issues5
Last commit1 day ago
CreatedSince 2019

Tags

#functional-programming#immutability#typescript#code-quality#eslint-rules#fp#eslint-plugin#javascript#eslint#linting#functional#static-analysis

Included in

ESLint4.7k
Auto-fetched 15 hours ago

Related Projects

importimport

ESLint plugin with rules that help validate proper imports.

Stars5,909
Forks1,547
Last commit6 days ago
PromisePromise

Enforce best practices for JavaScript promises

Stars994
Forks100
Last commit4 days ago
fpfp

ESLint rules for functional programming

Stars969
Forks35
Last commit5 years ago
ImmutableImmutable

ESLint plugin to disable all mutation in JavaScript.

Stars911
Forks18
Last commit6 years ago
Community-curated · Updated weekly · 100% open source

Found a gem we're missing?

Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.

Submit a projectStar on GitHub