Skip to content
64

Awesome FP JS

:sunglasses: A curated list of awesome functional programming stuff in js

6k stars388 forks184 entriesLast push Jan 15, 2026 (8 months ago)License none

This page lists names, links and short descriptions. The original list on GitHub is the source and belongs to its authors.

Libraries

Ramda

A practical functional library for JavaScript that is designed specifically for a functional programming style. A style that makes it easy to create functional pipelines and never mutates user data. +TS.

In 6 listsDetails

Ramda Adjunct

is a community-maintained extension of Ramda.

In 3 lists

Ramda-extension

is set of utility point-free functions composed only from Ramda functions.

In 2 lists

Rambda

A faster alternative to Ramda in under 10kB.

In 3 lists

Rambdax

Extended version of Rambda

Folktale

A standard library for functional programming in JavaScript. Typescript support expected mid-2020. -TS.

In 3 lists

lodash/fp

An instance of Lodash with its methods wrapped to produce immutable, auto-curried, iteratee-first, data-last methods. +TS.

In 8 listsDetails

iterflow

Powerful iterator utilities for TypeScript with statistical operations, windowing, and lazy evaluation. +TS

functional.js

A lightweight functional JavaScript library that facilitates currying and point-free / tacit programming.

101

A modern and modular JavaScript utility library made to work well with vanilla JavaScript methods. -TS

fnuc

A functional library for CoffeeScript (and JavaScript) to facilitate functional composition and higher order functions.

barely-functional

A tiny (2.7kb) functional programming library using native ES5/6 operations. -TS.

In 2 lists

bluebird-promisell

A practical functional programming library for promises.

prelude.ls

A functionally oriented utility library somewhat based off of Haskell's Prelude module. -TS.

preludejs

Hardcore Functional Programming for JavaScript. -TS.

In 2 lists

1-liners

Functional tools that couldn’t be simpler. A dead simple functional utility belt, hand-crafted with love and attention. -TS.

In 2 lists

fn-curry

A simple function to curry a function.

curry

Curry your functions using function bind syntax.

compose-function

Compose a new function from smaller functions.

In 2 lists

functionize

A collection of functions which aid in making non-functional libraries functional.

lambdajs

The full ECMAScript API done a functional way.

fp-dom

Making the DOM functional.

react-on-lambda

Replace JSX in React with functions (currying, compositions and etc).

In 2 lists

trifl

A functional user interface library with unidirectional dataflow and a virtual dom.

funcy

An experiment in adding functional pattern matching to JavaScript. Experimental :triangular_flag_on_post:

date-fp

A functional utility library for working with JavaScript dates. All functions in date-fp are pure, autocurried and will not mutate the date objects they are applied to.

js-joda

An immutable date and time library that provides a simple, domain-driven and clean API based on the ISO8601 calendar.

_part_

A micro library that encourages functional programming by making native methods available as partially applied functions.

claire

A property-based testing library for clearly specifying code invariants and behaviour.

FPO.js

FP library for JavaScript by Kyle Simpson (aka getify). Supports named-argument style methods.

Javascript Parser Combinator

Javascript parser combinator implementation inspired by the Haskell's Parsec

fun-task

An abstraction for managing asynchronous code in JS. Tasks are similar to Promises with the key difference that Tasks can represent a computation while Promises can represent only the results of a computation. Ships with Flow type definitions.

most

Ultra-high performance reactive programming to help you compose asynchronous operations on streams of values and events without many of the hazards of side effects and mutable shared state.

In 2 lists

zen-signals

☯ The simplest signal library possible

funfix

Funfix is a library of type classes and data types for Functional Programming in JavaScript, TypeScript and Flow. +CT, +TS.

pico-lambda

Arrays, Strings and things the functional way. A 640b functional library based on native methods. -TS.

pareto-js

An extremely small, intuitive and fast functional utility library for JavaScript -TS.

fpEs

A small library provides simple usages of basic FP & pattern-matching/sumtype & MonadIO/Rx & Optional for Javascript. -TS.

Creed

Sophisticated and functionally-minded async with advanced features: coroutines, promises, ES2015 iterables, fantasy-land. -TS.

TGrid

Grid Computing Framework, Network & Thread extension of TSTL, supporting RFC (Remote Function Call). +TS.

In 3 lists

Ferrum

Iterator library with support for objects as iterables, lazy evaulation andpipe(); implements Traits (from Rust)/Type Classes (from Haskell) in JS. -TS.

fp-ts

Typed functional programming in TypeScript. +CT, +TS.

iter-tools

a rich toolset for working with iterables, both sync and async. +TS.

remeda

A function library roughly subsetting Ramda, but written in Typescript and thus more type-friendly. +TS.

futil-js

A collection of functional utilities that could conceivably be part of a library like lodash/fp, but for some reason or other are not.

rubico

🏞 [a]synchronous functional syntax

In 2 lists

rocket-pipes

Powerful pipes, that chain Promise and ADT like Maybe or Either from popular FP libraries. +TS

omg-curry

Comprehensive Curry Library with Operator Curry, Curry from functions, Decurry and Infifnite Curries.

lfi

A Lazy Functional Iteration Library Supporting Sync, Async, and Concurrent Iteration.

ts-multimethod

TypeScript multimethods inspired by Clojure multimethods. +TS

ts-fp-di

Tiny TypeScript functional dependency injection, based on Node.js AsyncLocalStorage. +TS

effect-ts

A Fully-fledged functional effect system for typescript with a rich standard library. +TS

qio

A type-safe, functional, performant, lawful, composable data structure that solves practical problems of effect-full code in node and browser. +TS

Ditox.js

Powerful dependency injection container for building modular apps. +TS

RxEffects

Reactive state and effect management with RxJS. +TS

fxts

Lazy evaluation and concurrency. +TS

In 3 lists

ts-belt

Fast, modern, and practical utility library for FP in TypeScript. (Uses a data-first approach like remeda, but is faster than remeda, ramda, rambda, and lodash/fp.)

fp-multik

JS/TS lightweight value-multimethod util

true-myth

A library for safe, idiomatic null and error handling in TypeScript, with Maybe and Result types, supporting both a functional style and a more traditional method-call style

ts-pattern

The exhaustive Pattern Matching library for TypeScript, with smart type inference. Pattern Matching is a code-branching technique coming from FP languages.

In 2 lists

hyogwa

Natural 🌿 effect system that fits TypeScript; Write codes as you write plain typescript code.

Verticalize

Super lightweight function that looks and behaves like a pipe operator.

PureEval

A powerful JavaScript functional programming toolset, including utility functions and abstract data structures.

context-fp

Microscopic functional programming context aka dependency injection. +TS

klubok

Pipes with easy mocking, intended for huge amount of unit tests. +TS

fp-filters

A curated collection of 130+ common-use filter functions. Written in a functional programming style. Lightweight direct imports. Supports ES modules and CommonJS. 100% Unit tested. +TS

tinyeffect

A tiny TypeScript library for handling side effects in a unified way using algebraic effects. +TS

Libraries >Data Structures

Icepick

Utilities for treating frozen JavaScript objects as persistent immutable collections

Immutable.js

Immutable persistent data collections.

In 6 listsDetails

Immer

Immer is a tiny package for immutable state based on copy-on-write mechanism. +TS.

In 2 lists

Mori

ClojureScript’s persistent data structures and supporting API from the comfort of vanilla JavaScript.

In 3 lists

Baobab

persistent and optionally immutable data tree with cursors.

In 2 lists

immutable-sequence.js

High performance implementation of Immutable Sequence in JavaScript, based on Finger Trees.

Timm

Immutability helpers with fast reads and acceptable writes.

Lazy.js

A utility library with a lazy engine under the hood that strives to do as little work as possible while being as flexible as possible.

In 7 listsDetails

DerivableJS

Functional Reactive State for JavaScript and TypeScript. DerivableJS enables you to make elegant declarative statements about how your bits of state are related. +TS.

imlazy

Library for creating and manipulating lazy iterables using the ES2015 iteration protocols.

In 2 lists

collectable

Super high-performance immutable data structures for modern JavaScript and TypeScript applications. +TS.

List

An extremely fast immutable list with a comprehensive functional API. Designed to seamlessly integrate with Ramda.

prelude.ts

Immutable persistent collections, functional constructs such as Option and Either, and combinators. Implemented in Typescript but supports javascript too. +CT, +TS.

TSTL

C++ STL (Standard Template Library) is implemented in TypeScript. STL Containers, iterators, algorithms and functors, that following functional programming rule, are provided. +TS.

In 2 lists

Libraries >Algebraic Data Types

Fantasy Land

Not a library, but a specification of the Monad laws for libraries to follow.

In 4 listsDetails

Static Land

Specification similar to Fantasy Land but based on static methods rather than instance methods.

In 2 lists

immutable-ext

FantasyLand extensions for Immutable.js.

In 2 lists

daggy

Library for creating tagged constructors.

In 2 lists

Sanctuary

Sanctuary makes it possible to write safe code without null checks. +CT, +TS.

In 2 lists

monet.js

A library that assists functional programming by providing a rich set of Monads and other useful functions. +CT, +TS.

union-type

A small JavaScript library for defining and using union types.

In 2 lists

freeky

A collection of Free monads.

In 2 lists

Fluture

A Future library with included control utilities, high performance and great error messages.

In 2 lists

fantasy-combinators

Common combinators.

fantasy-birds

Port of the Haskell package Data.Aviary.Birds. Everything for your combinatory needs.

In 2 lists

crocks

A collection of popular Algebraic Data Types with the main goal to curate and provide not only a common interface between each type, but also all of the helper functions needed to hit the ground running. -TS.

In 3 lists

kudo-js

A small utility library with a set of Algebraic Data Types and Helper functions to help you write code in a functional programming style in Javascript

purify

Functional programming library for TypeScript focusing on ADTs. +CT, +TS.

In 2 lists

MojiScript

an async-first, opinionated, and functional language designed to have 100% compatibility with JavaScript engines

Pratica

Small, simple, easy FP data types for pragmatic and productive developers who need to ship reliable code fast. +CT, +TS.

Tifi

Tifi is a library for functional programming in TypeScript. It solves a problem of the existence of both undefined and null. Tifi is inspired by the OCaml/Reason utilities for the option data type. +CT, +TS.

sweet-monads

A collection of popular monads (such as Either and Maybe) and the lazy iterator.

In 2 lists

NeverThrow

This package contains a Result type that represents either success (Ok) or failure (Err).

Libraries >Lenses

lenses

Composable kmett style lenses.

In 2 lists

optics

Profunctor optics (Lens, Prism, iso).

In 3 lists

ramda-lens

ram: :mag_right: Lens library built on Ramda.

In 2 lists

fantasy-lenses

Composable, immutable getters and setters. (Profunctor lenses WIP)

In 2 lists

nanoscope

Lenses with dotty support.

partial.lenses

Partial lenses is a comprehensive, high-performance optics library for JavaScript.

In 3 lists

shades

A lodash-inspired lens-like library for Javascript.

Functional Languages that Compile to JavaScript

ClojureScript

Compiles Clojure, a hosted Lisp with immutable persistent data structures, to JavaScript.

In 2 lists

Elm

A type-safe functional programming language for declaratively creating web browser-based graphical user interfaces. Implemented in Haskell.

In 2 lists

Fable

Compiles F# to readable JavaScript.

In 2 lists

PureScript

A small strongly typed programming language that compiles to JavaScript.

Idris

A general purpose pure functional programming language with dependent types.

In 2 lists

GHCJS

Haskell to JavaScript compiler, based on GHC.

ElixirScript

Compiles a subset of Elixir, a dynamic, functional language designed for building scalable and maintainable applications, to JavaScript.

Js_of_ocaml

Compiles OCaml bytecode to JavaScript, making it possible to run OCaml programs in the browser.

In 2 lists

Reason

Reason is a new interface to OCaml, a highly expressive dialect of the ML language featuring type inference and static type checking.

In 3 lists

ReScript

(previously known as Bucklescript) ReScript is a type-safe language that compiles to the highest quality of clean, readable and performant JavaScript code.

In 2 lists

Scala.js

Compiles Scala to JavaScript.

LiveScript

LiveScript has a straightforward mapping to JavaScript and allows you to write expressive code devoid of repetitive boilerplate.

Quack

A multi-paradigm programming language with gradual and duck typing that targets PHP and JS.

ion

no BS JS

RamdaScript

A Lisp that compiles to opinionated JavaScript on top of RamdaJS

RacketScript

RacketScript aims to leverage both JavaScript and Racket's ecosystem, and make interoperability between them clean and smooth.

Koka

Koka is a function-oriented programming language that seperates pure values from side-effecting computations with a familiar JavaScript like syntax.

TypeScript

TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.

In 6 listsDetails

Gleam

Gleam is a typed, functional language that compiles to Erlang and JavaScript.

In 3 lists

Programming Tools

eslint-plugin-fp

ESLint rules for functional programming

In 2 lists

4.5

A functional assertions library. If you prefer functional style APIs and practices in JavaScript, this library aims to solve this with functionally-oriented assertions that are lazy and monadic.

hm-def

Runtime type checking for JS with Hindley Milner signatures.

In 2 lists

ftor

A pluggable runtime type checker and functional debugging tool that supports parametric and row polymorphism, implicit rank-2 types and algebraic data types via Scott Encoding.

Resources >Books

Professor Frisby’s Mostly Adequate Guide to Functional Programming

This is a book on the functional paradigm in general using the world’s most popular functional programming language: JavaScript. It’s a practical introduction that builds up intuition through real-world examples. Strongly recommended. By Brian Lonsdorf (2016)

In 3 lists

Functional-Light JavaScript

This book explores the core principles of functional programming (FP) that can be applied to JavaScript. But what makes this book different is that it approaches these principles without all the heavy terminology.

In 6 listsDetails

JavaScript Allongé

, the “Six” edition. Starts with as little as possible about functions – but no less! – and builds up towards powerful combinators and decorators. A foundational book. By Reginald Braithwaite (2016)

In 2 lists

Functional Programming in JavaScript

teaches JavaScript developers functional techniques that will improve extensibility, modularity, reusability, testability, and performance. Through concrete examples and jargon-free explanations, this book teaches you how to apply functional programming to real-life development tasks. By Luis…

In 2 lists

Eloquent JavaScript

. A modern introduction to programming using JavaScript. By Marijn Haverbeke (2014)

In 3 lists

Functional JavaScript

teaches how to create code that’s beautiful, safe, and simple to understand and test by using JavaScript’s functional programming support. By Michael Fogus (2013)

Grokking Simplicity

teaches functional programming from first principles. It uses JavaScript for all code examples and it uses real-world scenarios. By Eric Normand (2019)

In 2 lists

scriptum

a no-frills functional programming library and a online course based on it

Resources >Articles

FP Concepts in JavaScript

An introduction to Functional Programming Concepts in JavaScript. Uses the Ramda library to teach the concepts of composition, pointfree style, and functors through the simplest of examples.

In 2 lists

Functional programming with JavaScript

Another introduction to Functional Programming in JavaScript with a focus on three key themes: computation as the application of functions, statelessness, avoiding side effects.

In 2 lists

A gentle introduction to functional JavaScript

A four-part series introduction functional programming in JavaScript that gets you up to speed what all the hype about functional programming is all about.

In 2 lists

Functors from first principle - explained with JS

Explaining functors concept using JavaScript.

Why Curry Helps

A short overview of how to write reusable and declarative code using currying.

In 2 lists

Favoring Curry

Practical applications of currying using Ramda.

In 3 lists

Functional Mumbo Jumbo – ADTs

A beginner-friendly introduction to Algebraic Data Types.

JavaScript and Type Thinking

Learn to reason about your JavaScript code with type thinking. Algebraic Data Types are introduced as a conceptual basis to reason about program entities.

Lazy, composable, and modular JavaScript

Use four new features of ES6 – iterables, generators, fat arrows, and for-of – in conjunction with higher-order functions, function composition, and lazy evaluation, to write cleaner and more modular JavaScript.

In 2 lists

Why Ramda

To those not used to functional programming, Ramda seems to serve no purpose whatsoever. However, it does offer a different style of coding, a style that’s taken for granted in purely functional programming languages: Ramda makes it simple for you to build complex logic through functional…

In 2 lists

Monads in JavaScript

An introduction to the Monad design pattern in JavaScript.

In 2 lists

A Monad in Practicality: First-Class Failures

A walk through some practical use cases for specific monadic structures in JavaScript: use the Maybe monad to handle simple failure cases and model more complex scenarios with the Either monad or the Validation applicative functor.

Functional programming

Many articles on various aspects of functional programming in JavaScript by Gleb Bahmutov.

Functional Programming Jargon

Jargon from the functional programming world explained in JavaScript.

In 3 listsDetails

Data Structures in JavaScript

A series of blog posts that reimplements various data structures in JavaScript to better understand their benefits and downsides.

So You Want to be a Functional Programmer

Easy to understand, with some examples, introduction to Functional Programming in Javascript and Elm.

In 2 lists

Functional Programming for JavaScript People

A complete introduction to functional programming patterns by Chet Corcos with a lot of javascript examples.

In 2 lists

Introduction to Immutable.js and Functional Programming Concepts

Learn about functional data structures and their uses in this overview of Facebook's popular library for JavaScript: Immutable.js.

Master the JavaScript Interview: What is Functional Programming?

A simple introduction by @ericelliott to functional principles and vocabulary.

In 2 lists

Composing Software

A series of articles on learning functional programming and compositional software techniques in JavaScript ES6+ from the ground up by @ericelliott.

Anonymous Recursion in JavaScript

Short and easy to understand article about implementing anonymous recursion in JavaScript.

Functional Composition in Javascript

Step by step explanation of how to compose functions in javascript.

Functional Programming Principles in Javascript

Practical code examples to learn functional programming concepts like pure function, immutability, first-class entities, and higher order functions

Basic Monads in Javascript

Introduction to 2 easy monads in Javascript, Maybe & Either.

F# for JavaScript Devs

Showcasing the similarities between F# and JavaScript

A practical guide to writing more functional Javascript

A step by step guide to convert imperative JavaScript to more declarative, functional JavaScript.

You don't (may not) need loops ➿

Loops are one of the first constructs that junior programmers learn, but they can pose many potential issues in the software development process, and could be avoided in many cases.

Resources >Videos

Classroom Coding with Prof. Frisby

A series that builds a “practical” web application with React and functional programming in JavaScript.

In 2 lists

Hey Underscore, You're Doing It Wrong!

Underscore.js claims to be a functional programming library, but is it really?

In 2 lists

Functional programming patterns for the non-mathematician

Learn about practical use cases for functors, applicatives, and monads.

In 2 lists

Pure JavaScript

Christian Johansen will show you how you can significantly up your game by leaving loops behind and embracing functions as the primary unit of abstraction.

Functional programming in JavaScript

A series by Mattias Petter Johansson, from the youtube channel FunFunFunction, that is specifically about popularization of functional programming in JavaScript.

Functional Programming in TypeScript

Discover functional programming with Typescript and create a library like fp-ts alongside Sahand Javid in this beginner-friendly YouTube playlist.

In 3 lists

Anjana Vakil: Learning Functional Programming with JavaScript - JSUnconf 2016

A simple and understandable introduction of functional proramming in javascript.

In 4 lists

Functional Programming Basics In ES6

A complete introduction to functional programming in javascript made it easy by ES6.

JavaScript Programmers Should Learn Algebraic Data Types -- May 2018 -- UtahJS Lehi

Seth House explains how ADTs (Algebraic Data Types) can be useful to JavaScript developers.

Resources >Examples and Exercises

FPJS-Class

Functional Programming learned through JavaScript.

functional-javascript-workshop

The goal of this workshop is to create realistic problems that can be solved using terse, vanilla, idiomatic JavaScript to teach fundamental functional programming features of JavaScript.

In 3 lists

functional-frontend-architecture

A functional frontend framework. Based on Ramda + union-type-js + Flyd + Snabbdom

In 2 lists

cube-composer

A puzzle game inspired by functional programming.

In 3 lists

FP Youtube Search

YouTube search app with ReactJS, Redux, and FP concepts

Hardcore Functional Programming in JavaScript

Learn to apply techniques from the forefront of computer science research to solve practical problems in Javascript. Discover functional programming and see it demonstrated step-by-step with how to build an example web app using abstract interfaces like Monads, Functors, Monoids and Applicatives.…

Escape from Callback Mountain

Design & refactoring tips for Promise-based Functional JavaScript. Key benefits include better readability, testability, and reusability. MIT.

Learn Rx

A series of interactive exercises introducing five basic ingredients of functional (reactive) programming: the map, filter, concatAll, reduce, and zip functions.

In 3 lists

Holdem Evaluator

Yet another Holdem Evaluator with Ramda functional style

Community >Talk

Functional Programming Slack channel

Community with a friendly channel for JavaScript as well as many other channels about functional programming in general.

See category
94

Awesome Rust

rust-unofficial/awesome-rust

A curated list of Rust code and resources.

Fresh★ 60k1833 entriesPushed today
94

Awesome Mac

jaywcjlove/awesome-mac

 This project is dedicated to collecting high-quality macOS software and organizing them systematically by different categories for easy search and use.

Fresh★ 115k1316 entriesPushed today
94

Awesome Python

vinta/awesome-python

Curated Python frameworks, libraries and resources.

Fresh★ 324k504 entriesPushed today
94

Awesome C++

fffaraz/awesome-cpp

A curated list of awesome C++ (or C) frameworks, libraries, resources, and shiny things. Inspired by awesome-... stuff.

Fresh★ 74k1358 entriesPushed yesterday
94

Awesome Go

avelino/awesome-go

Curated Go frameworks and libraries.

Fresh★ 186k3119 entriesPushed yesterday
94

Awesome PHP

ziadoz/awesome-php

A curated list of amazingly awesome PHP libraries, resources and shiny things.

Fresh★ 33k87 entriesPushed 2 days ago