Awesome Lists

awesome-fp-js

by stoeffel

awesome listpushed almost 2 years ago

sunglasses A curated list of awesome functional programming stuff in js

AI summary

FP JS library

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

stars
6K
forks
396
watching
192
awesome lists
6
entries
185
View on GitHub

Embed the badge

Show how many awesome lists link to your project. The count updates automatically.

Awesome Lists badge
Markdown
[![Awesome Lists Badge](https://awesome.facts.dev/shield/stoeffel/awesome-fp-js/links.svg)](https://awesome.facts.dev/awesome/stoeffel/awesome-fp-js)
HTML
<a href="https://awesome.facts.dev/awesome/stoeffel/awesome-fp-js"><img src="https://awesome.facts.dev/shield/stoeffel/awesome-fp-js/links.svg" alt="Awesome Lists Badge" /></a>
Image URL
https://awesome.facts.dev/shield/stoeffel/awesome-fp-js/links.svg

What's in the list

185 links in 12 sections, with live GitHub stats.activeno commit in 2y

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

  • Ramda Adjunct

    is a community-maintained extension of Ramda

  • Ramda-extension

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

  • Rambda

    A faster alternative to Ramda in under 10kB

  • Rambdax

    Extended version of Rambda

  • Folktale

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

  • lodash/fp

    – An instance of with its methods wrapped to produce immutable, auto-curried, iteratee-first, data-last methods. +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

  • 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

  • 1-liners

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

  • 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

  • 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)

  • trifl

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

  • funcy

    – An experiment in adding functional pattern matching to JavaScript

  • 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

  • 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 , supporting RFC (Remote Function Call). +TS

  • Ferrum

    – 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

    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

  • 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

  • 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

    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

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

  • hyogwa

    Natural 🌿 effect system that fits TypeScript; Write codes as you write

  • 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

Libraries / Data Structures

  • Icepick

    Utilities for treating frozen JavaScript objects as persistent immutable collections

  • Immutable.js

    – Immutable persistent data collections

  • Immer

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

  • Mori

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

  • Baobab

    – persistent and optionally immutable data tree with cursors

  • immutable-sequence.js

    – High performance implementation of Immutable Sequence in JavaScript, based on

  • 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

  • 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

  • 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

  • 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

Libraries / Algebraic Data Types

  • Fantasy Land

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

  • Static Land

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

  • immutable-ext

    – FantasyLand extensions for

  • daggy

    – Library for creating tagged constructors

  • Sanctuary

    – 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

    – A small JavaScript library for defining and using union types

  • freeky

    – A collection of Free monads

  • Fluture

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

  • fantasy-combinators

    – Common combinators

  • fantasy-birds

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

  • 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

  • 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

  • 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 and . Tifi is inspired by the OCaml/Reason utilities for the option data type. +CT, +TS

  • sweet-monads

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

Libraries / Lenses

  • lenses

    – Composable style lenses

  • optics

    – Profunctor optics (Lens, Prism, iso)

  • ramda-lens

    – Lens library built on Ramda

  • fantasy-lenses

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

  • nanoscope

    – Lenses with dotty support

  • partial.lenses

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

  • shades

    – A lodash-inspired lens-like library for Javascript

Functional Languages that Compile to JavaScript

  • ClojureScript

    – 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

    – to JavaScript compiler, based on GHC

  • ElixirScript

    – 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

    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

  • Gleam

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

Programming Tools

  • eslint-plugin-fp

    ESLint rules for functional programming

  • 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

  • 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 (2016)

  • 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

  • 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

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

Resources / Articles

Resources / Videos

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

  • functional-frontend-architecture

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

  • cube-composer

    – A puzzle game inspired by functional programming

  • 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 , , , , and functions

  • Holdem Evaluator

    Yet another Holdem Evaluator with Ramda functional style

Community / Talk

More related projects

Add a GitHub project

Missing a project or an awesome list? Paste its GitHub URL and we fetch it right away.