OCaml Weekly News
Hello
Here is the latest OCaml Weekly News, for the week of December 09 to 16, 2025.
Table of Contents
- Software Engineer (OCaml) – LexiFi, Paris
- Opam repository archival, next run (scheduled 2026-01-01)
- blame, a simple webapp as an unikernel
- A new kind of knowledge-base for OCaml's doc
- Serialport - new serial communication library
- Lwt.6.0.0~beta (direct-style, multi-domain parallelism)
- Call for Participation: BOB 2026 (Berlin, Mar 13)
- Other OCaml News
- Old CWN
Software Engineer (OCaml) – LexiFi, Paris
Alain Frisch announced
Hi all,
LexiFi is looking for a Software Engineer to join our development team in Paris. The work is primarily in OCaml, contributing to our codebase across core components, tooling, and product features.
If you're interested in working on a large, long-lived OCaml system used in production by financial institutions, you can find the full job description here: https://www.lexifi.com/careers/software_engineer/
Happy to answer any questions!
Opam repository archival, next run (scheduled 2026-01-01)
Hannes Mehnert announced
Dear everyone,
we did another run of the archival based on the x-maintenance-intent of opam packages. The run was using opam-repository at commit d684c896eb6f7e6030d6ee65338d9db22a612f01 (Dec 9th, 20:00:00 CET).
The tool used is maintenance-intent-filter with opam 2.5 and OCaml 5.4. It took around 1GB of memory and around 100h of CPU time (donations welcome).
In total, 4510 packages were candidates, out of which 3361 are scheduled for archival.
Testing
To test whether your CI / lock / environment will be affected by the removal of packages, you can create a fresh opam switch and use the opam-repository from the branch:
$ opam repository add archival-20260101 https://github.com/hannesm/opam-repository.git#archival-20260101 $ opam switch create archival-20260101 --repositories archival-20260101 $ eval `opam env`
Alternatively, in CI systems you can do temporarily for testing:
$ opam repo set-url default https://github.com/hannesm/opam-repository.git#archival-20260101
Reverting archival
If you want to preserve a package, please don’t hesitate to comment on the issue https://github.com/ocaml/opam-repository/pull/29058
It is important that you include the package name and its version, as well as where it is used (preferably a URL), and a contact (email address).
Editor’s note: please follow the archive link for the list of packages to be archived.
blame, a simple webapp as an unikernel
Calascibetta Romain announced
I am pleased to announce the development of blame, a unikernel that provides a search engine in the form of a web interface based on an email archive.
This work is sponsored by NLnet as part of our PTT project. For more details on the unikernel, our archive system, and our search engine, we recommend reading our article available here. This project is the synthesis of several projects on the subject:
- mrmime to parse/encode emails
- carton to archive emails
- stem to search emails
- blaze like a Swiss Army knife for manipulating emails and archives
- and of course some of our projects like miou, utcp or vif
If you like our work, you can sponsor us via GitHub or by following the instructions available here. Thank you to everyone who has participated in the development of these projects, whether directly or indirectly.
So, happy hacking "discriminating hackers" :) !
A new kind of knowledge-base for OCaml's doc
Mostafa Touny announced
Hello,
I have been following @sabine's post, https://discuss.ocaml.org/t/looking-for-maintainers-moderators-for-the-ocaml-cookbook/16497.
I really want to contribute but like any engineer, I am pressured on deadlines, which incentivizes me to ask here or in Discord. There are even wonderful books like Type Theory and Formal Proof, but I cannot allocate good time to read them.
That motivated me to think of a new mechanism, where documentations and question-answers are bridged, through Snippet project.
Someone asks a question like this. Instead of answering the question, you must contribute a self-contained paragraph, called "snippet", then cite it in the question. For example the question cites:
- snippet Parametric Abstraction with Functors and Modules design pattern in OCaml, citing
- snippet Functor, OCaml linking to OCaml's doc, citing
- snippet Functor, PL linking to Category theory blog, citing
- snippet Abstract Data Types linking to Software Foundations book.
If some snippet gets a high number of citations, then that would be a signal to contribute it to OCaml's documentations or OCamlverse. In other words, OCaml's cookbooks will be naturally contributed as more people's questions get answered, and will be naturally certified as more people cite it!
The project is built on Dream, open-source, and CC 4.0 licensed. I'd be happy to see OCaml's maintainers self-host an instance of it in OCaml's official website. We could even design a voting mechanism to elect snippets for the official documentation.
For now, I am happy to listen to your feedback.
Serialport - new serial communication library
Mikhail announced
Hi there!
I'm happy to announce the first release of the serialport library. The library is planned to be a cross-platform library for serial port communication in OCaml, which supports both POSIX and Windows systems. It provides synchronous and asynchronous interfaces using various I/O libraries (like Lwt and other).
The library currently only supports POSIX systems.
The main motivation behind creating this project is to address the lack of a comprehensive library for managing serial port communication in different environments, as well as the lack of an intuitive API for this task. The existing OSerial library has significant limitations in terms of functionality and future development, making it unsuitable for use in modern environments.
The serial port library is most inspired by similar implementations in other languages, such as Rust's serialport and Golang's bugst/go-serial.
Usage
Typically, an example of usage is communication between a PC and an Arduino board or other devices via an old-school serial port.
# #require "serialport.unix";;
(* #require "serialport.lwt";; *)
# let port_opts = Serialport.Port_options.make ~baud_rate:9600 ()
and port_name = "/dev/ttyUSB0" in
Serialport_unix.with_open_communication ~opts:port_opts port_name
begin fun ser_port ->
(* Get channels abstractions for high-level working with I/O without buffering. *)
let ic, oc = Serialport_unix.to_channels ser_port in
(* Wait until Arduino has been initialized. *)
Unix.sleep 2;
(* Send the message to the Arduino via the serial port. *)
Out_channel.output_string oc "Hello from PC!\n";
(* Read the response from the serial port. *)
In_channel.input_line ic
end
Enjoy it!
Windows supports
I will be implementing Windows support in the next version (coming soon).
P.S.
I would be delighted to discuss your ideas and suggestion!
Lwt.6.0.0~beta (direct-style, multi-domain parallelism)
Archive: https://discuss.ocaml.org/t/ann-lwt-6-0-0-beta-direct-style-multi-domain-parallelism/17283/8
Raphaël Proust announced
lwt.6.0.0-beta01 has been released!
With this release comes a change in the title of this thread:
- [ANN] Lwt.6.0.0~beta (direct-style, multi-domain parallelism)
+ [ANN] Lwt.6.0.0~beta (direct-style, runtime-event tracing)
This is likely the last beta before the release of Lwt.6.0.0, please test and share your feedback. The highlights are
- (compared to previous beta) no more multidomain-multischeduler parallelism
- it was too buggy,
- you can still use
Lwt_domain
- (compared to previous beta) runtime-events produce a trace of execution of your lwt program for better debugging
- only if
lwt_runtime_eventsis installed, - tracing instructions added by ppx,
- example producing a trace of recent events in case of crash in https://github.com/ocsigen/lwt/tree/6.0.0-beta01/examples/tracing
- example live monitoring the events to send signal in case of stall in https://github.com/ocsigen/lwt/tree/6.0.0-beta01/examples/stall_detection
- only if
- (compared to Lwt.5.9) direct-style with
Lwt_direct- you can write direct-style lwt (within a given scope)
e.g., you can interact with libraries that only provide
iter : ('a -> unit) -> 'a -> unitsuch aslet iter_s f h = Lwt_direct.spawn @@ fun () -> Hashtbl.iter (fun k v -> Lwt_direct.await (f k v)) h
Once again, thanks to @c-cube for the direct-style feature which makes it possible to use Lwt in conjunction with libraries even if they don't include special amenities for it.
Thanks again for @edwin for the bug report on multi-scheduler-related failures.
Call for Participation: BOB 2026 (Berlin, Mar 13)
Michael Sperber announced
Finally, lots of OCaml content at BOB!
“What happens when we use what’s best for a change?”
bobkonf.de/2026/- Berlin, Mar 13
BOB conference is a place for developers, architects, and decision-makers to explore technologies beyond the mainstream in software development and to find the best tools available to software developers today. Our goal is for all participants of BOB to return home with new insights that enable them to improve their own software development experience.
Program
The program features 16 talks and 8 tutorials on current topics.
Talk subjects includes functional programming, software architecture, formal methods, accessibility, UI programming, reactive systems, and domain-driven design.
BOB tutorial include sessions on TypeScript, OCaml, Haskell, Agda, accessibility, and reactive systems.
Stefan Kaufmann will give the keynote talk on digital sovereignty.
Registration
Registration is open - many discount options - including limited early-bird discounts - are available, as are grants for members of groups underrepresented in tech.
Other OCaml News
From the ocaml.org blog
Here are links from many OCaml blogs aggregated at the ocaml.org blog.
- AoAH Day 14: Debugging a Karakeep CLI against the live service
- AoAH Day 13: Heckling an OCaml HTTP client from 50 implementations in 10 languages
- Advent of Code 2025
- AoAH Day 12: Eio Connection pooling and event tracing
- One Mollymawk, Multiple Albatross servers
- AoAH Day 10: Building a TUI for Sortal using Mosaic
- AoAH Day 11: HTTP Cookies and vibing RFCs for breakfast
- Creating
ocaml.nvimto Bring Neovim Support to OCaml's LSP Server - AoAH Day 9: Adding a Bonsai terminal UI to Sortal
- OCaml Roundup: November 2025
- An SVG is all you need
- AoAH Day 8: Building a contacts CLI manager with Sortal
- AoAH Day 7: Converting between JSON and Yaml with yamlt
- AoAH Day 6: Getting a Yaml 1.2 implementation in pure OCaml
- Private repos in OCurrent
- AoAH Day 5: Bytesrw Eio adapters and automating opam metadata
- A webapp to search emails as an unikernel
- AoAH Day 4: Going recursive with Claudeio for Claude
- AoAH Day 3: XDG filesystem paths using Eio capabilities
- AoAH Day 2: Building an OCaml JSONFeed library
- AoAH Day 1: Building a Base32 Crockford library in OCaml
- The AI French Connection to the Practice of Science
- 2025 Advent of Agentic Humps: Building a useful O(x)Caml library every day
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.