awesome-fp-js

FP JS library

A curated list of resources and libraries for writing programs in a functional programming style in JavaScript

sunglasses A curated list of awesome functional programming stuff in js

GitHub

6k stars
192 watching
396 forks
last commit: 9 days ago
Linked from 6 awesome lists


Awesome FP JS / Libraries

Ramda 23,841 8 days ago – 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
Ramda Adjunct 683 5 days ago is a community-maintained extension of Ramda
Ramda-extension 167 over 1 year ago is set of utility point-free functions composed only from Ramda functions
Rambda 1,663 about 6 hours ago A faster alternative to Ramda in under 10kB
Rambdax 221 3 months ago Extended version of Rambda
Folktale – A standard library for functional programming in JavaScript. Typescript support expected mid-2020. -TS
lodash/fp 59,921 about 2 months ago – An instance of with its methods wrapped to produce immutable, auto-curried, iteratee-first, data-last methods. +TS
functional.js 223 almost 8 years ago – A lightweight functional JavaScript library that facilitates currying and point-free / tacit programming
101 1,550 almost 3 years ago – A modern and modular JavaScript utility library made to work well with vanilla JavaScript methods. -TS
fnuc 16 almost 9 years ago – A functional library for CoffeeScript (and JavaScript) to facilitate functional composition and higher order functions
barely-functional 107 about 7 years ago – A tiny (2.7kb) functional programming library using native ES5/6 operations. -TS
bluebird-promisell 44 almost 7 years ago A practical functional programming library for promises
prelude.ls – A functionally oriented utility library somewhat based off of Haskell's Prelude module. -TS
preludejs 100 over 1 year ago Hardcore Functional Programming for JavaScript. -TS
1-liners 793 over 1 year ago – Functional tools that couldn’t be simpler. A dead simple functional utility belt, hand-crafted with love and attention. -TS
fn-curry 5 almost 11 years ago – A simple function to curry a function
curry 85 about 5 years ago – Curry your functions using function bind syntax
compose-function 56 about 5 years ago – Compose a new function from smaller functions
functionize 49 over 9 years ago – A collection of functions which aid in making non-functional libraries functional
lambdajs 142 over 10 years ago – The full ECMAScript API done a functional way
fp-dom – Making the DOM functional
react-on-lambda 264 7 months ago Replace JSX in React with functions (currying, compositions and etc)
trifl 36 over 7 years ago – A functional user interface library with unidirectional dataflow and a virtual dom
funcy 247 over 6 years ago – An experiment in adding functional pattern matching to JavaScript
date-fp 121 almost 5 years ago – 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 1,624 about 2 months ago – An immutable date and time library that provides a simple, domain-driven and clean API based on the ISO8601 calendar
_part_ 41 almost 11 years ago – A micro library that encourages functional programming by making native methods available as partially applied functions
claire 79 over 10 years ago – A property-based testing library for clearly specifying code invariants and behaviour
FPO.js 447 over 2 years ago – FP library for JavaScript by Kyle Simpson (aka getify). Supports named-argument style methods
Javascript Parser Combinator 145 6 months ago – Javascript parser combinator implementation inspired by the Haskell's Parsec
fun-task 373 over 2 years ago – 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 3,493 almost 2 years ago – 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
zen-signals 53 almost 2 years ago – ☯ The simplest signal library possible
funfix 632 6 months ago – Funfix is a library of type classes and data types for Functional Programming in JavaScript, TypeScript and Flow. +CT, +TS
pico-lambda 71 about 7 years ago Arrays, Strings and things the functional way. A 640b functional library based on native methods. -TS
pareto-js 261 about 4 years ago An extremely small, intuitive and fast functional utility library for JavaScript -TS
fpEs 43 about 1 year ago 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 147 1 day ago Grid Computing Framework, Network & Thread extension of , supporting RFC (Remote Function Call). +TS
Ferrum 519 18 days ago – Iterator library with support for objects as iterables, lazy evaulation and ; implements Traits (from Rust)/Type Classes (from Haskell) in JS. -TS
fp-ts Typed functional programming in TypeScript. +CT, +TS
iter-tools 170 12 months ago 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 994 7 months ago 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 277 2 days ago 🏞 [a]synchronous functional syntax
rocket-pipes 25 6 months ago Powerful pipes, that chain Promise and ADT like Maybe or Either from popular FP libraries. +TS
omg-curry 137 almost 4 years ago Comprehensive Curry Library with Operator Curry, Curry from functions, Decurry and Infifnite Curries
lfi 234 7 days ago A Lazy Functional Iteration Library Supporting Sync, Async, and Concurrent Iteration
ts-multimethod 4 about 3 years ago TypeScript multimethods inspired by Clojure multimethods. +TS
ts-fp-di 4 about 2 months ago Tiny TypeScript functional dependency injection, based on Node.js AsyncLocalStorage. +TS
effect-ts 7,764 about 17 hours ago – A Fully-fledged functional effect system for typescript with a rich standard library. +TS
qio 74 over 2 years ago – A type-safe, functional, performant, lawful, composable data structure that solves practical problems of effect-full code in node and browser. +TS
Ditox.js 93 5 months ago Powerful dependency injection container for building modular apps. +TS
RxEffects 36 5 months ago Reactive state and effect management with RxJS. +TS
fxts 937 8 days ago Lazy evaluation and concurrency. +TS
ts-belt Fast, modern, and practical utility library for FP in TypeScript. (Uses a data-first approach like remeda, but is than remeda, ramda, rambda, and lodash/fp.)
fp-multik JS/TS lightweight value-multimethod util
true-myth 1,030 7 days ago A library for safe, idiomatic null and error handling in TypeScript, with and types, supporting both a functional style and a more traditional method-call style
ts-pattern 12,498 about 1 month ago The exhaustive Pattern Matching library for TypeScript, with smart type inference. Pattern Matching is a code-branching technique coming from FP languages
hyogwa 58 3 months ago Natural 🌿 effect system that fits TypeScript; Write codes as you write
Verticalize 301 6 months ago Super lightweight function that looks and behaves like a pipe operator
PureEval 37 9 months ago A powerful JavaScript functional programming toolset, including utility functions and abstract data structures
context-fp 2 6 months ago Microscopic functional programming context aka dependency injection. +TS
klubok 1 9 days ago Pipes with easy mocking, intended for huge amount of unit tests. +TS

Awesome FP JS / Libraries / Data Structures

Icepick 421 over 3 years ago Utilities for treating frozen JavaScript objects as persistent immutable collections
Immutable.js 32,970 14 days ago – Immutable persistent data collections
Immer 27,762 3 months ago – Immer is a tiny package for immutable state based on copy-on-write mechanism. +TS
Mori 3,385 over 4 years ago – ClojureScript’s persistent data structures and supporting API from the comfort of vanilla JavaScript
Baobab 3,153 over 2 years ago – persistent and optionally immutable data tree with cursors
immutable-sequence.js 16 over 9 years ago – High performance implementation of Immutable Sequence in JavaScript, based on
Timm – Immutability helpers with fast reads and acceptable writes
Lazy.js 6,006 over 4 years ago – 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
DerivableJS 515 over 6 years ago – 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 103 2 days ago – Library for creating and manipulating lazy iterables using the ES2015 iteration protocols
collectable 271 over 1 year ago – Super high-performance immutable data structures for modern JavaScript and TypeScript applications. +TS
List 1,651 11 months ago An extremely fast immutable list with a comprehensive functional API. Designed to
prelude.ts 377 9 months ago Immutable persistent collections, functional constructs such as Option and Either, and combinators. Implemented in Typescript but supports javascript too. +CT, +TS
TSTL 604 8 months ago C++ STL (Standard Template Library) is implemented in TypeScript. STL Containers, iterators, algorithms and functors, that following functional programming rule, are provided. +TS

Awesome FP JS / Libraries / Algebraic Data Types

Fantasy Land 10,132 23 days ago – Not a library, but a specification of the Monad laws for libraries to follow
Static Land 772 about 5 years ago – Specification similar to Fantasy Land but based on static methods rather than instance methods
immutable-ext 489 almost 6 years ago – FantasyLand extensions for
daggy 701 over 3 years ago – Library for creating tagged constructors
Sanctuary 3,044 23 days ago – Sanctuary makes it possible to write safe code without null checks. +CT, +TS
monet.js – A library that assists functional programming by providing a rich set of Monads and other useful functions. +CT, +TS
union-type 478 over 5 years ago – A small JavaScript library for defining and using union types
freeky 176 over 6 years ago – A collection of Free monads
Fluture 2,484 7 months ago – A Future library with included control utilities, high performance and great error messages
fantasy-combinators 66 almost 9 years ago – Common combinators
fantasy-birds 91 about 8 years ago – Port of the Haskell package Data.Aviary.Birds. Everything for your combinatory needs
crocks 1,591 almost 2 years ago – 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
kudo-js 23 12 days ago 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 1,533 2 days ago Functional programming library for TypeScript focusing on ADTs. +CT, +TS
MojiScript 149 over 1 year ago an async-first, opinionated, and functional language designed to have 100% compatibility with JavaScript engines
Pratica 468 6 months ago 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 and . Tifi is inspired by the OCaml/Reason utilities for the option data type. +CT, +TS
sweet-monads 346 15 days ago A collection of popular monads (such as and ) and the lazy iterator

Awesome FP JS / Libraries / Lenses

lenses 214 about 9 years ago – Composable style lenses
optics 87 over 8 years ago – Profunctor optics (Lens, Prism, iso)
ramda-lens 184 over 7 years ago – Lens library built on Ramda
fantasy-lenses 109 almost 9 years ago – Composable, immutable getters and setters. (Profunctor lenses WIP)
nanoscope 177 almost 8 years ago – Lenses with dotty support
partial.lenses 918 about 3 years ago – Partial lenses is a comprehensive, high-performance optics library for JavaScript
shades 415 6 months ago – A lodash-inspired lens-like library for Javascript

Awesome FP JS / Functional Languages that Compile to JavaScript

ClojureScript 9,241 1 day ago – Compiles , a hosted Lisp with immutable persistent data structures, to JavaScript
Elm – A type-safe functional programming language for declaratively creating web browser-based graphical user interfaces. Implemented in Haskell
Fable Compiles to readable JavaScript
PureScript – A small strongly typed programming language that compiles to JavaScript
Idris – A general purpose pure functional programming language with dependent types
GHCJS 2,606 almost 2 years ago – to JavaScript compiler, based on GHC
ElixirScript 1,562 over 5 years ago – Compiles a subset of , a dynamic, functional language designed for building scalable and maintainable applications, to JavaScript
Js_of_ocaml – Compiles bytecode to JavaScript, making it possible to run OCaml programs in the browser
Reason – Reason is a new interface to OCaml, a highly expressive dialect of the ML language featuring type inference and static type checking
ReScript – (previously known as ) ReScript is a type-safe language that compiles to the highest quality of clean, readable and performant JavaScript code
Scala.js – Compiles to JavaScript
LiveScript – LiveScript has a straightforward mapping to JavaScript and allows you to write expressive code devoid of repetitive boilerplate
Quack 323 about 4 years ago A multi-paradigm programming language with gradual and duck typing that targets PHP and JS
ion 80 about 7 years ago no BS JS
RamdaScript 132 almost 7 years ago A Lisp that compiles to opinionated JavaScript on top of RamdaJS
RacketScript 13 over 3 years ago – 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
Gleam Gleam is a typed, functional language that compiles to Erlang and JavaScript

Awesome FP JS / Programming Tools

eslint-plugin-fp 968 almost 4 years ago ESLint rules for functional programming
4.5 21 almost 8 years ago – 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 198 about 2 years ago – Runtime type checking for JS with Hindley Milner signatures
ftor 44 over 6 years ago 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

Awesome FP JS / Resources / Books

Professor Frisby’s Mostly Adequate Guide to Functional Programming 23,450 3 months ago – 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 (2016)
Functional-Light JavaScript 16,647 11 months ago – 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
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 (2016)
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 Atencio (2016)
Eloquent JavaScript . A modern introduction to programming using JavaScript. By Marijn Haverbeke (2014)
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 (2013)
Grokking Simplicity teaches functional programming from first principles. It uses JavaScript for all code examples and it uses real-world scenarios. By (2019)
scriptum 383 7 days ago a no-frills functional programming library and a online course based on it

Awesome FP JS / 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
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
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
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
Favoring Curry Practical applications of currying using Ramda
Functional Mumbo Jumbo – ADTs – A beginner-friendly introduction to Algebraic Data Types
JavaScript and Type Thinking – Learn to reason about your JavaScript code with . 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
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 composition
Monads in JavaScript – An introduction to the Monad design pattern in JavaScript
A Monad in Practicality: First-Class Failures – A walk through some practical use cases for specific monadic structures in JavaScript: use the monad to handle simple failure cases and model more complex scenarios with the monad or the applicative functor
Functional programming – Many articles on various aspects of functional programming in JavaScript by Gleb Bahmutov
Functional Programming Jargon 18,612 about 1 year ago – Jargon from the functional programming world explained in JavaScript
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
Functional Programming for JavaScript People A complete introduction to functional programming patterns by Chet Corcos with a lot of javascript examples
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
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 ➿ 1,076 about 2 months ago 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

Awesome FP JS / Resources / Videos

Classroom Coding with Prof. Frisby – A series that builds a “practical” web application with React and functional programming in JavaScript
Hey Underscore, You're Doing It Wrong! – Underscore.js claims to be a functional programming library, but is it really?
Functional programming patterns for the non-mathematician – Learn about practical use cases for functors, applicatives, and monads
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
Anjana Vakil: Learning Functional Programming with JavaScript - JSUnconf 2016 A simple and understandable introduction of functional proramming in javascript
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

Awesome FP JS / Resources / Examples and Exercises

FPJS-Class 93 over 9 years ago – Functional Programming learned through JavaScript
functional-javascript-workshop 2,054 about 4 years ago – 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
functional-frontend-architecture 1,445 over 5 years ago – A functional frontend framework. Based on Ramda + union-type-js + Flyd + Snabbdom
cube-composer 2,004 almost 2 years ago – A puzzle game inspired by functional programming
FP Youtube Search 57 almost 8 years ago – 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 258 almost 2 years ago 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 , , , , and functions
Holdem Evaluator Yet another Holdem Evaluator with Ramda functional style
Awesome FRP JS 284 about 5 years ago – A curated list of awesome (functional) reactive programming stuff in JavaScript
lucasviola/Awesome Functional Programming 964 8 months ago – Awesome resources on functional programming theory and learning materials
xgrommx/Awesome Functional Programming 3,465 11 months ago – A ton of articles on functional programming, as well as a huge list of functional libraries for many programming languages
Functional Programming Resources In JavaScript 306 about 4 years ago
tk-learning-center/Functional Programming Learning Path 991 about 1 month ago A Learning Path for Functional Programming

Awesome FP JS / Community / Talk

Functional Programming Slack channel – Community with a friendly channel for JavaScript as well as many other channels about functional programming in general

Backlinks from these awesome lists:

More related projects: