Dear OCaml developers,
I’m happy to announce the v0.9 release of Jane Street packages! This
release comes 13 months after the last stable one and is packed with a
ton of new stuff.
We are now releasing 94 packages, so 32 more than the previous
release. New packages cover a wide range of areas, such as shell
programming, web programming, standard libraries, Emacs hacking and
Given its size and the increasing number of users, getting this
release out in opam was a challenge. Especially I thank Anil
Madhavapeddy for his help with the testing and fixing of reverse
All the packages are now in opam and the API documentation is
available on our website:
We don’t have public release notes for this release yet. However, we
are in the process of reviewing the past year of change logs and hope
to publish them online soon. In the meantime, here is a summary of
major changes and new features available in this release.
The first noteworthy change is the versioning scheme. We used to
assign version numbers based on our internal ones. However these
didn’t make much sense outside of Jane Street, and especially there
was a huge gap between each releases. So we are now using a more
classic versioning scheme.
In order to keep version numbers going up, they had to be prefixed
with a ‘v’. And because this release introduce a new standard library,
Base, with an API that is still under active development, the new
versions start with v0.9.0.
Faster and more portable builds
This release is the first one to use Jbuilder , a new build system that
was initially designed to ease the publication of our packages. The
main consequences for users are:
much faster compilation times. It has been observed that Jane Street
packages such as Core are now 6 times faster to build and install
improved portability. For instance packages whose code is portable
build on Windows with nothing more than a working OCaml compiler
Regarding portability, this release introduces configurator , a small
but convenient package that helps finding out available system
features. We started using it systematically in packages where we have
Better compatibility with multiple versions of OCaml
Since the switch to ppx our packages used to be stuck with one version
of the compiler. This was due to our heavy use of ppx rewriters and to
the fact that each version of OCaml tends to break code using the
In this release all our ppx code is based on the
ocaml-migrate-parsetree  library. As a result our packages now
build with OCaml from 4.03 to 4.06.
There are still some issues related to ppx versioning that will need
one more round of refactoring to be solved.
New lighter, portable and guilt free standard library
This new release introduces Base , a wholesale replacement of the
standard library distributed with OCaml. It aims to provide better
standards and conventions, while only offering fully portable
Base is still under active development, and work on the API is not yet
finished. However, it was initially developed mostly by reorganising
code from Core_kernel and it is the basis for all the Jane Street code
base, meaning that it is carefully reviewed and heavily tested. Using it
in old and new code is a breeze.
Note that to be fully portable Base doesn’t expose IO
operations. These are provided by the companion Stdio library .
Following is a brief overview of the other new packages available in
this release, with more details available on their respective home
Automatic generation of Hash functions from type expressions and type
- Bin_prot shapes
An extension to bin_prot to check safe use of deserialization.
A library for building dynamic webapps, using Js_of_ocaml.
Helpers for incremental operations on map like data structures.
Handling of large set of incremental outputs from a single input
OCaml bindings for the virtual-dom library
Shexp was initially intended as a S-expression based shell to replace
bash in Makefile based build for Jane Street packages. However, this
project was superseded by Jbuilder. What’s left is a nice process
monad allowing one to construct complex and typed process pipelines.
Shexp is still in its infancy but has already been successfully used
for various purposes.
Essentially an improved version of Unix.create_process, implemented
using vfork on Unix, which is much more efficient than fork.
Bindings to the various *at posix functions.
OCaml plugins for Emacs.
Various helpers for writing expectation tests.
Lighter S-expression parsing library, with a more consistent API and
Trivial meta-programming a la expect-test.
Match statements for zero allocation options.
A S-expression prettifying library.
Single-module library that implements a simple topological-sort algorithm.