OCaml Weekly News
Hello
Here is the latest OCaml Weekly News, for the week of August 26 to September 02, 2025.
Table of Contents
Porting my Toy OCaml Build System to Windows
Steve Sherratt announced
mlfront-shell - reference implementation of a build system
Archive: https://discuss.ocaml.org/t/ann-mlfront-shell-reference-implementation-of-a-build-system/17186/1
jbeckford announced
I’ve made a reference implementation (“mlfront-shell”) of a build system that is mostly working but has zero (0) performance work so far. Among the many existing build + package managers, the “mlfront-shell” tool sits closest to Nix. It works on Windows, can download binary assets, is language-neutral with an easy-to-parse JSON build file.
The reference implementation comes with a specification doc and a JSON schema. Since I’ll eventually be integrating the build system features into dk
(my OCaml scripting tool), the docs live there. You’ll find a Quick Start guide and a Comparison table (the opam
and dune
comparisons are pertinent):
https://github.com/diskuv/dk/tree/1.0?tab=readme-ov-file#
Huge thanks to the a la carte authors, and also to @hbr for fmlib_parse.
Aside: Wow, another Windows-friendly build system post at https://discuss.ocaml.org/t/porting-my-toy-ocaml-build-system-to-windows/17185 !
Links:
- JSON schema for JSON build files: Follow the Quick Start - Build Tool to see how to use it for auto-completion
- Specification: https://github.com/diskuv/dk/blob/1.0/docs/SPECIFICATION.md
- https://discuss.ocaml.org/t/ocaml-version-of-the-build-systems-a-la-carte-paper/17042 topic
- Source Code: https://gitlab.com/dkml/build-tools/MlFront (in particular the MlFront_Exec and MlFront_Thunk subprojects)
An experimental branch of Merlin based on Domains and Effects
Xavier Van de Woestyne announced
The Merlin Team :man_mage: is very happy to announce an experimental version of Merlin: Merlin Domains!
As a reminder, Merlin is an editor service that provides advanced IDE features for OCaml. It can be used as a standalone binary or as a library, and is notably used by OCaml LSP Server. In other words, if you are using the OCaml Platform extension with Visual Studio Code, or ocaml-eglot with Emacs, you are already using Merlin under the hood.
Even though over the years we’ve had relatively few complaints about Merlin’s performance, in some contexts (notably very large files), Merlin’s mechanism (parsing file
(with recovery) -> typing file
(with recovery) -> performing analysis
) could sometimes cause slowdowns!
To address these slowdowns, we started an experimental branch that uses domains and effects, which allow us to interrupt the typing process at the right moment when an analysis request comes in.
In practice, let’s say you run an analysis command on a very large file: the type-checker will progress up to the location that makes the analysis possible, run the analysis phase, return the result, and then continue typing the file. This separation is possible thanks to control flow management enabled by effects, and by having two domains interact with each other.
In practice, this makes the analysis phases much more efficient! We think this is a great example of migrating a regular OCaml application to one that takes advantage of multicore. For a more technical explanation of how this experimental branch works internally, @pitag and @Lyrm will talk about it at Lambda World, in their talk When magic meets multicore - OCaml and its elegant era of parallelism.
Currently, the branch is still in its incubation phase, and we’d be delighted to get your feedback!
How to test the branch
To avoid installing this version of merlin
unintentionally, we suggest pinning this branch in the switches where you want to experiment with this new version (compatible with Merlin’s main
):
opam pin add https://github.com/ocaml/merlin#merlin-domains
Although this experimental branch passes the test-suite, your feedback is very important to help collect potential bugs we may have missed.
We’ve added a Bug/Merlin-domains
label to organize tickets related to this experimental branch.
Next steps
In the future, the goal of this branch (which will be regularly rebased on main
) is to become the main branch, so that all users can benefit from these improvements.
At the same time, the rest of the ecosystem depending on Merlin (such as the OCaml LSP Server) will be adapted to also take full advantage of these new features!
Happy Hacking! The Merlin Team :man_mage:
Ppx_rapper support, Caqti 2.0 port
Continuing this thread, Chukwuma announced
I recently implemented a database connection using caqti last 2 weeks and wrote a blog about it. Here it is, https://fearful-odds.rocks/blog/postgres-caqti-pooling-ocaml-2025/
I would like to listen to your feedback or comments regarding my approach. Cheers
Outreachy Demo Day August 2025
Continuing this thread, Patrick Ferris announced
For those that could not join us live, the presentations have now been uploaded to watch.ocaml.org – thank you everyone who attended and congratulations once again to our fantastic Outreachy interns @pawaskar-shreya and @kemsguy7, and a big thanks to our mentors @gridbugs and Michael Dales :two_hump_camel: !
Other OCaml News
From the ocaml.org blog
Here are links from many OCaml blogs aggregated at the ocaml.org blog.
- Upcoming OCaml Events
- GeoTessera Python library released for geospatial embeddings
- Mosaic Terminal User Interface
- Building Database Layer in OCaml: From UUID v7 to Standardized Error Handling
- Rust for Everyone!
- Using ocaml-lsp-server via an MCP server
- Terminal GUI for ocluster monitoring
- Modern PostgreSQL Connection Pooling in OCaml (2025): Caqti + Dream + Lwt
- A ZFS Scaling Adventure
- Label Maker in js_of_ocaml using Claude
Old CWN
If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.
If you also wish to receive it every week by mail, you may subscribe to the caml-list.