Track Awesome Ocaml Updates Weekly
A curated collection of awesome OCaml tools, frameworks, libraries and articles.
🏠 Home · 🔍 Search · 🔥 Feed · 📮 Subscribe · ❤️ Sponsor · 😺 ocaml-community/awesome-ocaml · ⭐ 2.8K · 🏷️ Programming Languages
Sep 16 - Sep 22, 2024
Large Source Code Examples
- Tezos - a self-upgradable Proof of Stake blockchain
Mar 04 - Mar 10, 2024
Developer Tools
- learn-ocaml (⭐302). Web app (written in OCaml) underlying the learn-ocaml-corpus. Can be customized to serve lectures (with Markdown slides), playgrounds (with a toplevel prelude), and interactive exercises (with OCaml tests). MIT License.
- learn-ocaml.el (⭐7). Minor mode for Emacs that can display exercise topics and grade exercise solutions, after logging to a Learn-OCaml instance. MIT License.
Exercises and Short Examples
- learn-ocaml-corpus. Corpus of beginner-to-advanced online exercises (including those from the OCaml MOOC) with automatic grading tests.
Online Courses
- OCaml MOOC: Introduction to Functional Programming in OCaml - Videos available in this playlist of the OCaml Software Foundation YouTube channel.
Utilities
- Validate (⭐16) - PPX deriver designed to streamline the process of validating records.
- sqids-ocaml (⭐10) - Official OCaml port of Sqids. Generate short unique IDs from numbers.
Feb 05 - Feb 11, 2024
Books
- OCaml Programming: Correct + Efficient + Beautiful - Textbook on Functional Programming and Data Structures in OCaml - by Michael R. Clarkson et al.
Jan 01 - Jan 07, 2024
Blogs
Nov 13 - Nov 19, 2023
Algorithms and Data Structures
- ODiff (⭐2k) – Library of YIQ NTSC transmission image difference alghoritm implemented in OCaml and ReasonML.
Code Analysis and Linters
- MOPSA - MOPSA is a generic framework for building sound static analyzers based on the theory of abstract interpretation.
Questions
- WHIZARD - A system designed for the efficient calculation of multi-particle scattering cross sections and simulated event samples.
Serialization
- atdgen (⭐315) — A serialization compiler for multiple languages (OCaml, Java, Python, Scala, Typescript) with a Binou or JSON format
May 22 - May 28, 2023
Printers helpers
- Reason's native Console.log
- ppx_deriving ’s
[@@deriving show]
.
- 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.
Dec 19 - Dec 25, 2022
Code Analysis and Linters
- coq-of-ocaml (⭐253) - Translator from OCaml to Coq to formally verify OCaml code.
Oct 03 - Oct 09, 2022
Developer Tools
- BetterOCaml – An efficient, intuitive, and cross-platform web IDE with your OCaml code interpreted and running in your browser!
Nov 22 - Nov 28, 2021
Questions
- bistro (⭐46) – OCaml library for building bioinformatics pipelines.
Aug 16 - Aug 22, 2021
Community
Networking
- HTTP Tools:
- ocaml-cohttp (⭐703) – Very lightweight HTTP server using Lwt or Async.
- ocurl (⭐60) – OCaml bindings to libcurl.
- httpaf (⭐535) – A high performance, memory efficient, and scalable web server written in OCaml.
- piaf (⭐189) - Client/server library for HTTP/1.X / HTTP/2 written entirely in OCaml.
Utilities
- 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.
Mar 29 - Apr 04, 2021
Developer Tools
- OCaml: Learn & Code iOS app - Learn and execute OCaml code from your iPhone/iPad/Mac.
Feb 08 - Feb 14, 2021
Questions
- ocephes (⭐12) - Bindings to frequently used
C
special functions library.
Jan 04 - Jan 10, 2021
User Interface
- lablgtk — GTK2 and GTK3 bindings for OCaml with various higher-level facilities to define GUIs.
Dec 14 - Dec 20, 2020
Databases
- New Implementations
- Irmin (⭐1.8k) — A distributed database that follows the same design principles as Git.
- Obigstore — A database with BigTable-like data model atop LevelDB.
- RunOrg (⭐12) - It is a WIP database server written in OCaml.
- dokeysto (⭐11) - dumb OCaml key-value store, string keys and string values. Optional on-the-fly LZ4 compression of values or tokyocabinet backend.
Nov 30 - Dec 06, 2020
Exercises and Short Examples
- Programming Language Examples Alike Cookbook - The OCaml section of the book is a free reference for solving common programming problems using OCaml.
Language-related
- OCaml Style Guide (by Jane Street) - See also: [1], [2], [3].
Nov 16 - Nov 22, 2020
Large Source Code Examples
- Base (⭐849) - Standard library for OCaml
- pfff (⭐186) - 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.
- cil (⭐348) - C Intermediate Language
- coq (⭐4.8k) - formal proof management system
- frama-c - platform dedicated to the analysis of source code written in C
- libguestfs (⭐619) - library and tools for accessing and modifying virtual machine disk images
- Liquidsoap (⭐1.4k) - a swiss-army knife for multimedia streaming, notably used for netradios and webtvs
- mirage (⭐2.5k) - library operating system that constructs unikernels for secure, high-performance network applications across a variety of cloud computing and mobile platforms
- MLDonkey (⭐241) - cross-platform multi-network peer-to-peer daemon
- WHY3 - platform for deductive program verification
- xen-api (⭐346) - management stack that configures and controls Xen-enabled hosts and resource pools, and co-ordinates resources within the pool.
Serialization
- cbor (⭐25) — OCaml native CBOR decoder/encoder.
Testing
- expect-test (⭐141) — A framework for writing tests in OCaml, similar to Cram, developed by JaneStreet.
Nov 02 - Nov 08, 2020
Project Starter Templates
- drom (⭐185) - The drom tool is a wrapper over opam/dune in an attempt to provide a cargo-like user experience.
Oct 26 - Nov 01, 2020
Large Source Code Examples
- Oni2 (⭐7.8k) - Native, lightweight modal code editor.
Project Starter Templates
- spin (⭐297) - Reason and Ocaml project generator
- modern-ocaml (⭐67) - Template for an ocaml project with modern tooling
Oct 05 - Oct 11, 2020
Code Analysis and Linters
- Camelot (⭐44) - Camelot is a modular and fully configurable OCaml linter and stylechecker.
Sep 21 - Sep 27, 2020
Mobile Applications
- Articles:
Feb 03 - Feb 09, 2020
Algorithms and Data Structures
- ORaft (⭐29) - Library of Raft consensus algorithm implemented in OCaml
Jan 20 - Jan 26, 2020
Machine Learning
- Libraries
- Ocaml-sklearn (⭐33) scikit-learn for OCaml.
- Owl - Scientific library with neural networks, algorithmic differentiation and ONNX support.
- Object detection convolutional neural network with OCaml (based on Owl) (⭐17).
- PyTorch bindings (⭐411) - OCaml bindings for PyTorch.
- Ocaml-NN (⭐4) - Fully functional monadic implementation of a Neural Network (FCNNs) in OCaml
- Articles
Dec 30 - Jan 05, 2019
Web Development
- Tools:
- COW (⭐107) – 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 — Nethtml html parser, Netasn1 for ASN.1 parsing, Netencoding for Base64, Quoted Printable, URL encoding and HTML escaping, Netmime for MIME processing, etc. See the list of modules 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.
- commonjs_of_ocaml (⭐13) - Easily import and export CommonJS modules from a js_of_ocaml project.
- ReScript - ReScript is a robustly typed language that compiles to efficient and human-readable JavaScript.
- ocaml-uri (⭐97) – RFC3986 URI parsing library.
- Goji (⭐44) – An OCaml bindings generator for JavaScript libraries.
- Syndic (⭐34) – RSS and Atom feed parsing
- ocaml-mustache (⭐82) – mustache.js logic-less templates in OCaml.
- atdjs (⭐9) – atd code generator (serialization) for OCaml/js_of_ocaml.
- jingoo (⭐124) – OCaml template engine almost compatible with jinja2.
- dispatch (⭐47) – Path-based dispatching for client- and server-side applications.
- Lambda Soup (⭐380) - Functional HTML scraping and manipulation with CSS selectors, à la Python's Beautiful Soup.
- Markup.ml (⭐146) - Error-recovering streaming HTML5 and XML parsers, serializers.
- gen_js_api (⭐177) - gen_js_api aims at simplifying the creation of OCaml bindings for Javascript libraries.
- routes (⭐145) - Typed routes for OCaml/ReasonML web applications.
Sep 30 - Oct 06, 2019
Internationalization
- Camomile (⭐125) — A Unicode library for OCaml.
- ocaml-m17n (⭐52) — Multilingualization for OCaml source code. Allows using Unicode identifiers in OCaml source code.
- Uucd (⭐17) — Unicode character database decoder for OCaml.
- Uucp (⭐20) — Unicode character properties for OCaml.
- Uunf (⭐22) — Unicode text normalization for OCaml.
- Uuseg (⭐23) — Unicode text segmentation for OCaml.
- Uutf (⭐30) — Non-blocking streaming Unicode codec for OCaml.
Sep 02 - Sep 08, 2019
Language-related
Aug 26 - Sep 01, 2019
Developer Tools
- Code coverage:
Jul 15 - Jul 21, 2019
Concurrency
- Libraries:
Jul 08 - Jul 14, 2019
Program analysis
- cwe_checker (⭐1.1k) - cwe_checker finds vulnerable patterns in binary executables.
Jun 10 - Jun 16, 2019
Security and Cryptography
- nocoiner (⭐11) - A Commitment scheme library for Multi-party computations such as online auctions and gambling.
Semantic Technology
- OCaml-RDF – OCaml library to manipulate RDF graphs and execute Sparql queries.
May 06 - May 12, 2019
Web Development
- Frameworks:
- Opium (⭐753) – 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 (⭐223) – 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 (⭐380) - 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 (⭐197) - Elm architecture and (V)DOM for OCaml
Apr 29 - May 05, 2019
User Interface
- ocaml-linenoise (⭐51) - Self-contained OCaml bindings to linenoise; easy high-level readline functionality in OCaml.
Package Management
- Distribution:
- 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 (⭐62) - Diskuv OCaml distribution for Windows.
- makorel (⭐8) – Release OPAM packages easily.
- esy (⭐843) - package.json workflow for native development with Reason/OCaml.
Feb 25 - Mar 03, 2019
Algorithms and Data Structures
- Decompress (⭐116) - A pure OCaml implementation of Zlib.
- Ke (⭐52) - Fast implementation of queue (FIFO) in OCaml.
- Duff (⭐21) - Implementation of Rabin's fingerprint and delta compression by P. MacDonald in OCaml (same as libXdiff
Nov 19 - Nov 25, 2018
Serialization
- yojson (⭐326) — An optimized parsing and printing library for the JSON format.
Nov 12 - Nov 18, 2018
Parallelism
- Libraries:
- Parmap — Provides easy-to-use parallel map and fold functions.
- ForkWork (⭐19) — 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 (⭐48) — A library for spawning processes on a cluster of machines, and passing typed messages between them.
- Ocamlnet — An enhanced system platform library. Contains the
netmulticore
library to compute tasks on as many cores of the machine as needed. - Nproc (⭐29) – Process pool implementation for OCaml.
- Parany (⭐53) – 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 (⭐137) - Libraries and syntax extensions to offload intensive computations to parallel accelerators (multicore CPUs, GPUs and other accelerators compatible with GPGPU frameworks).
Oct 29 - Nov 04, 2018
Books
- OCaml for Scientists - by Jon Harrop.
Oct 01 - Oct 07, 2018
System Programming
- Embedded systems
- OMicroB (⭐136) - 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 (⭐18) - A compiler for ESP32 SoC.
Sep 10 - Sep 16, 2018
Community
Algorithms and Data Structures
Benchmarking
- core_bench (⭐50) – Micro-benchmarking library for OCaml by Jane Street. - Getting Started with Core_bench (⭐50)
- benchmark (⭐28) – 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.
- 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 here (⭐28).
- 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.
Compilers and Compiler Tools
- Languages and Compilers:
Caramel - Caramel is a functional language for building type-safe, scalable, and maintainable applications.
cDuce - cDuce is a modern XML-oriented functional language with innovative features.
Compcert C Compiler - It is a C Compiler supporting most of the ISO C90 and C99 / ANSI C features.
Eff Programming Language - Eff is a functional language with handlers of not only exceptions, but also of other computational effects such as state or I/O.
Neko Programming Language - Originally the compiler was written in OCaml.
Mazeppa (⭐366) - A modern supercompiler for call-by-value functional languages.
Mezzo Programming Language - Mezzo is a programming language in the ML tradition, which places strong emphasis on the control of aliasing and access to mutable memory.
OCaml-Java - OCaml to Java bytecode compiler.
Rhine (⭐631) – A Lisp on LLVM written in OCaml.
Rust Programming Language - Originally written in OCaml before bootstrapping.
Quick C-- Target Language - It is now a dead project. Github Repo (⭐148). Alternative website.
tis-interpreter - An interpreter for finding subtle bugs in programs written in standard C
Reason - Friendly syntax & toolchain for OCaml by Facebook.
RaML - Resource Aware ML (RaML) is a tool that automatically and statically computes resource-use bounds for OCaml programs.
Liquid ML (⭐41) - Shopify's Liquid Templating language for OCaml.
Datetime
Developer Tools
- Try OCaml – Try OCaml in your web browser.
Exercises and Short Examples
- 99 problems. 99% of the solutions are here (⭐48).
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.
General
User Interface
- Lambda-Term (⭐209) – 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.
Language-related
Messaging
- capnp-ocaml (⭐98) – OCaml code generator plugin for the Cap'n Proto serialization framework.
Metaprogramming
- Articles:
Metrics
- prometheus (⭐49) – OCaml client library for Prometheus monitoring.
Package Management
- Build Tools:
- dune (⭐1.6k) – 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.
- oasis2opam (⭐27) — Tool to convert OASIS metadata to OPAM package descriptions.
- obuild (⭐55) – Simple package build system for ocaml.
- ocaml-makefile (⭐74) — Easy to use Makefile for small to medium-sized OCaml-projects.
- topkg (⭐69) — OPAM-aware packaging system using ocamlbuild.
- Bazel (⭐37) - OCaml rules for Bazel, Google's multi-language and platform build tool.
Parallelism
- Articles:
- What is the state of OCaml's parallelization abilities?
- Parallel programming in multicore OCaml (⭐282)
- Parallelism programming from the officiel OCaml manual
- Awesome multicore OCaml (⭐147). A compilation of resources
Questions
Testing
- Kaputt — comprehensive testing framework.
Sep 03 - Sep 09, 2018
Utilities
- ocaml-cuid (⭐18) - Collision-resistant IDs for server scalability & database performance.
Aug 20 - Aug 26, 2018
Code Analysis and Linters
- Infer (⭐15k) - 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++.
Program analysis
- BAP (⭐2k) - BAP is a reverse engineering and program analysis platform that targets binary programs.
- BinCat (⭐1.7k) - BinCat is a binary code static analysis toolkit.
Developer Tools
- Jupyter (⭐288) – An OCaml kernel for the Jupyter notebook.
- utop (⭐839) – Universal toplevel for OCaml with support for multiline edition, history, real-time and context-sensitive completion, colors, and more.
- ocamlformat (⭐620) - A command-line tool to format OCaml code.
- Foreign Function Interface:
- ctypes (⭐368) – Library for binding to C libraries using pure OCaml.
- ocaml-main-program-in-c (⭐16) – Example build system for making mixed C/Ocaml binaries where the main program is in C.
- Modular foreign function bindings
- Py.ml (⭐182) - OCaml bindings for Python.
Messaging
- ocaml-zmq (⭐80) – ZeroMQ bindings for OCaml with Async and Lwt wrappers.
Questions
- owl (⭐1.2k) - OCaml numerical library: dense and sparse matrix, linear algebra, regressions, maths and stats functions.
Jun 25 - Jul 01, 2018
Databases
- Overlays
- Sequoia (⭐123) - Sequoia is a type-safe query builder for MySQL/MariaDB and PostgreSQL
- Macaque (⭐38) — Macaque is a library for safe and flexible database queries using comprehensions on top of PG'OCaml.
- ORM (⭐60) — ORM for SQLite.
- Caqti (⭐303) - Cooperative-threaded access to relational data
- Caqti setence preparation, ppx_rapper (⭐138)
- Articles:
- Implementing the Binary Memcached Protocol with Ocaml and Bitstring
- Interfacing OCaml and PostgreSQL with Caqti
- 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.
Testing
- Alcotest (⭐449) – A lightweight and colourful test framework.
Apr 16 - Apr 22, 2018
Community
Feb 05 - Feb 11, 2018
Security and Cryptography
- Digestif (⭐87) - Hash algorithms (like SHA* or BLAKE2*) in OCaml and C.
Jan 01 - Jan 07, 2018
Developer Tools
- ocamlbrowser – A source and compiled interface browser, written using LablTk. Included in the standard distribution for ocaml <= 4.01 and with labltk for ocaml >= 4.02.
- Editor Integration:
- ocaml-lsp (⭐752) - An LSP language server for OCaml that integrates with any editor that understands LSP like VSCode (⭐162k), Vim and Emacs.
- merlin (⭐1.6k) – Context sensitive completion for OCaml in Vim and Emacs.
- tuareg (⭐360) - OCaml mode for Emacs that can run the toplevel and the debugger within Emacs.
- opam-switch-mode (⭐5) - 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 (⭐43) – Emacs package to provide merlin's features through eldoc.
- vscode-ocaml (⭐170) – extension that provides OCaml language support for VSCode (⭐162k)
- OCaml Debugger (⭐208) – extension that provides OCaml Debugger for VSCode (⭐162k)
- Sublime better ocaml (⭐23) – Better OCaml mode for Sublime Text.
- ocp-index – Easy access to the interface information of installed OCaml libraries. Provides standalone tools like
ocp-browser
andocp-grep
.- ocp-browser – Small ncurses-based API and documentation browser.
- ocp-index-top (⭐20) – Toplevel directive for looking up documentation using ocp-index.
- Sublime text package
- ocp-indent – Indentation tool for OCaml, to be used from editors like Emacs and Vim.
Dec 11 - Dec 17, 2017
Application Libraries
- ocaml-containers (⭐484) – A lightweight, modular standard library extension, string library, and interfaces to various libraries (bigarrays, Unix, etc.) BSD license.
Nov 06 - Nov 12, 2017
Community
Oct 30 - Nov 05, 2017
Questions
- obandit - OCaml library for multi-armed bandits.
Oct 16 - Oct 22, 2017
Blogs
Sep 18 - Sep 24, 2017
Application Libraries
- Core (⭐1.1k) – Jane Street Capital's full-fledged standard library overlay. A portable subset of Core is also available: Core_kernel (⭐219).
- Minicli (⭐31) – Minimalist library for command-line parsing.
User Interface
- lablqml (⭐159) – 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.
- Notty (⭐349) - Notty is a declarative terminal library for OCaml, structured around the notion of composable images.
Security and Cryptography
- cryptokit (⭐98) – The Cryptokit library for OCaml provides a variety of cryptographic primitives that can be used to implement cryptographic protocols in security-sensitive applications.
Sep 11 - Sep 17, 2017
Concurrency
- Articles:
Security and Cryptography
- nocrypto (⭐112) – 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.
Aug 21 - Aug 27, 2017
Code Analysis and Linters
- MemCAD (⭐25) - MemCAD is an abstract interpreter for shape analysis. MemCAD can verify C programs manipulating complex data structures.
Jul 17 - Jul 23, 2017
Messaging
- onanomsg (⭐38) – nanomsg bindings for OCaml.
- Kafka (⭐63) – OCaml bindings for Apache Kafka.
- AMQP (⭐63) – AMQP client library for Async and Lwt.
- MPI (⭐24) – Message Passing Interface bindings for OCaml.
- MQTT (⭐20) – OCaml implementation of the MQTT pubsub protocol.
Jun 12 - Jun 18, 2017
Online Courses
- University of Illinois - Course that uses OCaml to teach functional programming and programming language design
Apr 10 - Apr 16, 2017
Questions
- tensorflow-ocaml (⭐284) – OCaml bindings for TensorFlow.
Mar 20 - Mar 26, 2017
Developer Tools
- codingground – Compile and execute OCaml code online.
Feb 27 - Mar 05, 2017
Questions
- slap (⭐88) - A linear algebra library in OCaml with type-based static size checking for matrix operations.
Jan 16 - Jan 22, 2017
Testing
- 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.
Oct 03 - Oct 09, 2016
Datetime
Aug 15 - Aug 21, 2016
Code Analysis and Linters
- SLAyer (⭐326) - SLAyer is an automatic formal verification tool that uses separation logic to verify memory safety of C programs.
Compilers and Compiler Tools
- Parser and Lexer Generators:
- Opal (⭐147) – Self-contained monadic parser combinators for OCaml.
- Sedlex (⭐235) is a modern, encoding-agnostic (read: Unicode-supporting) lexer generator (the ppx-based successor to ulex.)
- Menhir – Menhir is a LR(1) parser generator for OCaml.
- See ocaml-parsing (⭐125) for a clearer example of using Menhir and Sedlex to produce a useful parser,
- ... and Obelisk (⭐54), a neat project to produce readable LaTeX, HTML, or plain-text EBNF-style documentation for your grammar.
- ocamllex/ocamlyacc – lex and yacc implementation for OCaml.
- Angstrom (⭐637) - Parser combinators built for speed and memory efficiency
Logging
- Logs - Logs provides a logging infrastructure for OCaml.
Networking
- charrua-unix (⭐11) - charrua-unix is a Unix DHCP daemon based on charrua-core (⭐55).
Regular Expressions
- Tyre (⭐171) - Tyre is a set of combinators to build type-safe regular expressions, allowing automatic extraction and modification of matched groups.
Jul 18 - Jul 24, 2016
Mobile Applications
- Bindings:
- Cordova plugins (⭐26) – List of bindings to Cordova plugins. Get access to native device components like accelerometer, SMS, geolocation, etc in OCaml.
Feb 08 - Feb 14, 2016
Developer Tools
- OCaml Yeoman Generator (⭐22) – Yeoman generator to scaffold OCaml modules.
Feb 01 - Feb 07, 2016
General
- Learn X in Y minutes - Where X=OCaml.
Questions
- lacaml - OCaml bindings for BLAS/LAPACK (high-performance linear algebra Fortran libraries).
Jan 18 - Jan 24, 2016
Networking
- fluent-logger (⭐7) – Fluentd logger for OCaml.
Jan 04 - Jan 10, 2016
Code Analysis and Linters
- flow (⭐22k) - flow is a static type checker for JavaScript.
Exercises and Short Examples
- OCaml at Exercism – Exercism is your place to engage in thoughtful conversations about code. Explore simplicity, idiomatic language features, and expressive, readable code. Solutions (⭐93).
Nov 23 - Nov 29, 2015
Databases
- Bindings
- 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.
- ppx_pgsql (⭐52) – A syntax extension for embedded SQL queries using PG'OCaml.
- PostgreSQL-OCaml — An interface to PostgreSQL through the C API (
libpq
). - SQLite3 (⭐113) — OCaml bindings to the SQLite3 database.
- Sqlite3EZ — Thin wrapper for SQLite3 with a simplified interface.
- ocaml-redis (⭐75) – Redis bindings for OCaml.
- mysql – Bindings to libmysqlclient for interacting with MySQL databases.
- pgx (⭐122) – A pure OCaml PostgreSQL client library.
- mysql_protocol (⭐14) – Implementation of MySQL Protocol with the Bitstring library.
Oct 05 - Oct 11, 2015
Testing
- TestSimple (⭐13) - A lightweight unit testing framework compatible with the Test Anything Protocol.
Aug 24 - Aug 30, 2015
Questions
- oml (⭐119) - OCaml library for general numerical work.
Testing
- iTeML (⭐67) (formerly known as qtest) — supports inline pragma's to generate tests.
- Pa_test — General inline testing macro's.
Jul 20 - Jul 26, 2015
Online Courses
May 11 - May 17, 2015
Regular Expressions
- Humane-re (⭐25) – Humane-re attempts to provide an easy interface for 90% of your regex needs. Courtesy of ocaml-re.
Dec 08 - Dec 14, 2014
Regular Expressions
- Re (⭐234) – a pure OCaml regular expressions library with combinators, supporting several formats (glob, posix, str, etc.).
- ocaml-pcre (⭐30) – bindings to the PCRE library (perl-compatible regular expressions)
Serialization
- sexplib (⭐146) – A S-expression parser and printer
Nov 24 - Nov 30, 2014
Metaprogramming
- Syntax Extensions:
- ppx_import (⭐89) – Import is a syntax extension that allows to pull in types or signatures from other compiled interface files.
- ppx_string_interpolate (⭐21) – A simple ppx filter to support string interpolation like
[%str "value of foo is $(foo)"]
. - ppx_monad (⭐7) – Monad syntax extension for OCaml.
- ppx_deriving_yojson (⭐155) – A Yojson codec generator for OCaml.
Nov 17 - Nov 23, 2014
Blogs
Oct 13 - Oct 19, 2014
General
- slacko (⭐81) – A neat interface for Slack in OCaml.
Sep 29 - Oct 05, 2014
Algorithms and Data Structures
- ods (⭐48) – A large collection of data structures and algorithms for OCaml.
- combine (⭐35) – OCaml library for combinatorics https://www.lri.fr/~filliatr/combine/.
Compilers and Compiler Tools
Language-related
Questions
- biocaml (⭐123) – OCaml Bioinformatics Library http://biocaml.org.
- onumerical (⭐8) – Numerical library for OCaml.
Aug 11 - Aug 17, 2014
Metaprogramming
- Tools and Language Extensions:
- 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.
Aug 04 - Aug 10, 2014
Code Analysis and Linters
- Mascot - Mascot is a style-checker for OCaml sources.
Formal Software Verification
- 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 (⭐200) – OCaml library for reading, writing and modifying PDF files.
Jul 28 - Aug 03, 2014
Algorithms and Data Structures
- OCamlgraph (⭐231) – A generic graph library for OCaml.
Application Libraries
- Batteries Included (⭐517) – A community-maintained foundation library for your OCaml projects.
- Cmdliner (⭐292) – Declarative definition of command line interfaces for OCaml.
- React – React is an OCaml module for functional reactive programming (FRP). It provides support for programs with time-varying values, declarative events, and signals.
- easy-format (⭐42) – Pretty-printing library for OCaml.
- ocaml-rpc (⭐95) – Light library to deal with RPCs in OCaml.
Books
- 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.
- Real World OCaml by Y. Minsky, A. Madhavapeddy, and J. Hickey - Functional Programming for the masses.
Developer Tools
- ghim (⭐19) – A command-line tool to manage Github Issues.
Exercises and Short Examples
General
Graphics
- 2D
- archimedes — 2D plotting library.
- cairo2 (⭐54) — Binding to Cairo, a 2D Vector Graphics Library. Integrates well with lablgtk.
- Vg (⭐88) – Declarative 2D vector graphics for OCaml.
- 3D
- glMLite (⭐18) — OpenGL bindings for OCaml. Provides an (experimental) functional API. (homepage)
- 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}.
Language-related
- mikmatch (⭐22) – OCaml pattern-matching extended with regexps
Logging
- dolog (⭐37) – A dumb OCaml logger.
- Volt (⭐8) – A variant of the Bolt OCaml logging tool.
Networking
- ocaml-dns (⭐106) – A pure OCaml implementation of the DNS protocol.
Online Courses
Security and Cryptography
- ocaml-tls (⭐303) – TLS in pure OCaml.
Serialization
- bencode (⭐24) — Bencode (.torrent file format) reader/writer.
- biniou (⭐43) – Extensible binary data format, like JSON but faster.
- jsonm — Non-blocking streaming JSON codec for OCaml.
- xmlm — A streaming codec to decode and encode the XML data format.
System Programming
- Mirage OS (⭐2.5k) – Mirage is a programming framework for constructing secure, high-performance network applications across a variety of cloud computing and mobile platforms.
- ocaml-fat (⭐26) – Read and write FAT-format filesystems from OCaml.
- ocaml-git (⭐362) – Pure OCaml low-level git bindings.
- ocaml-vchan (⭐46) – Pure OCaml implementation of the "vchan" shared-memory communication protocol.
Testing
- QCheck (⭐345) — QCheck is a property testing library inspired from Haskell's QuickCheck
Web Development
- Open Source Projects:
- Cumulus (⭐49) – Hacker news like website with the OCaml framework Ocsigen