OCaml Weekly News
Hello
Here is the latest OCaml Weekly News, for the week of January 20 to 27, 2026.
Table of Contents
- lwt-to-eio: Automating the mechanical parts of Lwt -> Eio migration
- The new owners-maintainers of Dream
- Slipshow!
- Bancos: A persistent Key-Value store based on ROWEX/P-ART
- restricted 1.2.0 limit which system operations and which parts of the filesystem your program can access
- dead_code_analyzer 1.1.0
- OCaml security team
- Proposal: make the minimum tested opam 2.1 and higher
- csexp-query initial release
- Other OCaml News
- Old CWN
lwt-to-eio: Automating the mechanical parts of Lwt -> Eio migration
oug-t announced
Hi everyone,
Like many of you, I’ve been looking into migrating my libraries from Lwt to Eio to take advantage of OCaml 5’s direct-style concurrency. While the manual migration guides are excellent, I found myself making the same mechanical changes over and over—flattening binds, unwrapping promises, and rewriting maps.
So, I built lwt-to-eio, a tool that automates the boring parts of this transition.
What it does (The Magic)
It parses your OCaml source code and performs AST-level rewrites to transform monadic Lwt patterns into direct-style Eio code.
Input (Lwt):
let fetch_data id =
Lwt.bind (Db.get_user id) (fun user ->
Db.get_posts user.id >>= (fun posts ->
Lwt_list.map_p process posts
)
)
Output (Eio)
let fetch_data id =
let user = Lwt_eio.Promise.await_lwt (Db.get_user id) in
let posts = Lwt_eio.Promise.await_lwt (Db.get_posts user.id) in
Eio.Fiber.List.map process posts
Current Status & Help Wanted
This is currently an MVP. It handles the most common patterns I encountered (binds, map_p, sleep, return), but there is plenty of surface area left to cover.
I'm looking for contributors to help add rules for other common patterns. I've tagged a few issues as "Good First Issues" if anyone wants to dip their toes into ppxlib and AST rewriting:
Lwt.catch->try/with: Transforming monadic error handling to direct style exceptions.Lwt_iosupport: Mapping legacy IO functions to Eio buffers.
Feedback, PRs, and "It broke on my file!" reports are all very welcome.
Happy hacking!
The new owners-maintainers of Dream
Anton Bachin announced
I am very pleased to announce that Dream, the Web framework, is now owned and maintained by a new team, of:
- Sabine Schmaltz (@sabine), maintainer of OCaml.org
- Sebastian Willenbrink ( https://github.com/Willenbrink ), author of the effort to port Dream to Eio
- Yawar Amin (@yawaramin), author of dream-html, and the Web framework ReWeb
…among their other projects and contributions to the OCaml community. All are major and long-term contributors to, and users of, Dream.
I’ve stepped back from ownership and overall maintenance, but will still work on parts of Dream every now and then as a contributor, along with all of Dream’s contributors :slight_smile:
Dream is discussed in this forum, in its issue tracker, #webdev in the OCaml Discord, and #dream on Zulip. Dream has a (roughly) weekly open video call on Discord for contributors to discuss technical issues with each other and with maintainers.
Welcome to Sabine, Sebastian, Yawar, the new team!
Slipshow!
Paul-Elliot announced
Hello!
It is in a state of sliplessness that I announce the new release of Slipshow!
Slipshow 0.8.0: Les gnomes voleurs de Slipshow
This release comes with a handful of bugfixes, in particular on the new and experimental record-and-replay for drawings.
But the star of the release is the new documentation! For instance, the tutorial on structuring your presentation visually will allow you to create presentations such as this one, presenting Slipshow's business model:
https://github.com/user-attachments/assets/41539c78-f998-4597-9392-4d555435d5a3
The tutorials also includes live code blocks, and Slipshow has now a dedicated website.
Here is the full changelog!
Features
- Add a "mirror mode" to the speaker view, which mirrors the entire screen you are sharing with the audience (#188)
- Add support for external files through CLI and frontmatter (#191)
- Add shortcut to delete or unselect selection in drawing editing (#192)
- Add a "Close editing panel" button when there are no strokes (#192)
- Default file names for drawing recording depend on their names (#192)
- Improve
-oargument wrt directories (#190) - Inline SVGs instead of adding them as images, allowing the use of classes and ids in SVGs (#190)
- Rework the docs! (#190)
Fix
- Fix pauses time not updated after a rerecording (#192)
- Fix drawing editing shortcuts triggering even when focusing on a textarea (#192)
- Fix interaction between fields and drawing editing shortcuts (#192)
- Fix order of
clearanddrawaction: the first comes first (#192) - Use .woff2 for embedded fonts (#190)
Thanks again to NLNet for supporting the development of Slipshow!
Bancos: A persistent Key-Value store based on ROWEX/P-ART
Archive: https://discuss.ocaml.org/t/ann-bancos-a-persistent-key-value-store-based-on-rowex-p-art/17719/1
Calascibetta Romain announced
I am pleased to announce the first release of bancos, our new persistent Key-Value store.
Bancos is an implementation of an Adaptive Radix Tree (ART) modified to support parallel reads and writes (ROWEX) directly on a file (based on the RECIPE/P-ART approach).
- Our project is designed for indexing with file-backed storage.
- We provide an implementation compatible with unikernels. It is currently being used by kevin, an HTTP/1.1 server unikernel that exposes routes for key insertion and lookup.
- This work is part of our broader goal to index emails by their
Message-ID. An extension of our tool blaze now allows searching through archives now (if you are interesting about our archive system, you can take a look here). This indexing also enables efficient email thread extraction usingIn-Reply-Toheaders.
While still experimental, the results — especially when paired with our Miou scheduler — are very promising. This release of bancos comes alongside several updates across our stack:
- flux: Our OCaml stream library for Miou
- carton: For manipulating PACKv2 archives (as used by Git)
- bstr: A library for handling bigbytes and memory buffers
- cachet: A library to cache
mmapsyscall results. Notably, this include significant work on an asynchronous write pipeline for unikernels on block devices
You can find the project here: https://github.com/robur-coop/bancos
For a deeper dive into the implementation of bancos and its application to email indexing, we have prepared a detailed blog post here.
Happy hacking!
restricted 1.2.0 limit which system operations and which parts of the filesystem your program can access
removewingman announced
Hello,
I am happy to announce a new version of restricted.
This library lets you limit which system operations and which parts of the filesystem your program can access. Call it as early as possible in your program so that the rest of the code runs with reduced privileges. Currently, actual enforced restrictions are implemented for these operating systems:
- OpenBSD
- Linux (only filesystem view)
Even on other operating systems, you can still use restricted to document which privileges your program needs. Users can then test if your program respects these promises with tools such as pledge on Linux. Enjoy :slight_smile:
CHANGELOG:
- add Linux (only filesystem view) via landlock(7)
- except unlink/removing, whole other thing with LANDLOCK_ACCESS_FS_READ_FILE in landlock
- add Semantic Versioning
- change description to make it more clear
- tested with flambda switch on:
- x86_64-openbsd
- x86_64-arch-linux, x86_64-alpine-linux (Landlock ABI version: 7)
dead_code_analyzer 1.1.0
fantazio announced
Hello everyone,
I am happy to announce the release of the dead_code_analyzer 1.1.0 (available via opam) !
Thanks to @edwinans, @nojb, and @Tibo for their contributions, reviews, and feedback.
This release greatly improves the support of projects built with dune and introduces some user documentation.
The tool still requires OCaml 5.2. There is a work in progress to support OCaml 5.3.
If you encounter a problem with this release, please report it on the github repository. Feedback and contributions are welcome.
OCaml security team
Continuing this thread, Hannes Mehnert announced
Dear everyone, as we discussed in the earlier public meeting, we plan to have every 3 months another one.
The next public security meeting is scheduled for Thursday, March 19th 14:00 CET - 16:00 CET. Please put that into your calendar if you plan to attend.
Proposal: make the minimum tested opam 2.1 and higher
Anil Madhavapeddy announced
Much as we did a while back with raising the minimum version of OCaml tested to 4.08, it's now time to raise the minimum version of opam that we test in the CI matrix.
opam 2.0.0 was released in 2018, and ever since then the Docker images have built every version, with the default being the minimum version (2.0.x) all the way through to 2.5.x.
I now propose that we raise the minimum tested version of opam to 2.1.x. Looking in repology/opam, the only notable distro still shipping opam 2.0 is Ubuntu 20.04, which went EOL in May 2025. Ubuntu 24.04 still has have 2.1.x, so I expect this will be the testing floor for some years until that rotates out.
The most observable improvement from this will be the opam-repository CI 'The actions to process have cyclic dependencies' failure will no longer bug us for every package submitted that has {with-test} clauses!
csexp-query initial release
Josh Berdine announced
The csexp-query 0.1.0 opam package is now available.
If you have ever wanted to query e.g. the output of dune describe (but didn't want the dependency cone of sexp), then csexp-query might be interesting.
csexp-query is a minimal command-line tool to query canonical s-expressions (csexp) from stdin. For example,
dune describe workspace --format=csexp | csexp-query '(field root)'
will extract the dune project root.
Happy hacking!
Other OCaml News
From the ocaml.org blog
Here are links from many OCaml blogs aggregated at the ocaml.org blog.
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.