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 ═════════════════════════════════════════ Archive: 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! [LexiFi] [https://www.lexifi.com/careers/software_engineer/] Opam repository archival, next run (scheduled 2026-01-01) ═════════════════════════════════════════════════════════ Archive: 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. [opam-repository at commit d684c896eb6f7e6030d6ee65338d9db22a612f01] [maintenance-intent-filter] [donations welcome] 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 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 ══════════════════════════════════════ Archive: 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" :) ! [`blame'] [NLnet] [PTT] [here] [mrmime] [carton] [stem] [blaze] [miou] [utcp] [vif] [via GitHub] [here] A new kind of knowledge-base for OCaml's doc ════════════════════════════════════════════ Archive: Mostafa Touny announced ─────────────────────── Hello, I have been following @sabine's post, . 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. [Type Theory and Formal Proof] [Snippet] [this] [Parametric Abstraction with Functors and Modules] [Functor, OCaml] [Functor, PL] [Abstract Data Types] [OCamlverse] Serialport - new serial communication library ═════════════════════════════════════════════ Archive: 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. [serialport] [OSerial] 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: 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_events' is installed, • tracing instructions added by ppx, • example producing a trace of recent events in case of crash in • example live monitoring the events to send signal in case of stall in • (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 -> unit' such as ┌──── │ let 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) ═════════════════════════════════════════════════ Archive: 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. [`bobkonf.de/2026/'] [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. [Program] [program] [Registration] ╌╌╌╌╌╌╌╌╌╌╌╌╌╌ [Registration] is open - many discount options - including limited early-bird discounts - are available, as are grants for members of groups underrepresented in tech. [Registration] 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.nvim' to 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] [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.nvim' to 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]. [Alan Schmitt] [send me a message] [the archive] [RSS feed of the archives] [caml-list] [Alan Schmitt]