awesome-ocaml
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
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 for Scientists
by Jon Harrop
- 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
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
- ocamllex/ocamlyacc
– lex and yacc implementation for OCaml
Angstrom
Parser combinators built for speed and memory efficiency
Concurrency / :
Databases
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 / :
- Finally, Type-Safe, Extensible and Efficient Language Integrated Query
by Oleg and Co. The proposed approach is to describe SQL queries in type-safe manner and optimize them (using term rewriting or normalization-by evaluation) before sending to database engine. It potentially could optimize O(n^2) queries to O(n) ones
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
- ocp-browser
– Small ncurses-based API and documentation browser
ocp-index-top
– Toplevel directive for looking up documentation using 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
- 99 problems
. 99% of the solutions are
- learn-ocaml-corpus
. Corpus of beginner-to-advanced online exercises (including those from the OCaml MOOC) with automatic grading tests
- OCaml at Exercism
– Exercism is your place to engage in thoughtful conversations about code. Explore simplicity, idiomatic language features, and expressive, readable code.
- Programming Language Examples Alike Cookbook
The OCaml section of the book is a free reference for solving common programming problems using OCaml
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
camlPDF
– OCaml library for reading, writing and modifying PDF files
slacko
– A neat interface for Slack in OCaml
- Learn X in Y minutes
Where X=OCaml
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
Language-related
mikmatch
– OCaml pattern-matching extended with regexps
- OCaml Style Guide (by Jane Street)
See also: , ,
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
Machine Learning
Ocaml-sklearn
scikit-learn for OCaml
- Owl
Scientific library with neural networks, algorithmic differentiation and ONNX support
PyTorch bindings
OCaml bindings for PyTorch
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 / :
ppx_import
– Import is a syntax extension that allows to pull in types or signatures from other compiled interface files
ppx_string_interpolate
– A simple ppx filter to support string interpolation like
ppx_monad
– Monad syntax extension for OCaml
ppx_deriving_yojson
– A Yojson codec generator for OCaml
- MetaOCaml
– an OCaml dialect for multi-stage programming
- Fan
– Fan is a compile-time metaprogramming system for OCaml, originally inspired from Camlp4. It's a combination of OCaml and Lispy Macros. It shares the same concrete syntax with OCaml
- camlp5
Camlp5 is a preprocessor-pretty-printer of OCaml
- camlp4
Camlp4 is part of the standard OCaml distribution and is different from Camlp5
Metrics
prometheus
– OCaml client library for Prometheus monitoring
Mobile Applications / :
Cordova plugins
– List of bindings to Cordova plugins. Get access to native device components like accelerometer, SMS, geolocation, etc in OCaml
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
- OCaml MOOC: Introduction to Functional Programming in OCaml
Videos available in of the YouTube channel
- University of Illinois
Course that uses OCaml to teach functional programming and programming language design
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
Nothing in this list matches your filter.
Featured in 8 awesome lists
Each link jumps to the spot where the list mentions awesome-ocaml.