Communications and networking
MLpcap
[13-Jul-2004, version
0.9,
Beta]
Libpcap bindings for OCaml.
OCaml-smbclient
[28-Nov-2006, version
0.1.0,
Beta]
OCaml bindings for the libsmbclient library to access files through the samba protocol. It provides high-level functions for that.
Ocurl
[31-Jan-2013, version
0.5.4,
Beta]

An OCaml binding for the
libcurl multi-protocol file transfer library.
Other protocols
Gammu
[04-Jul-2011, version
0.9,
Beta]
This is a binding to libGammu, which provides abstraction layer to work with different cell phones from different vendors.
FTP
FTPlib
[19-Dec-2003,
Beta]
A C library providing communication facilities implementing the client side of FTP. It comes with Objective Caml bindings.
OCaml-Milter
[25-Sep-2012, version
1.0.0,
Stable]
This library provides OCaml bindings to libmilter.
OCaml-SPF
[25-Sep-2012, version
1.0.0,
Stable]
This library provides OCaml bindings to libspf2.
OCaml-SRS
[25-Sep-2012, version
1.0.0,
Stable]
This library provides OCaml bindings to libsrs2.
Corba/COM
OCam'OLE
[17-Nov-2003, version
1.0,
Stable]
OCam'OLE is an OLE binding for OCaml. It enable you to control remote COM objects with OCaml and is provided with OLEGen, a program that generate ML/MLI static type interface from the OLE Type Libraries.
Databases
Another OCaml-sqlite3
[31-Jul-2006, version
0.1.7,
Beta]
OCaml wrapper for the Sqlite3 database library.
OCaml-FreeTDS
[19-Apr-2004, version
0.2]
OCaml-FreeTDS is a binding to the ct-lib component of the FreeTDS library, to access Sybase and Microsoft (or other TDS) database servers.
OCaml-MySQL
[21-May-2012, version
1.1.1,
Stable]

A package for Objective Caml that provides access to MySQL databases.
Ocaml-Sqlite
[16-Apr-2004, version
0.3.5,
Alpha]
Bindings for accessing Sqlite databases from ocaml programs.
OCaml-SQLite3
[26-Feb-2007, version
0.12,
Beta]

OCaml bindings to the SQLite 3 database access library.
OCamlBDB
[12-Nov-2002, version
0.0.1,
Alpha]
A Berkeley DB wrapper for OCaml.
OCamlODBC
[18-Jun-2007, version
2.15,
Stable]


Acces to databases through ODBC drivers.
OCI*ML
[04-Jul-2011,
Development code]

An Oracle binding for OCaml modeled on OraTcl.
OCI8 bindings
[09-Aug-2001, version
0.0.4,
Alpha]
OCI8 bindings for OCaml.
OraCaml
[07-Nov-2006, version
0.1,
Beta]

This library implements an OCaml client interface for an Oracle database. The library is built on top of the OCCI C++ interface available in Oracle 10g. It is efficient and suitable for processing large volumes of data.
PGOCaml
[14-Jan-2013, version
1.7.1,
Stable]
PG'OCaml is a type-safe, simple interface to PostgreSQL from OCaml. It lets you embed SQL statements directly into OCaml code.
Postgres
[09-Aug-2001, version
20040120,
Stable]

PostgreSQL bindings for OCaml.
Games
Peeroml
[01-Aug-2005,
Alpha]
The Peeroml package allows one to construct lego parts inventories or
deconstruct them from a lego set catalog.
General purpose libraries
Strings manipulation
LablPCRE
[30-Jan-2007, version
1.0,
Stable]
A binding for PCRE, providing access to the POSIX regular expression pattern matching API of PCRE, fully supporting Linux and Windows builds of PCRE versions 6.1
- 7.0.
With an emphasis on simplicity and ease of use, LablPCRE offers a
small-footprint interface: four functions and a handful of public
methods in a returned "regresult" object.
PCRE-OCAML
[09-Aug-2001, version
5.12.2]

Perl compatibility regular expressions for OCaml.
Numeric computation
Creal
[07-Nov-2005, version
0.7,
Beta]
An exact real arithmetic module for OCaml.
FFTW
[14-May-2002,
Beta]

An interface to the FFTW library.
FFTW-GEL
[03-Mar-2003, version
1.2.1,
Stable]
FFTW-GEL is an architecture-specific version of FFTW.
l-bfgs
[04-Jul-2011, version
0.5,
Beta]
L-BFGS is a limited-memory quasi-Newton code for bound-constrained optimization. It is a binding to http://users.eecs.northwestern.edu/~nocedal/lbfgsb.html
MLGMP
[23-Nov-2002, version
0.13,
Beta]
An extended precision computation library (integers, rationals, floats) in OCaml.
Numerix
[03-Jul-2006, version
0.22,
Beta]

Numerix is a library implementing arbitrary long signed integers and the usual arithmetic operations between these numbers.
ocaml-fastrandom
[29-Aug-2011, version
0.0.2,
Beta]
A random number generator compatible with standard library Random module (pre OCaml 3.12).
It contains C code to speed up generation and a function to skip a lot of numbers at once. Benchmarks show a 3 fold increase in speed for generating random numbers.
ocaml-glpk
[26-Sep-2005, version
0.1.3,
Beta]
Bindings to GLPK (GNU Linear Programming Kit) which is a package intended for solving large-scale linear programming (LP), mixed integer programming (MIP), and other related problems.
ocamlgsl
[16-Feb-2004, version
0.4.0,
Beta]
A wrapper for GSL, the GNU Scientific Library.
Internationalization
OCaml-gettext
[02-Nov-2009, version
0.3.3,
Beta]
OCaml-gettext provides enough service to build a basic internationalized program. It comes with a pure Ocaml implementation, based on Camomile, a binding to GNU gettext library, and ocaml-gettext, a tool to extract strings from Ocaml source.
OCamlGettext
[12-Nov-2002, version
0.0.1]
GNU gettext binding for OCaml.
Data structures
Ancient
[02-Jun-2009, version
0.9.0,
Beta]

Ancient is an OCaml module that allows you to use in-memory data structures which are larger than available memory and so are kept in swap. If you try this in normal OCaml code, you'll find that the machine quickly descends into thrashing as the garbage collector repeatedly iterates over swapped memory structures. This module lets you break that limitation. Of course the module doesn't work by magic :-) If your program tries to access these large structures, they still need to be swapped back in, but it is suitable for large, sparsely accessed structures.
Secondly, this module allows you to share those structures between processes. In this mode, the structures are backed by a disk file, and any process that has read/write access that disk file can map that file in and see the structures.
Cryptography
OCaml-safepass
[16-Aug-2012, version
1.0.1,
Stable]
OCaml-safepass is a library offering facilities for the safe storage of user passwords. By "safe" we mean that passwords are salted and hashed using the Bcrypt algorithm. Salting prevents rainbow-table based attacks, whereas hashing by a very time-consuming algorithm such as Bcrypt renders brute-force password cracking impractical.
OCaml-SSL
[28-Nov-2006, version
0.4.0,
Beta]

OCaml bindings for libssl to secure connections by using ssl encryption in your sockets.
Zarith
[17-Apr-2012, version
1.1,
Stable]
The Zarith library implements arithmetic and logical operations
over arbitrary-precision integers. It uses GMP to efficiently
implement arithmetic over big integers. Small integers are
represented as Caml unboxed integers, for speed and space economy.
Compression
CamlBZ2
[07-Nov-2008, version
0.6.0,
Beta]
CamlBZ2 provides OCaml bindings for libbzip2, a popular compression library which typically compresses better (i.e., smaller resulting files) than gzip.
Using CamlBZ2 you can read and write compressed "files", where files can be anything offering an in_channel/out_channel abstraction (files, sockets, ...).
Also, with CamlBZ2 you can compress and decompress strings in memory using the bzip2 compression algorithm.
CamlZip
[23-Oct-2012, version
1.05,
Stable]
An Objective Caml library that provides easy access to compressed files in ZIP and GZIP format, as well as to Java JAR files.
ocaml-archive
[29-Aug-2011, version
2.8.4+1,
Stable]
Bindings to libarchive, a C library for reading and writing tar, cpio, zip, ISO, and
other archive formats.
OCaml-lzma
[19-Apr-2010, version
0.01,
Alpha]
OCaml bindings for the lzma library.
ocaml-lzo
[21-May-2012, version
0.0.1,
Development code]
Bindings to LZO - a portable lossless data compression library.
ocaml-snappy
[21-May-2012, version
0.0.1,
Development code]
Bindings to snappy - fast compression/decompression library.
Languages interfaces
Pycaml
[29-May-2002,
Beta]

A system for binding OCaml code with python.
Multimedia
OCaml-Allegro
[07-Jan-2008, version
20071223,
Development code]
This is an OCaml binding for Allegro.
Allegro is a cross-platform library intended for use in computer games and other types of multimedia programming.
Audio
libsndfile-ocaml
[08-Jan-2007,
Alpha]
Bindings to the libsndfile C library.
Metaphone
[16-Aug-2005, version
1.0,
Stable]
Metaphone is an implementation of Lawrence Philips' Double Metaphone phonetic algorithm in OCaml. In fact it's just a very thin set of bindings around the original C++ implementation (with some bug fixes).
OCaml-alsa
[28-Nov-2006, version
0.1.3,
Beta]
Bindings to the alsa library.
OCaml-lame
[28-Nov-2006, version
0.1.1,
Beta]
Bindings to the lame library.
ocaml-mad
[28-Nov-2006, version
0.2.1,
Beta]
Bindings for the mad library which provides functions for encoding wave audio files into mp3.
ocaml-shout
[15-Jan-2004, version
0.2.2,
Beta]
Bindings for the shout library which provides functions for sending mp3 / ogg data to icecast 2 servers which are used to create streamed web-radios.
ocaml-vorbis
[28-Nov-2006, version
0.5.0,
Beta]
Bindings for the ogg/vorbis library which provides functions for encoding, decoding and reading tags of ogg/vorbis files.
3D graphics
CamlGL
[30-Dec-2002, version
0.9,
Beta]
OpenGL bindings for OCaml.
glMLite
[07-Jan-2008, version
0.03.17,
Beta]
This package provides OpenGL bindings for OCaml. There is a module for GL, Glu and Glut, and also a small jpeg loader module. The names of the functions are the same than in the C API.
Some test files are provided, and also some of the demonstration code samples from the red-book converted in OCaml.
LablGL
[12-Dec-2007, version
1.03,
Stable]

An Objective Caml interface to OpenGL.
lablglut
[04-Nov-2002, version
1.3,
Development code]
A GLUT 3.7 binding, bundled with a Tk-independent modification of LablGL.
OCamlODE
[18-Nov-2010, version
0.6,
Beta]
OCamlODE is a set of Objective CAML bindings to the Open Dynamics Engine (ODE). It comes with a very simple demonstration game.
SoCaml
[28-Jan-2004, version
1.1,
Beta]
A binding for the object-oriented 3D scene library Open Inventor (tm).
2D graphics
Bindings for Chipmunk
[30-Apr-2008, version
0.01,
Stable]
Chipmunk is a rigid body physics library, designed for
2D video games. It is intended to be fast, numerically
stable, and easy to use.
Cairo-OCaml
[29-May-2006, version
1.0.0,
Stable]
Objective-Caml bindings for the Cairo library.
CamlImages
[17-Nov-2009, version
3.0.2,
Stable]

An image processing library, which provides loading and saving various image formats with an interface for the Caml graphics library. It has also an interface with the freetype library to draw texts using truetype fonts.
GD4O
[25-Nov-2003, version
0.7,
Alpha]
An OCaml interface to the GD graphics library, which is an ANSI C library for the dynamic creation of images. GD creates PNG and JPEG images, among other formats
GLCaml
[25-Feb-2008, version
20080215,
Beta]


GLCaml (http://glcaml.sourceforge.net) is a compact set of Ocaml bindings to OpenGL versions 1.0 through 2.1, for Windows, Linux and OS-X. It also contains optional compact bindings for SDL (http://www.libsdl.org).
ImageMagick Binding for OCaml
[09-Dec-2005, version
0.15,
Beta]
An interface to the library of ImageMagick.
ocalibs
[17-May-2004,
Development code]
Ocalibs is a collection of libraries for the ocaml programming language, designed to make windows game development easier. It will support DirectX for graphics and ODE for physics.
OCaml-Ming
[07-Jan-2008, version
0.01a,
Alpha]
OCaml bindings for the Ming library,
a library to create Flash animations.
OCaml-SFML
[09-Aug-2010, version
0.03c,
Beta]
OCaml binding for SFML (Simple and Fast Multimedia Library). SFML is a free multimedia library that provides low and high level access to
graphics, input, audio, etc.
OCamlSDL
[05-Nov-2002, version
0.7.2,
Beta]

OCaml interface to the Simple DirectMedia Layer library. SDL is used for example by 3D games under Linux.
PLPlot
[03-Mar-2008, version
5.8.0,
Alpha]
Ocaml language bindings for plplot plotting library.
Pocengine
[14-Mar-2005, version
0.2.0,
Beta]

A game engine to help creating more games more easily.
The engine is written mainly in Ocaml with some XML and LUA.
Programming languages
Objective C - Objective Caml bridge for Mac OS X
[08-Jan-2008,
Alpha]
The goal of this project is to provide access to Mac OS X's APIs from OCaml. The project focuses on the set of APIs referred to as "Cocoa", that is APIs based on Objective C artefacts (classes, objects, protocols, methods). With such access to Cocoa's APIs, it is expected that OCaml programmers would be able to design, develop and build native MacOSX applications with ease.
Some features are explicitly out of scope: - general support of C-type apis (structs) - general support for Objective C (this project is targetted at Mac OS X) - platforms different from MacOSX
The targetted user is an intermediate level developer, at ease with all of OCaml constructs (including modules, classes, labels) and with Cocoa programming.
Interpreters
ocaml-lua
[10-Sep-2012, version
1.0,
Stable]
OCaml-lua provides bindings to the Lua programming language. Lua is a scripting language particularly useful when you need to embed a language in your application.
This project provides the bindings required to embed Lua.
Publishing
Blahcaml
[18-Feb-2010, version
2.0,
Stable]
Blahcaml provides basic Ocaml bindings to the Blahtex library. Blahtex is written in C++, and aims at the conversion of TeX equations into MathML.
Science
Maths and Logic
Mesh
[14-Apr-2011, version
0.7,
Beta]
OCaml interface to various mesh generators, in particular triangle.
nlopt
[20-Jun-2012,
Development code]
OCaml bindings to the NLopt nonlinear optimization
library. The wrapper code implements an almost complete NLopt API (the
only exception are vector-valued constraints).
OCaml-R
[11-Feb-2010, version
0.2,
Beta]

OCaml-R provides bindings to the R math library and the R library usable to embed R in your application.
OCamlmex
[02-May-2002]
An OCaml/Matlab interface.
Ocamlplot
[24-Nov-2003, version
0.5.6,
Beta]
An OCaml interface to the GNU libplot library.
Ocamlyices
[22-Sep-2010, version
0.4,
Beta]
Yet another binding for Yices SMT 1.x. Based on CamlIDL, this library
allows the access to both Yices APIs (full and light), unsatisfiable
cores, bit vectors, and more experimental features (interrupting,
switching between APIs).
Linguistics
Ocaml Link Grammar
[29-May-2006, version
0.1,
Beta]
OCaml interface to Link Grammar.
This package contains the OCaml interface to Link Grammar. It enables Ocaml
applications to use Link Grammar to parse English sentences.
Software development
Debugging
ocaml-gperftools
[18-Jun-2012, version
0.1,
Beta]
gperftools library provides fast, multi-threaded malloc() and some nifty performance analysis tools.
These OCaml bindings are useful to monitor memory usage and control behaviour of malloc() when the program is linked against tcmalloc.
System
System programming
libaio-ocaml
[19-Mar-2012, version
1.0,
Stable]
OCaml bindings for the Linux libaio library for asynchronous read/write operations.
OCaml-dbus
[12-Dec-2006, version
0.01,
Alpha]
Bindings to dbus. This is an alpha release (few memory leaks, missing some proper finalize
function, and maybe segfault lurking), and the library is quite big so
not everything is wrapped.
However it should works for basic use, and the test program should be
enough to get to know how to use it.
OCaml-event
[17-Feb-2005, version
0.5.0]
Ocaml bindings for the libevent API.
The libevent API provides a mechanism to execute a callback function
when a specific event occurs on a file descriptor or after a timeout has
been reached. Furthermore, libevent also support callbacks due to
signals or regular timeouts.
ocaml-extunix
[18-Jun-2012, version
0.0.5,
Development code]
Thin bindings to various low-level system APIs which are not covered by Unix module.
OCaml-Sem
[07-Nov-2005, version
0.0.2,
Beta]
Sem is an OCaml module implementing support of POSIX semaphores. The package contains code in C and OCaml programming languages. Once compiled it makes a usual OCaml library usable in both byte-code and native code development.
ocaml-winsvc
[21-May-2012, version
0.0.1,
Development code]
The library to make OCaml program act as a Windows service.
Oclock
[22-Sep-2010, version
0.2,
Beta]
Precise POSIX clock library for Ocaml. This library uses the
clock_gettime(2) family of functions, to get precisions from below the
milliseconds upto the nanoseconds depending on the platform (system
and CPU).
It lets you measure time from the real-time clock, monotonic clocks,
or CPU-time clocks of the current process, of a remote process, or of
a thread.
Hardware
APM
[05-Nov-2002, version
1.00,
Stable]

This package provides basic interface to Linux APM driver for Objective Caml programs.
Camlusb
[17-Feb-2005, version
1.0b,
Beta]
Camlusb is an Ocaml binding to libusb.
Libusb is a portable library to access USB devices in user space, available for various operating systems.
daml
[12-Dec-2008,
Development code]
daml is an OCaml binding to the CUDA API.
OCaml-Lirc
[03-Mar-2003, version
0.1.0,
Beta]
OCaml bindings for the LIRC (Linux Infrared Remote Control) library.
OCamlPCSC
[30-Jul-2007, version
0.6,
Beta]

An OCaml binding that allows the manipulation of Smartcards in OCaml, both in Linux, through the C library PCSC-Lite provided by M.U.S.C.L.E. and in Windows through Winscard.dll.
File systems and system administration
Cash
[28-Aug-2002, version
0.20,
Beta]

Cash is a Unix shell that is embedded within Objective Caml. It's a Caml implementation of (an as large as possible subset of) the API of Scsh, the Scheme Shell by Olin Shivers. The Scsh API is designed for writing useful standalone Unix programs and shell scripts (but rather not for interactive command use). It spans a wide range of application, from “script” applications usually handled with perl or sh, to more standard systems applications usually written in C.
Inotify bindings
[22-Nov-2006, version
0.2,
Beta]
A small bindings for inotify, aka linux file system notification new subsystem.
libguestfs
[14-Apr-2009, version
0.9,
Beta]
libguestfs is a library for accessing and modifying guest disk images. Amongst the things this is good for: making batch configuration changes to guests, getting disk used/free statistics (see also: virt-df), migrating between virtualization systems (see also: virt-p2v), performing partial backups, performing partial guest clones, cloning guests and changing registry/UUID/hostname info, and much else besides.
libguestfs uses Linux kernel and qemu code, and can access any type of guest filesystem that Linux and qemu can, including but not limited to: ext2/3/4, btrfs, FAT and NTFS, LVM, many different disk partition schemes, qcow, qcow2, vmdk.
libguestfs provides ways to enumerate guest storage (eg. partitions, LVs, what filesystem is in each LV, etc.). It can also run commands in the context of the guest. Also you can mount guest filesystems on the host (requires root privs and NFS).
libguestfs is a library that can be linked with C and C++ management programs (or management programs written in OCaml, Perl or Python). You can also use it from shell scripts or the command line.
Mlfuse
[23-Jul-2002,
Beta]
An OCaml binding for the Fuse (File System in User Space) library.
ocaml-glob
[27-Oct-2008, version
0.1.0,
Beta]
This is a trivial wrapper around libc's glob(3) function for OCaml. The Glob
module interface contains a single function, glob. This function takes a
string argument possibly containing shell wildcards, and returns an array
containing the names of the file system entries matching it.
OCamlfuse
[26-Sep-2005,
Beta]
Multithreaded binding to the fuse api.
OCamlPAM
[25-Feb-2008, version
1.0,
Stable]
OCamlPAM is a wrapper for the Pluggable Authentication Modules (PAM) library. PAM provides a flexible mechanism for authenticating users via administrator-defined policies.
Distributed and parallel programming
OCamlMPI
[10-Aug-2001,
Stable]
An interface to the MPI message-passing library.
OCamlPVM
[10-Aug-2001,
Stable]
An interface to the PVM message-passing library.
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.
User interfaces
X
OCaml-Xlib
[13-Nov-2008,
Alpha]
OCaml bindings for the Xlib library.Also includes GLX for OpenGL windowing.
Text interfaces
OCaml Curses
[27-Aug-2007, version
1.0.1,
Beta]
OCaml Curses is a project to provide curses / ncurses bindings for the Objective Caml language. It was formally known as Text Mode Kit (TMK), but the TMK part of the project is not supported any more, and instead we are just concentrating on providing reliable OCaml curses bindings.
OCaml-newt
[07-Mar-2008, version
0.1,
Beta]
Newt is a simple text window system, designed as a better replacement for systems such as dialog. It is used in the Red Hat text mode installer (anaconda).
This is a set of bindings for calling newt from OCaml programs.
Graphical toolkits
CamlTK
[10-Aug-2001]
A library for interfacing Objective Caml with the scripting language Tcl/Tk which is included in the OCaml distribution.
LablGTK
[16-Jul-2004, version
1.2.7,
Stable]

An Objective Caml interface to gtk, providing a strongly typed, yet very comfortable, object-oriented interface to gtk+.
LablGTK2
[27-Aug-2012, version
2.16.0,
Mature]

An Objective Caml interface to gtk+ 2.x.
LablGtkSourceView
[28-Aug-2006, version
0.2.0,
Beta]
LablGtkSourceView are the OCaml bindings for GtkSourceView, a GTK widget which extends the standrd GTK text widgets implementing syntax highlighting, automatic indentation, and other typical features of source editors.
Using LablGtkSourceView you can instantiate and use GtkSourceView widgets in OCaml programs which use GTK through the LablGtk interface.
Lablgtkspell
[28-Apr-2004, version
1.0.0,
Stable]
Bindings for the GtkSpell spellchecking widget library for use with lablgtk2.
LablScintilla
[01-Feb-2007, version
0.9pre1,
Beta]
Caml for Scintilla is a free source and binary package which adds syntax coloring for the Objective Caml language to the multi-platform (Win32 and GTK+) Scintilla editing component and SciTE text editor.
Lablwebkit
[28-Aug-2012, version
1.8.2,
Stable]
A
binding to the corresponding webkit-gtk version. Almost all of its API
besides the DOM-related function is handled.
OCaml-Win32
[26-Oct-2004, version
1.0,
Stable]
OCaml-Win32 is a set of OCaml wrappers for the Win32 API. You can use this library to write true Win32 GUI applications in OCaml. A small sample application is provided.
Osiris
[26-Feb-2002,
Beta]
Osiris is very-easy-to-use GUI (graphical user interface) system for OCaml. It's built on top of the OCaml Win32 native API binding and enable the creation and control of most of the standard user interface components.
SciLabl
[27-Sep-2004, version
pre-alpha,
Alpha]
A LablGTK2 wrapper for Scintilla source code editing widget.
wxocaml
[26-Oct-2004,
Alpha]
Binding for wxWidgets.
XML
gdome2-xslt
[11-Apr-2003, version
0.0.6,
Alpha]
A C and Objective Caml library to apply XSLT stylesheets to gdome2 documents.
gmetadom
[11-Apr-2003, version
0.2,
Alpha]
A binding to gdome2, the GNU DOM Level 2 implementation.
lablgtkmathview
[11-Apr-2003, version
0.4.1,
Beta]
A lablgtk binding to GtkMathView, a Gtk widget to render MathML 2.0 documents.
Parsers and pretty-printers
OCaml-xmlr
[04-Apr-2004, version
1.0,
Stable]
ocaml-xmlr provides bindings for libxml's xmlreader.
OCamlExpat
[14-Mar-2005, version
0.9.1,
Beta]

An ocaml wrapper for the Expat XML parsing library.
Others
Bindings for ORBit2
[28-May-2004, version
0.1.0,
Alpha]
Bindings for ORBit2, the CORBA ORB of the GNOME project. There is a IDL compiler that maps CORBA types to OCaml types, and a runtime library that does the necessary conversions.
mod_ocaml
[03-Dec-2004, version
1.3.4,
Stable]

A set of OCaml bindings for the Apache API, allowing you to run CGI scripts written in OCaml directly inside the Apache webserver.