Top 23 Functional Open-Source Projects

  • GitHub repo RxSwift

    Reactive Programming in Swift

    Project mention: DispatchGroup in Swift | dev.to | 2021-03-06

    We have defined what async code is, and two basic issues we could have when working with it: running tasks serially and in parallel. For running tasks in parallel we saw that DispatchGroup can be a simple solution for that. I will recommend using a library for this though. What I taught you here is basic async knowledge, but in real world scenarios, this won't be this straightforward, so using a battle tested library is always an advantage when working in production. I personally recommend using Apple's Combine if you can (it is supported in iOS 13 and above) or using RxSwift otherwise Finally, I can't finish this article without mentioning async-await. With async-await, probably all of this discussion will be a thing of the past. It lets us write async code that can be written like sync code. You can see the proposal (already implemented and that will be released in the next version of swift) here, and even try it in your code following a tutorial like this one.

  • GitHub repo fantasy-land

    Specification for interoperability of common algebraic structures in JavaScript

    Project mention: Using fp-ts and newtype-ts: implementation | dev.to | 2021-03-24

    Some data types are not traversable (e.g. IO), so the traverse function may not be available. Here, Option is traversable and E.either is an instance of Applicative, so we can use it to transform an Option> into a Parser>.

  • GitHub repo cowboy

    Small, fast, modern HTTP server for Erlang/OTP.

    Project mention: Ti hogy implementálnátok a https://vakcinareg.neak.gov.hu/regisztracio oldalt? | reddit.com/r/programmingHungary | 2021-03-25
  • GitHub repo jsonnet

    Jsonnet - The data templating language

    Project mention: The Norway Problem | news.ycombinator.com | 2021-04-03

    For hand-writing I love jsonnet, which produces JSON, is much more convenient to write, and has some templating, functions etc. https://jsonnet.org/

    You wouldn't serialize data structures to jsonnet though, you'd just generate JSON.

  • GitHub repo bubbletea

    A powerful little TUI framework 🏗

    Project mention: Lip Gloss - a CSS like layout library for your terminal apps | reddit.com/r/golang | 2021-04-03

    If you use Lip Gloss with Bubble Tea, then yes! Specifically, check out the viewport component in Bubbles, a Bubble Tea component library, for scrollable views.

  • GitHub repo enso

    Hybrid visual and textual functional programming.

    Project mention: Enso 2.0 Syntax Reference is out! | reddit.com/r/ProgrammingLanguages | 2021-04-27

    Hmm, the new version should be running fast. It runs with 60 FPS on my MacBook. Would you be so nice and help us debug the issues you have? Also, are you sure you are using Enso 2.0, and not the old Luna release? If so, would you be so nice and describe your hardware setup, how you run it, and the problems you experience here? https://github.com/enso-org/enso/issues

  • GitHub repo Carp

    A statically typed lisp, without a GC, for real-time applications.

    Project mention: uLisp | news.ycombinator.com | 2021-05-04

    Another commenter already mentioned Gambit Scheme. That provides for inline C and therefore very easy interop with external libraries. It still has a runtime and GC though - those might pose a problem depending on your platform and task.

    Ferret (https://github.com/nakkaya/ferret) and Carp (https://github.com/carp-lang/Carp) are both Lisp-like low level languages. Both seem to be fairly experimental in nature though.

    > anything but C

    Taking you literally, Rust and D can both compile for bare metal. D in particular has a "Better C" subset. (https://dlang.org/spec/betterc.html)

    In the same vein, Terra is a C like language (manual memory management) that you metaprogram with Lua. (https://github.com/terralang/terra)

    Taking you very literally, Forth is also an option.

  • GitHub repo pampy

    Pampy: The Pattern Matching for Python you always dreamed of.

    Project mention: why is scala considered hard? | reddit.com/r/scala | 2020-12-24

    What about some Python's alternative then? https://github.com/santinic/pampy https://pythonawesome.com/pampy-the-pattern-matching-for-python-you-always-dreamed-of/

  • GitHub repo Coconut

    Simple, elegant, Pythonic functional programming.

    Project mention: Toolz: A functional standard library for Python | news.ycombinator.com | 2021-01-21

    This is one of the biggest reasons I really like Coconut: https://github.com/evhub/coconut

  • GitHub repo gluon

    A static, type inferred and embeddable language written in Rust.

    Project mention: Gluon | news.ycombinator.com | 2021-03-28
  • GitHub repo tonal

    A functional music theory library for Javascript

    Project mention: Do you want to learn music theory? | reddit.com/r/telecaster | 2021-02-11

    For the music theory stuff I'm using TonalJS along with my own extensions

  • GitHub repo umbrella

    ⛱ Broadly scoped ecosystem & mono-repository of 151+ TypeScript projects for functional, data driven development

    Project mention: Ask HN: What was the biggest contributor to your happiness in the past year? | news.ycombinator.com | 2021-03-21

    This a is a really wide field. Basically its starts with one of the standard algorithms, like and l-system, a voronoi diagram, or simple combination of sin and cos to draw shapes. Have a look at thi-ng[1], just as example for a library that has implemented a lot of this kind of algorithms. The next step in my process is to think about how to destroy this forms as most of them are used a lot in this field and become boring. Using perlin noise as input to arguments of the algorithms is one way to do this. The other part is to make most all of the input variables easily changeable as most of the time the whole process is like writing the program and then spend a lot of time adapt the parameters until you get some interesting output. So in the end I have a small Svelte app, using Svelte only cause the data binding for the inputs so simple, which has tons of sliders that renders an SVG that can be saved in the end.

    [1]https://github.com/thi-ng/umbrella

  • GitHub repo Eclipse Collections

    Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.

  • GitHub repo Router5

    Flexible and powerful universal routing solution

  • GitHub repo Pyrsistent

    Persistent/Immutable/Functional data structures for Python

    Project mention: What is the proper way to create a new copy for list, dictionary, tuples, and array | reddit.com/r/Python | 2021-04-28

    This is normal for some functional languages, since by definition they should prohibit assignment and hence mutation. But you can also achieve a similar (not the same) effect in python, using libraries like pyrsistent (https://github.com/tobgu/pyrsistent/)

  • GitHub repo oh

    A new Unix shell.

    Project mention: Oh, a New Unix Shell | news.ycombinator.com | 2021-03-02
  • GitHub repo Suave.IO

    Suave is a simple web development F# library providing a lightweight web server and a set of combinators to manipulate route flow and task composition.

  • GitHub repo PyPika

    PyPika is a python SQL query builder that exposes the full richness of the SQL language using a syntax that reflects the resulting query. PyPika excels at all sorts of SQL queries but is especially useful for data analysis.

    Project mention: Migrating to SQLAlchemy 2.0 | news.ycombinator.com | 2021-02-18

    There is a middle-ground between writing SQL statement strings in your code, and a full-blown ORM: query builders. At least in my experience with small to medium projects, these have far fewer footguns while keeping the code composable and readable. Here's one for Python: https://github.com/kayak/pypika

  • GitHub repo Siler

    ⚡ Flat-files and plain-old PHP functions rockin'on as a set of general purpose high-level abstractions.

  • GitHub repo remeda

    A utility library for JavaScript and TypeScript.

    Project mention: Avoiding legacy systems | dev.to | 2020-12-28

    The good news is: Not all is lost. The messages are still there if you take a look at the commits of the PR. It's just a little harder to backtrack. Here is one example of a commit I made that has tons of information (even with a link!) that got squashed away.

  • GitHub repo gun

    HTTP/1.1, HTTP/2 and Websocket client for Erlang/OTP. (by ninenines)

  • GitHub repo Result

    The modelling for success/failure of operations in Kotlin (by kittinunf)

  • GitHub repo meta-typing

    📚 Functions and algorithms implemented purely with TypeScript's type system

    Project mention: TypeScripts Type System is Turing Complete | reddit.com/r/programming | 2021-04-18

    Here's another repository demonstrating functions and algorithms implemented solely using TypeScript's type system: https://github.com/ronami/meta-typing

NOTE: The open source projects on this list are ordered by number of github stars. The number of mentions indicates repo mentiontions in the last 12 Months or since we started tracking (Dec 2020). The latest post mention was on 2021-05-04.

Index

What are some of the best open-source Functional projects? This list will help you:

Project Stars
1 RxSwift 20,065
2 fantasy-land 8,830
3 cowboy 6,309
4 jsonnet 4,776
5 bubbletea 4,728
6 enso 4,496
7 Carp 3,912
8 pampy 3,370
9 Coconut 3,183
10 gluon 2,302
11 tonal 1,990
12 umbrella 1,833
13 Eclipse Collections 1,687
14 Router5 1,681
15 Pyrsistent 1,538
16 oh 1,218
17 Suave.IO 1,203
18 PyPika 1,197
19 Siler 1,072
20 remeda 794
21 gun 730
22 Result 716
23 meta-typing 662