OCaml Weekly News

Previous Week Up Next Week

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

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:

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.

serialport.svg

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)

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
  • (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)

Michael Sperber announced

Finally, lots of OCaml content at BOB!

“What happens when we use what’s best for a change?”

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

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.