Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

The Caml Hump: System :: Distributed and parallel programming

Open Source

Native OCaml libraries
Preludeml [21-Jan-2009, Development code]
OCaml stdlib replacement with a Haskellish flavour.


Scientific software
JoCaml [30-Aug-2012, version 4.00] Has a documentation
JoCaml is Objective Caml plus (&) the join calculus, that is, OCaml extended for concurrent and distributed programming.


Native OCaml libraries
Amble [26-Oct-2004, version 0.1, Beta] Has a tutorial
A library to help writing distributed programs. The library manages all the details relevant to process launching, channel creation, and network communication so as to let the programmer stick to the core of the problem. This allows to write programs that can be distributed on several machines in a concise way, with all the parallel aspects kept implicit (no synchronisation).
Author: Olivier Pérès.
Native OCaml libraries
Ethread [03-Feb-2004, version 1.0.1, Stable] Has a documentation
The ethread library has modules for read/write locks, barriers, and a simple thread-safe message queue that interacts with so a thread can wait for I/O or a message at the same time.
Author: Shawn Wagner.
Native OCaml libraries
Froc [17-May-2010, version 0.2, Beta]
Froc is a library for function reactive programming in OCaml. The interface is similar to FrTime and FlapJax, but (of course) typed, implementing a monad of changeable values. The implementation is data-driven, using the dynamic dependency graphs of Acar et al.'s adaptive functional programming. Froc can be used with ocamljs, and with the included Froc-dom library can be used for web browser programming.
Author: Jake Donham.
Native OCaml libraries
Lwt [04-Jul-2011, version 2.4.0, Stable] Has a documentation
Lwt is a library for cooperative threads in OCaml. It is using monadic style, which makes it really easy to use. With respect to preemptive threads, cooperative threads are not using a scheduler to distribute processor time between threads. Each thread must instead tell other threads that it wants them to continue. An uncooperative thread will keep other threads blocked until it has completed its work.
Development tools
OCamlP3L [02-Mar-2007, version 2.03, Stable] Has a documentation
OCamlP3l is a compiler for Caml parallel programs. The OCamlP3l programming paradigm is skeleton programming. The skeletons encapsulate basic parallel programming patterns in a well understood and structured approach. Based on P3L, the Pisa Parallel Programming Language, OCamlP3l skeleton algebra is embedded in a full-fledged functional programming language, namely Objective Caml.
Native OCaml libraries
Parmap [18-Jun-2012, version 0.9.9, Beta]
Parmap is a minimalistic library allowing to exploit multicore architecture for OCaml programs with minimal modifications.


Native OCaml libraries
coThreads [18-Sep-2007, version 0.10, Beta] Has a documentation
coThreads is a concurrent programming library for OCaml. It enhances the Threads library of the standard OCaml distribution in two dimensions: coThreads implements the same API of the standard Threads library on different execution engines (process, netwoker(todo)), so that a single copy of source code can be compiled and deployed to different environments without modification; coThreads is also a super set of the standard Threads library, with extra components (STM etc.), functions (spawn etc.) and features (object-level compatibility etc.).
Author: Zheng Li.
Scientific software
Plasma [05-Mar-2012, version 0.6, Beta] Has a Godi packageHas a documentation
Map/Reduce and distributed filesystem. This package contains two applications: PlasmaFS is a distributed filesystem, Plasma MapReduce is a Map/Reduce framework on top of PlasmaFS.
Author: Gerd Stolpmann.
Native OCaml libraries
STMlib [07-Mar-2007, version 0.0.1, Alpha] Has a documentation
This is a user-space implementation of STM (Software Transactional Memory) library for OCaml. It's mainly inspired by the STM library of Haskell, with some exceptions due to the different nature of languages and different strategies of implementation.
Author: Zheng Li.


Native OCaml libraries
React [19-Mar-2012, version 0.9.3, Beta] Has a documentation
React is an OCaml module for functional reactive programming (FRP). It provides support to program with time varying values : applicative events and signals. React doesn't define any primitive event or signal, this lets the client chooses the concrete timeline.
Author: Daniel Bunzli.
Native OCaml libraries
Rtime [19-Mar-2012, version 0.9.2, Beta] Has a documentation
Rtime is an OCaml module implementing timelines for React [1]. It manages time stamp events, delayed events and delayed signals along timelines. The client chooses the concrete timeline by providing an absolute notion of time. Running the timeline at the appropriate pace is left to the client.
Author: Daniel Bunzli.


Native OCaml libraries
CamlG4 [11-Mar-2003, version 1.00, Beta]
A library for Objective Caml allowing SIMD parallel processing on PowerPC G4 processor using the Altivec vector processing unit.
Native OCaml libraries
Extended thread synchronisations [01-Mar-2004, Development code]
Two small modules that implement extended synchronisations for O'Caml threads.
Author: David Mentre.
Bindings with C libraries
OCamlMPI [10-Aug-2001, Stable]
An interface to the MPI message-passing library.
Author: Xavier Leroy.
Bindings with C libraries
OCamlPVM [10-Aug-2001, Stable]
An interface to the PVM message-passing library.
Bindings with C libraries
OCamlSpread [18-Sep-2002, version 0.0.1, Alpha]
A wrapper for a Spread group communication toolkit, which provides a high performance messaging service that is resilient to faults across external or internal networks.
Native OCaml libraries
ODisco [04-Jul-2011, Development code]
ODisco is a library for implementing Disco map-reduce jobs in OCaml. It implements the Disco worker protocol, and provides the plumbing to connect user-specified computations to Disco data sources and results.
Native OCaml libraries
Opis [19-Aug-2008, Beta] Has a documentation
A functional-reactive approach for developing distributed systems in Objective Caml. In Opis, a protocol description consists of a reactive function (called event function) describing the behavior of a distributed system node. The event functions in Opis are built from pure functions as building blocks, composed using the Arrow combinators. This facilitates reasoning about event functions both informally and using interactive provers. For example, this approach leads to simple termination arguments.
Native OCaml libraries
parallele [10-Aug-2001, Beta]
Library for distributed computing in OCaml.
Author: Michel Quercia.
Native OCaml libraries
PEC [07-May-2012, version 1.1, Stable]
PEC is a push-based event combinator library for OCaml.
Development tools
Reactive ML [12-Feb-2013, version 1.08.04, Stable] Has a documentationHas a tutorial
ReactiveML is a programming language dedicated to the implementation of interactive systems as found in graphical user interfaces, video games or simulation problems. ReactiveML is based on the synchronous reactive model of Boussinot embedded in an ML language (here OCaml). The synchronous reactive model provides synchronous parallel composition and dynamic features like the dynamic creation of processes. In ReactiveML, the reactive model is integrated at the language level (not as a library) which leads to safer and more natural programming.
Author: Louis Mandel.
Native OCaml libraries
Release [25-Sep-2012, version 1.0.0, Stable] Has a documentation
Release is a multi-process Lwt-enabled daemon framework for OCaml, providing facilities for type-safe inter-process communication and privilege-dropping. Its goal is to make it easy to write servers that are released from the calling terminal and to release root privileges when those are not necessary.
Author: Andre Nathan.
Native OCaml libraries
SCAMPI [10-Aug-2001, version 1.2, Stable]
Scampi (Simple CAml to MPI interface) is small library allowing Caml programs to make calls to MPI-1 communication routines. For now only a few calls are provided (basically, getting communicator size, rank and making synchronous and asynchronous send/receive of polymorphic data plus a couple of collective comm), but it is expected that subsequent versions will enlarge the set of provided bindings. This first version, however, effectivily allows building parallel Caml programs running in SPMD mode on a network of workstations for example.
Author: Jocelyn Serot.