Awesome Lists

awesome-ocaml

by ocaml-community

awesome listpushed almost 2 years ago

A curated collection of awesome OCaml tools, frameworks, libraries and articles.

AI summary

OCaml toolkit

A curated collection of resources and tools for OCaml developers

stars
2.8K
forks
167
watching
126
awesome lists
8
entries
337
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/ocaml-community/awesome-ocaml/links.svg)](https://awesome.facts.dev/awesome/ocaml-community/awesome-ocaml)
HTML
<a href="https://awesome.facts.dev/awesome/ocaml-community/awesome-ocaml"><img src="https://awesome.facts.dev/shield/ocaml-community/awesome-ocaml/links.svg" alt="Awesome Lists Badge" /></a>
Image URL
https://awesome.facts.dev/shield/ocaml-community/awesome-ocaml/links.svg

What's in the list

337 links in 61 sections, with live GitHub stats.activeno commit in 2y

Community

Algorithms and Data Structures

  • OCamlgraph

    – A generic graph library for OCaml

  • ods

    – A large collection of data structures and algorithms for OCaml

  • combine

    – OCaml library for combinatorics

  • Decompress

    A pure OCaml implementation of Zlib

  • Ke

    Fast implementation of queue (FIFO) in OCaml

  • Duff

    Implementation of Rabin's fingerprint and delta compression by P. MacDonald in OCaml (same as

  • ORaft

    Library of implemented in OCaml

  • ODiff

    – Library of implemented in OCaml and ReasonML

Application Libraries

  • Batteries Included

    – A community-maintained foundation library for your OCaml projects

  • Cmdliner

    – Declarative definition of command line interfaces for OCaml

  • Core

    – Jane Street Capital's full-fledged standard library overlay. A portable subset of Core is also available:

  • Base

    Jane Street Capital's dependency-free, quick-compiling, fully-portable across any environment that can run OCaml code standard library

  • React

    – React is an OCaml module for functional reactive programming (FRP). It provides support for programs with time-varying values, declarative events, and signals

  • Minicli

    – Minimalist library for command-line parsing

  • easy-format

    – Pretty-printing library for OCaml

  • ocaml-rpc

    – Light library to deal with RPCs in OCaml

  • ocaml-containers

    – A lightweight, modular standard library extension, string library, and interfaces to various libraries (bigarrays, Unix, etc.) BSD license

Benchmarking

  • core_bench

    – Micro-benchmarking library for OCaml by Jane Street.   -

  • benchmark

    – Benchmarking functions for measuring the run-time of functions using latency or throughput

Blogs

Books

  • More OCaml: Algorithms, Methods, and Diversions

    – In More OCaml, John Whitington takes a meandering tour of functional programming with OCaml, introducing various language features and describing some classic algorithms. The book ends with a large-scale example dealing with the production of PDF files. There are questions for each chapter, along with worked-out answers and hints

  • How to Think Like a (Functional) Programmer

    by Allen Downey and Nicholas Monje – How to Think Like a Computer Scientist is an introductory programming textbook based on the OCaml language. It is a modified version of Think Python by Allen Downey. It is intended for newcomers to programming and also those who know some programming but want to learn programming in the function-oriented paradigm, or those who simply want to learn OCaml

  • OCaml from the Very Beginning

    by J. Whitington - OCaml from the Very Beginning will appeal both to new programmers and experienced programmers eager to explore functional languages such as OCaml

  • Pearls of Functional Algorithm Design

    by Richard Bird - It summarizes 30 hard algorithmic problems in the function programming world. Although it is for Haskell, the algorithm problems are very interesting, and trying to solve them in OCaml also helps the thinking of functional programming. Partial solutions in OCaml are

  • Real World OCaml

    by Y. Minsky, A. Madhavapeddy, and J. Hickey - Functional Programming for the masses

  • Unix System Programming in OCaml

    by X. Leroy and D. Rémy – Introduction to Unix Systems Programming, with an emphasis on communications between processes

  • Using, Understanding, and Unraveling OCaml

    – This book describes both the OCaml language and the theoretical grounds behind its powerful type system

  • Purely Functional Data Structures

    This is the first or only book focus on various data structures in FP world. A must-read one

  • OCaml Programming: Correct + Efficient + Beautiful

    Textbook on Functional Programming and Data Structures in OCaml - by Michael R. Clarkson et al

Code Analysis and Linters

  • Mascot

    Mascot is a style-checker for OCaml sources

  • pfff

    – pfff is a set of tools and APIs to perform some static analysis, dynamic analysis, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code

  • Infer

    Infer is a static analyzer for Java, C and Objective-C

  • Frama-C

    Frama-C is a static analysis and formal proof framework for C and C++

  • flow

    flow is a static type checker for JavaScript

  • SLAyer

    SLAyer is an automatic formal verification tool that uses separation logic to verify memory safety of C programs

  • MemCAD

    MemCAD is an abstract interpreter for shape analysis. MemCAD can verify C programs manipulating complex data structures

  • Camelot

    Camelot is a modular and fully configurable OCaml linter and stylechecker

  • coq-of-ocaml

    Translator from OCaml to Coq to formally verify OCaml code

  • MOPSA

    MOPSA is a generic framework for building sound static analyzers based on the theory of abstract interpretation

Program analysis

  • BAP

    BAP is a reverse engineering and program analysis platform that targets binary programs

  • BinCat

    BinCat is a binary code static analysis toolkit

  • cwe_checker

    cwe_checker finds vulnerable patterns in binary executables

  • Owi

    Owi is a toolchain for working with WebAssembly (Wasm) in OCaml, featuring a powerful, parallel symbolic execution engine for Wasm. It also provides frontends for compiling and analyzing C and Rust programs

  • Smt.ml

    Smt.ml is a frontend OCaml library that interfaces with multiple SMT solvers, enabling seamless integration of solvers like Z3, cvc5, Colibri2, Bitwuzla, and Alt-Ergo within OCaml programs

Compilers and Compiler Tools

  • Opal

    – Self-contained monadic parser combinators for OCaml

  • Sedlex

    is a modern, encoding-agnostic (read: Unicode-supporting) lexer generator (the ppx-based successor to .)

  • Menhir

    – Menhir is a LR(1) parser generator for OCaml

Compilers and Compiler Tools / Menhir

  • ocaml-parsing

    See for a clearer example of using Menhir and Sedlex to produce a useful parser,

  • Obelisk

    ... and , a neat project to produce readable LaTeX, HTML, or plain-text EBNF-style documentation for your grammar

Compilers and Compiler Tools

Concurrency / :

Databases

  • Dbm

    — A binding to the NDBM/GDBM Unix "databases"

  • Mongo.ml

    – An OCaml driver for Mongodb

  • PG'OCaml

    — A type-safe interface to PostgreSQL in pure OCaml

Databases / PG'OCaml

  • ppx_pgsql

    – A syntax extension for embedded SQL queries using PG'OCaml

Databases

  • PostgreSQL-OCaml

    — An interface to PostgreSQL through the C API ( )

  • SQLite3

    — OCaml bindings to the SQLite3 database

  • Sqlite3EZ

    — Thin wrapper for SQLite3 with a simplified interface

  • ocaml-redis

    – Redis bindings for OCaml

  • mysql

    – Bindings to libmysqlclient for interacting with MySQL databases

  • pgx

    – A pure OCaml PostgreSQL client library

  • mysql_protocol

    – Implementation of MySQL Protocol with the Bitstring library

  • Irmin

    — A distributed database that follows the same design principles as Git

  • Obigstore

    — A database with BigTable-like data model atop LevelDB

  • RunOrg

    It is a WIP database server written in OCaml

  • dokeysto

    dumb OCaml key-value store, string keys and string values. Optional on-the-fly LZ4 compression of values or tokyocabinet backend

  • Sequoia

    Sequoia is a type-safe query builder for MySQL/MariaDB and PostgreSQL

  • Macaque

    — Macaque is a library for safe and flexible database queries using comprehensions on top of PG'OCaml

  • ORM

    — ORM for SQLite

  • Caqti

    Cooperative-threaded access to relational data

Databases / :

Datetime

Developer Tools

  • ctypes

    – Library for binding to C libraries using pure OCaml

  • ocaml-main-program-in-c

    – Example build system for making mixed C/Ocaml binaries where the main program is in C

  • Py.ml

    OCaml bindings for Python

  • ocaml-lsp

    An LSP language server for OCaml that integrates with any editor that understands LSP like , Vim and Emacs

  • merlin

    – Context sensitive completion for OCaml in Vim and Emacs

  • tuareg

    OCaml mode for Emacs that can run the toplevel and the debugger within Emacs

  • opam-switch-mode

    Minor mode for Emacs that extends Tuareg and Merlin with menus to change or reset the opam switch in the ambient Emacs session

  • merlin-eldoc

    – Emacs package to provide merlin's features through eldoc

  • vscode-ocaml

    – extension that provides OCaml language support for

  • OCaml Debugger

    – extension that provides OCaml Debugger for

  • Sublime better ocaml

    – Better OCaml mode for Sublime Text

Developer Tools / Sublime better ocaml

Developer Tools

  • ocp-index

    – Easy access to the interface information of installed OCaml libraries. Provides standalone tools like and

Developer Tools / ocp-index

Developer Tools

  • ocp-indent

    – Indentation tool for OCaml, to be used from editors like Emacs and Vim

Developer Tools / ocp-indent

Developer Tools

Exercises and Short Examples

Formal Software Verification

  • Coq

    – Coq is a formal proof management system. It provides a formal language to write mathematical definitions, executable algorithms, and theorems, together with an environment for semi-interactive development of machine-checked proofs

  • Why3

    – Why3 is a platform for deductive program verification. It provides a rich language for specification and programming, called WhyML, and relies on external theorem provers, both automated and interactive, to discharge verification conditions

  • Alt-Ergo

    – Alt-Ergo is an open-source SMT solver dedicated to the proof of mathematical formulas generated in the context of program verification

General

Graphics

  • archimedes

    — 2D plotting library

  • cairo2

    — Binding to Cairo, a 2D Vector Graphics Library. Integrates well with lablgtk

  • Vg

    – Declarative 2D vector graphics for OCaml

  • glMLite

    — OpenGL bindings for OCaml. Provides an (experimental) functional API. ( )

  • lablgl

    — Interface to OpenGL. Integrates well with lablgtk

  • tgls

    — Thin bindings OpenGL 3.{2,3},4.{0,1,2,3,4} and OpenGL ES {2,3}

Internationalization

  • Camomile

    — A Unicode library for OCaml

  • ocaml-m17n

    — Multilingualization for OCaml source code. Allows using Unicode identifiers in OCaml source code

  • Uucd

    — Unicode character database decoder for OCaml

  • Uucp

    — Unicode character properties for OCaml

  • Uunf

    — Unicode text normalization for OCaml

  • Uuseg

    — Unicode text segmentation for OCaml

  • Uutf

    — Non-blocking streaming Unicode codec for OCaml

User Interface

  • lablgtk

    — GTK2 and GTK3 bindings for OCaml with various higher-level facilities to define GUIs

  • lablqml

    – QML Qt5 bindings for OCaml

  • labltk

    — Interface to the Tcl/Tk GUI framework. In the standard distribution for ocaml <= 4.01

  • TSDL

    – Tsdl is an OCaml module providing thin bindings to the cross-platform SDL library

  • Lambda-Term

    – Lambda-Term is a cross-platform library for manipulating the terminal. It provides an abstraction for keys, mouse events, and colors, as well as a set of widgets to write curses-like applications

  • Notty

    Notty is a declarative terminal library for OCaml, structured around the notion of composable images

  • ocaml-linenoise

    Self-contained OCaml bindings to linenoise; easy high-level readline functionality in OCaml

Large Source Code Examples

  • Base

    Standard library for OCaml

  • cil

    C Intermediate Language

  • coq

    formal proof management system

  • frama-c

    platform dedicated to the analysis of source code written in C

  • libguestfs

    library and tools for accessing and modifying virtual machine disk images

  • Liquidsoap

    a swiss-army knife for multimedia streaming, notably used for netradios and webtvs

  • mirage

    library operating system that constructs unikernels for secure, high-performance network applications across a variety of cloud computing and mobile platforms

  • MLDonkey

    cross-platform multi-network peer-to-peer daemon

  • Oni2

    Native, lightweight modal code editor

  • pfff

    an OCaml API to write static analysis, dynamic analysis, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code

  • Tezos

    a self-upgradable Proof of Stake blockchain

  • WHY3

    platform for deductive program verification

  • xen-api

    management stack that configures and controls Xen-enabled hosts and resource pools, and co-ordinates resources within the pool

Logging

  • dolog

    – A dumb OCaml logger

  • Volt

    – A variant of the Bolt OCaml logging tool

  • Logs

    Logs provides a logging infrastructure for OCaml

Machine Learning

Machine Learning / PyTorch bindings

  • Ocaml-NN

    Fully functional monadic implementation of a Neural Network (FCNNs) in OCaml

Machine Learning

Messaging

  • ocaml-zmq

    – ZeroMQ bindings for OCaml with Async and Lwt wrappers

  • onanomsg

    – nanomsg bindings for OCaml

  • Kafka

    – OCaml bindings for Apache Kafka

  • AMQP

    – AMQP client library for Async and Lwt

  • MPI

    – Message Passing Interface bindings for OCaml

  • MQTT

    – OCaml implementation of the MQTT pubsub protocol

  • capnp-ocaml

    – OCaml code generator plugin for the Cap'n Proto serialization framework

Metaprogramming / :

Metrics

  • prometheus

    – OCaml client library for Prometheus monitoring

Mobile Applications / :

Networking / :

  • ocaml-cohttp

    – Very lightweight HTTP server using Lwt or Async

  • ocurl

    – OCaml bindings to libcurl

  • httpaf

    – A high performance, memory efficient, and scalable web server written in OCaml

  • piaf

    Client/server library for HTTP/1.X / HTTP/2 written entirely in OCaml

Networking

  • ocaml-dns

    – A pure OCaml implementation of the DNS protocol

  • fluent-logger

    – Fluentd logger for OCaml

  • charrua-unix

    charrua-unix is a Unix DHCP daemon based on

Online Courses

Package Management

  • OPAM

    – A flexible Git-friendly package manager with multiple compiler support

  • ocamlfind

    — Local OCaml library manager. Used by most of the OCaml ecosystem

  • OCaml for Windows

    opam repository and experimental build for Windows (deprecated since 2021)

  • Diskuv OCaml

    Diskuv OCaml distribution for Windows

  • makorel

    – Release OPAM packages easily

  • esy

    package.json workflow for native development with Reason/OCaml

  • dune

    – A composable and opinionated build system for OCaml (former jbuilder)

  • Oasis

    A tool to integrate a configure, build and install system in your OCaml project. It helps to create standard entry points in your build system and allows external tools to analyse your project easily

Package Management / Oasis

  • oasis2opam

    — Tool to convert OASIS metadata to OPAM package descriptions

Package Management

  • obuild

    – Simple package build system for ocaml

  • ocaml-makefile

    — Easy to use Makefile for small to medium-sized OCaml-projects

  • topkg

    — OPAM-aware packaging system using ocamlbuild

  • Bazel

    OCaml rules for , Google's multi-language and platform build tool

Parallelism

  • Parmap

    — Provides easy-to-use parallel map and fold functions

  • ForkWork

    — A simple library for forking child processes to perform work on multiple cores

  • Functory

    — A distributed computing library which facilitates distributed execution of parallelizable computations in a seamless fashion

  • Rpc.Parallel

    — A library for spawning processes on a cluster of machines, and passing typed messages between them

  • Ocamlnet

    — An enhanced system platform library. Contains the library to compute tasks on as many cores of the machine as needed

  • Nproc

    – Process pool implementation for OCaml

  • Parany

    – Parallelize computation over independent items, even if there is an infinite number of them

  • Sklml

    – Functional parallel skeleton compiler and programming system for OCaml programs

  • SPOC

    Libraries and syntax extensions to offload intensive computations to parallel accelerators (multicore CPUs, GPUs and other accelerators compatible with GPGPU frameworks)

  • Parallelism programming

    from the officiel OCaml manual

  • Awesome multicore OCaml

    . A compilation of resources

Printers helpers

  • Console.log

    Reason's native

  • refl

    , a ppx_deriving-like

  • lrt

    , another ppx_deriving-like

  • tpf

    , again a ppx_deriving-like

  • typerep

    , probably a ppx_deriving-like with ppx_typerep_conv

  • repr

    , which appears to have the user build the type representation manually from combinators in addition to also having the user pass it where needed

  • data-encoding

    , also fully manual

  • cmon

    , fully manual

  • dyn

    in Dune. It appears to also be fully manual

Project Starter Templates

  • drom

    The drom tool is a wrapper over opam/dune in an attempt to provide a cargo-like user experience

  • spin

    Reason and Ocaml project generator

  • modern-ocaml

    Template for an ocaml project with modern tooling

Questions

Science and Technical Computing

  • biocaml

    – OCaml Bioinformatics Library

  • bistro

    – OCaml library for building bioinformatics pipelines

  • lacaml

    OCaml bindings for BLAS/LAPACK (high-performance linear algebra Fortran libraries)

  • obandit

    OCaml library for multi-armed bandits

  • onumerical

    – Numerical library for OCaml

  • oml

    OCaml library for general numerical work

  • ocephes

    Bindings to frequently used special functions library

  • slap

    A linear algebra library in OCaml with type-based static size checking for matrix operations

  • tensorflow-ocaml

    – OCaml bindings for TensorFlow

  • owl

    OCaml numerical library: dense and sparse matrix, linear algebra, regressions, maths and stats functions

  • WHIZARD

    A system designed for the efficient calculation of multi-particle scattering cross sections and simulated event samples

Science and Technical Computing / Regular Expressions

  • Re

    – a pure OCaml regular expressions library with combinators, supporting several formats (glob, posix, str, etc.)

  • ocaml-pcre

    – bindings to the PCRE library (perl-compatible regular expressions)

  • Humane-re

    – Humane-re attempts to provide an easy interface for 90% of your regex needs. Courtesy of ocaml-re

  • Tyre

    Tyre is a set of combinators to build type-safe regular expressions, allowing automatic extraction and modification of matched groups

Science and Technical Computing / Security and Cryptography

  • ocaml-tls

    – TLS in pure OCaml

  • Digestif

    Hash algorithms (like SHA* or BLAKE2*) in OCaml and C

  • cryptokit

    – The Cryptokit library for OCaml provides a variety of cryptographic primitives that can be used to implement cryptographic protocols in security-sensitive applications

  • nocoiner

    A Commitment scheme library for Multi-party computations such as online auctions and gambling

  • nocrypto

    – A small cryptographic library behind the ocaml-tls project. It is built to be straightforward to use, adhere to functional programming principles, and able to run in a Xen-based unikernel

Science and Technical Computing / Semantic Technology

  • OCaml-RDF

    – OCaml library to manipulate RDF graphs and execute Sparql queries

Science and Technical Computing / Serialization

  • atdgen

    — A serialization compiler for multiple languages (OCaml, Java, Python, Scala, Typescript) with a Binou or JSON format

  • bencode

    — Bencode (.torrent file format) reader/writer

  • biniou

    – Extensible binary data format, like JSON but faster

  • cbor

    — OCaml native decoder/encoder

  • jsonm

    — Non-blocking streaming JSON codec for OCaml

  • xmlm

    — A streaming codec to decode and encode the XML data format

  • yojson

    — An optimized parsing and printing library for the JSON format

  • sexplib

    – A S-expression parser and printer

Science and Technical Computing / System Programming

  • OMicroB

    A virtual machine designed to run OCaml bytecode on AVR (Arduino for instance) micro-controlers

  • OCaPIC

    An OCaml virtual machine for PIC18 micro-controlers

  • ocaml-esp32

    A compiler for ESP32 SoC

Science and Technical Computing / Testing

  • Alcotest

    – A lightweight and colourful test framework

  • OUnit

    – OUnit is a unit test framework for OCaml. It allows one to easily create unit-tests for OCaml code. It is based on HUnit, a unit testing framework for Haskell

  • QCheck

    — QCheck is a property testing library inspired from Haskell's QuickCheck

  • iTeML

    (formerly known as ) — supports inline pragma's to generate tests

  • Kaputt

    — comprehensive testing framework

  • Pa_test

    — General inline testing macro's

  • TestSimple

    A lightweight unit testing framework compatible with the

  • expect-test

    — A framework for writing tests in OCaml, similar to , developed by

Science and Technical Computing / Utilities

  • ocaml-cuid

    Collision-resistant IDs for server scalability & database performance

  • Validate

    PPX deriver designed to streamline the process of validating records

  • Uuidm

    Uuidm is an OCaml module implementing 128-bit universally unique identifiers version 3, 5 (name based with MD5, SHA-1 hashing) and 4 (random based) according to RFC 4122

  • sqids-ocaml

    Official OCaml port of Sqids. Generate short unique IDs from numbers

Science and Technical Computing / Web Development

  • Opium

    – Sinatra like web toolkit for OCaml

  • Ocsigen Eliom

    – Eliom is a full-featured multi-tier framework, for developing multi-platform Web and mobile apps as 100% OCaml distributed applications. It can also be used for more traditional Web or mobile apps: Web sites, single page applications, REST API, etc

  • Dream

    Tidy Web framework for OCaml and ReasonML

  • webmachine

    – A REST toolkit for OCaml. OCaml webmachine is a layer on top of cohttp that implements a state-machine-based HTTP request processor. It's particularly well-suited for writing RESTful APIs. As the name suggests, this is an OCaml port of the webmachine project

  • incr_dom

    A library for building dynamic webapps, using Js_of_ocaml

  • fmlib_browser

    a library which helps to write web applications which run in the browser in a pure functional style

  • ocaml-vdom

    Elm architecture and (V)DOM for OCaml

  • COW

    – Caml on the Web (COW) is a set of parsers and syntax extensions to let you manipulate HTML, CSS, XML, JSON and Markdown directly from OCaml code

  • Ocamlnet

    has many relevant web libraries — html parser, for ASN.1 parsing, for Base64, Quoted Printable, URL encoding and HTML escaping, for MIME processing, etc. See the in Ocamlnet's manual

  • tyxml

    — Library to build valid (according to the W3C spec) Html and Svg trees

  • js_of_ocaml

    – Js_of_ocaml is a compiler of OCaml bytecode to Javascript. It makes it possible to run Ocaml programs in a Web browser

Science and Technical Computing / Web Development / js_of_ocaml

  • commonjs_of_ocaml

    Easily import and export CommonJS modules from a js_of_ocaml project

Science and Technical Computing / Web Development

  • ReScript

    ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript

  • ocaml-uri

    – RFC3986 URI parsing library

  • Goji

    – An OCaml bindings generator for JavaScript libraries

  • Syndic

    – RSS and Atom feed parsing

  • ocaml-mustache

    – mustache.js logic-less templates in OCaml

  • atdjs

    – atd code generator (serialization) for OCaml/js_of_ocaml

  • jingoo

    – OCaml template engine almost compatible with jinja2

  • dispatch

    – Path-based dispatching for client- and server-side applications

  • Lambda Soup

    Functional HTML scraping and manipulation with CSS selectors, à la Python's Beautiful Soup

  • Markup.ml

    Error-recovering streaming HTML5 and XML parsers, serializers

  • gen_js_api

    gen_js_api aims at simplifying the creation of OCaml bindings for Javascript libraries

  • routes

    Typed routes for OCaml/ReasonML web applications

  • Cumulus

    – Hacker news like website with the OCaml framework Ocsigen

More related projects

Add a GitHub project

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