[Caml-list] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt
2025-12-16T13:31:08Z

[-- Attachment #1: Type: text/plain, Size: 20675 bytes --]

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:
<https://discuss.ocaml.org/t/job-software-engineer-ocaml-lexifi-paris/17586/1>

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>

[https://www.lexifi.com/careers/software_engineer/]
<https://www.lexifi.com/careers/software_engineer/?utm_source=chatgpt.com>

Opam repository archival, next run (scheduled 2026-01-01)
═════════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/opam-repository-archival-next-run-scheduled-2026-01-01/17587/1>

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]
<https://github.com/ocaml/opam-repository/tree/d684c896eb6f7e6030d6ee65338d9db22a612f01>

[maintenance-intent-filter]
<https://github.com/hannesm/maintenance-intent-filter/tree/14d3d80ed1d26f2779f0ced3e3b9852bc59ac7fb>

[donations welcome] <https://robur.coop/Donate>

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
══════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-blame-a-simple-webapp-as-an-unikernel/17588/1>

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'] <https://github.com/robur-coop/blame.git>

[NLnet] <https://nlnet.nl/>

[PTT] <https://nlnet.nl/project/PTT/>

[here]
<https://blog.robur.coop/articles/2025-04-12-ptt-search-webapp.html>

[mrmime] <https://github.com/mirage/mrmime>

[carton] <https://github.com/robur-coop/carton>

[stem] <https://github.com/robur-coop/stem>

[blaze] <https://github.com/dinosaure/blaze>

[miou] <https://github.com/robur-coop/miou>

[utcp] <https://github.com/robur-coop/utcp>

[vif] <https://github.com/robur-coop/vif>

[via GitHub] <https://github.com/sponsors/robur-coop>

[here] <https://robur.coop/Donate>

A new kind of knowledge-base for OCaml's doc
════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/a-new-kind-of-knowledge-base-for-ocamls-doc/17593/1>

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.

[Type Theory and Formal Proof]
<https://www.cambridge.org/core/books/type-theory-and-formal-proof/0472640AAD34E045C7F140B46A57A67C>

[Snippet] <https://snippet.mostafatouny.com/about>

[this] <https://snippet.mostafatouny.com/question/2/show>

[Parametric Abstraction with Functors and Modules]
<https://snippet.mostafatouny.com/snippet/25/show>

[Functor, OCaml] <https://snippet.mostafatouny.com/snippet/26/show>

[Functor, PL] <https://snippet.mostafatouny.com/snippet/28/show>

[Abstract Data Types] <https://snippet.mostafatouny.com/snippet/27/show>

[OCamlverse] <https://ocamlverse.net/>

Serialport - new serial communication library
═════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-serialport-new-serial-communication-library/17594/1>

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.

<https://gist.githubusercontent.com/dx3mod/402ef4c5f3f06645c6c7100da2e8676f/raw/31f21f19923ed2dd4a1a477d8cbbc1d06d59f07b/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.

[serialport] <https://github.com/dx3mod/serialport>

[OSerial] <https://github.com/m-laniakea/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:
<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_events' is 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>
• (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:
<https://discuss.ocaml.org/t/call-for-participation-bob-2026-berlin-mar-13/17598/1>

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/'] <https://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] <https://bobkonf.de/2026/program.html>

[program] <https://bobkonf.de/2026/program.html>

[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] <https://bobkonf.de/2026/registration.html>

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] <https://ocaml.org/blog/>

[AoAH Day 14: Debugging a Karakeep CLI against the live service]
<https://anil.recoil.org/notes/aoah-2025-14>

[AoAH Day 13: Heckling an OCaml HTTP client from 50 implementations in
10 languages] <https://anil.recoil.org/notes/aoah-2025-13>

[Advent of Code 2025]
<https://www.tunbury.org/2025/12/12/advent-of-code/>

[AoAH Day 12: Eio Connection pooling and event tracing]
<https://anil.recoil.org/notes/aoah-2025-12>

[One Mollymawk, Multiple Albatross servers]
<https://blog.robur.coop/articles/mollymawk_meta.html>

[AoAH Day 10: Building a TUI for Sortal using Mosaic]
<https://anil.recoil.org/notes/aoah-2025-10>

[AoAH Day 11: HTTP Cookies and vibing RFCs for breakfast]
<https://anil.recoil.org/notes/aoah-2025-11>

[Creating `ocaml.nvim' to Bring Neovim Support to OCaml's LSP Server]
<https://tarides.com/blog/2025-12-10-creating-ocaml-nvim-to-bring-neovim-support-to-ocaml-s-lsp-server>

[AoAH Day 9: Adding a Bonsai terminal UI to Sortal]
<https://anil.recoil.org/notes/aoah-2025-9>

[OCaml Roundup: November 2025]
<https://patrick.sirref.org/ocaml-roundup-november-2025/>

[An SVG is all you need]
<https://jon.recoil.org/blog/2025/12/an-svg-is-all-you-need.html>

[AoAH Day 8: Building a contacts CLI manager with Sortal]
<https://anil.recoil.org/notes/aoah-2025-8>

[AoAH Day 7: Converting between JSON and Yaml with yamlt]
<https://anil.recoil.org/notes/aoah-2025-7>

[AoAH Day 6: Getting a Yaml 1.2 implementation in pure OCaml]
<https://anil.recoil.org/notes/aoah-2025-6>

[Private repos in OCurrent]
<https://www.tunbury.org/2025/12/05/ocurrent-private-repos/>

[AoAH Day 5: Bytesrw Eio adapters and automating opam metadata]
<https://anil.recoil.org/notes/aoah-2025-5>

[A webapp to search emails as an unikernel]
<https://blog.robur.coop/articles/2025-04-12-ptt-search-webapp.html>

[AoAH Day 4: Going recursive with Claudeio for Claude]
<https://anil.recoil.org/notes/aoah-2025-4>

[AoAH Day 3: XDG filesystem paths using Eio capabilities]
<https://anil.recoil.org/notes/aoah-2025-3>

[AoAH Day 2: Building an OCaml JSONFeed library]
<https://anil.recoil.org/notes/aoah-2025-2>

[AoAH Day 1: Building a Base32 Crockford library in OCaml]
<https://anil.recoil.org/notes/aoah-2025-1>

[The AI French Connection to the Practice of Science]
<https://anil.recoil.org/notes/entente-cordiale>

[2025 Advent of Agentic Humps: Building a useful O(x)Caml library every
day] <https://anil.recoil.org/notes/aoah-2025>

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] <mailto:alan.schmitt@polytechnique.org>

[the archive] <https://alan.petitepomme.net/cwn/>

[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>

[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>

[Alan Schmitt] <https://alan.petitepomme.net/>

[-- Attachment #2: Type: text/html, Size: 34057 bytes --]