OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of May 12 to 19, 2026.

Table of Contents

hotseat Squava (a tiny LablGtk2 demo)

Continuing this thread, Damien Guichard announced

Newer 1.2 version, now detects eventual draw games.

https://pastebin.com/DjZ03yPa

Request for comments: What to do with opam packages that have known security vulnerabilities

Hannes Mehnert announced

Dear everyone,

we (the OCaml security) team is curious what the practice should be for opam packages that have known security vulnerabilities?

One way is to mark them with available: false in the opam-repository, which will make them not installable (apart from if you manually edit the opam file).

Especially for the OCaml compiler it is a tricky question: the recent vulnerability (in Marshal) affects everything < 4.14.3 | > 5 & < 5.4.1 – so marking these compilers as unavailable will result in lots of projects that require such older OCaml versions to not be easily installable anymore. Especially since the Marshal issue is not exposed in many (any?) applications, it feels wrong to disallow / make it hard for anyone to install these compilers.

Some ideas we have for the future:

  • annotate the exact function(s) that is/are vulnerabile in the security advisory (thus, you could automatically search for use of that function)
  • provide an "opam audit" which takes the advisory database and inspects your opam switch whether you have installed any vulnerable package

But for the short & medium term, we'd appreciate input on what to do with normal opam packages that have advisories; and also whether to treat the compiler packages differently or not.

odoc 3.2.1 release

Jon Ludlam announced

The odoc team is pleased to announce the release of odoc 3.2.1!

Highlights

  • OCaml 5.5.0 support

    odoc now compiles against, and produces documentation for, OCaml 5.5.0 (@panglesd, @xvw, #1406).

  • OxCaml support

    odoc now supports OxCaml natively, thanks to @lukemaurer and @art-w (#1399). Right now this is very bare-bones, but full support for the various features of OxCaml is already in progress. If you're interested, check out the PRs!

    One thing worth flagging: because OxCaml is moving much faster than upstream OCaml, each odoc release will likely support only a single OxCaml release, in contrast to our usual policy of supporting every OCaml back to 4.08. If you're documenting an OxCaml project, please use a matched pair of odoc and oxcaml-compiler.

Added

  • Persistent LaTeX macros in the HTML/KaTeX backend (@dlesbre, #1391).
  • The markdown-generate command now accepts multiple .odocl files in a single invocation, so you no longer need to wrap it in a shell loop (@davesnx, #1387).

Changed / Fixed

  • Fixed two long-standing compile-time crashes, #930 and #1385 (@jonludlam, #1400).
  • The Markdown backend now assumes ocaml as the language id on declarations, and collects code snippets into a single block with comments rather than splitting variants/records per constructor/field.
  • URL remapping now works correctly for page references (@jonludlam, #1395).
  • Incremental builds no longer break under the conditions described in #1396 (@jonludlam, #1402).
  • --warn-error now reliably promotes all warnings to errors (@jonludlam, #1402).
  • Polymorphic arguments are no longer missing their parentheses (@art-w, #1404).
  • Fixed a regression that broke docs for packages depending on ~base ~under OCaml 5.5.0 (@jonludlam, #1426, #1427).
  • Fixed a regression that broke docs for packages depending on merlin-lib (@jonludlam, #1429, #1430).

Installation

opam update
opam install odoc

Use

Please use odoc_driver to build and test your package's docs locally and to see how they will look on ocaml.org.

Odig and Dune continue to work as before, no changes required. Full support for all of the features of odoc 3.x is being worked on in Dune.

Thanks

Thanks to everyone who contributed code, reviews, bug reports, and testing for this release: @art-w, @davesnx, @dlesbre, @jonludlam, @lukemaurer, @panglesd, and @xvw, and anyone else I've forgotten!

As always, please report any issues on github.

List your open OCaml positions on the OCaml.org job board

Continunig this thread, Daniel Lamping announced

Please can I post this job that we are hiring for.

Cammy Stories: a small OCaml webcomic experiment 🐫

Ramiro Checa-Garcia announced

Hi everyone,

I've been experimenting lately with ways to make technical topics feel a bit more visual and approachable, and somehow that ended up turning into a small hobby project called Cammy Stories.

It's a collection of short comics about OCaml featuring a camel mascot ("Cammy") together with some familiar faces from the ecosystem like Dune, OPAM, Merlin and Odoc as characters and teammates.

The idea is not to make formal tutorials or documentation, but rather playful visual explanations of concepts like variants, functors, concurrency, Dune stanzas, OPAM switches, and other OCaml topics I found interesting while learning and exploring the ecosystem.

Most of the images were created through lots of iteration with AI image generation tools. Sometimes the results are surprisingly good, sometimes the text becomes nonsense, and occasionally random hearts appear for no reason. I've also kept many of the leftover drafts visible because I thought the process itself was funny and interesting.

Functional programming communities tend to have a reputation for being quite technical and serious, and I sometimes feel that a more visual and community-driven approach could help make some of these ideas feel a bit more approachable. So this is mostly a small experiment in that direction.

Feedback is very welcome, especially since there are probably technical inaccuracies or misleading ideas here and there. Suggestions for future topics, formats or concepts are also appreciated.

At the moment, most pages also include small notes, side comments or short stories about how each comic was created, since the project is still very much in a discussion and experimentation phase.

Hope you enjoy it 🐫

MlFront_ProgressZig - Zig-compatible progress trees

jbeckford announced

I am pleased to announce MlFront_ProgressZig. Install instructions, docs and examples further below.

TLDR: It renders a progress tree (a generalization of a progress bar). The killer feature is rendering a single progress tree with progress data fed from compatible child/grandchild/etc processes (see 2nd and 3rd examples). MlFront_ProgressZig is a port of Zig's progress standard library, with improvements for Windows and protocol compatibility with zig processes. The motivation and algorithm is at https://andrewkelley.me/post/zig-new-cli-progress-bar-explained.html. The port was initially AI-assisted; prompts for progress.zig start at line 1 here and Cabinet (government) data starts on line 218 here.

Examples: Normal Progress Tree

What Animation Link
Cabinet officials since 1975 https://asciinema.org/a/NWc2vbPeRQuOyGAa
OCaml spawns a zig build https://asciinema.org/a/Tu9ofrH3ekKUCyLk
OCaml spawns OCaml which spawns OCaml https://asciinema.org/a/Tdtt52iQqSsIXcku

Zig seems to have a bug, at least on Windows, where a zig parent can't collect data from an OCaml/zig child. That is why there are no "zig spawns OCaml" examples.

Example: Performance Monitoring

Here is a snapshot of my single-threaded build system. The interesting parts of the call stack are added to the progress tree (basically start and end_ around a function):

$ ./dk0 distribute CommonsBase_Std-dist-win32 --library 'CommonsBase_Std@2.5.999911122233' dist-win32.u

[signify] New build key pair in t/k/build.pub and t/k/build.sec ...
[signify] Distribute key pair among trusted coworkers only!
►0/2] distribute CommonsBase_Std-dist-win32
   └─ [2/5] prepare distribution
      └─ [29/32] get-object CommonsBase_Std.Toybox@0...
         └─ dl toybox-aarch64@toybox sz 806K
            └─ landley.net/toybox...oads/binaries/0.8.9
               └─ [0/1] MiB downloaded

By seeing the "►" tree not update for more than 10 seconds, I could see that downloading a small 806K file from the landley.net/toybox webserver was killing the performance.

It is easy to identify perf bottlenecks that last longer than 0.5 seconds.

Packages

  • MlFront_Progress: The API which can be used with one of four backends. Includes the "silent" and "plain" backends.
  • MlFront_ProgressZig: The zig compatible backend (high refresh rate)
  • MlFront_ProgressPeriod: A backend which dumps the progress tree periodically to the console.

Docs are at https://dkml.gitlab.io/build-tools/MlFront/.

Installing It

I have it in the opam queue (https://github.com/ocaml/opam-repository/pull/29918) and don't expect it to be released until the AI thread is resolved. Install the bleeding edge with:

for pkg in MlFront_Progress MlFront_Core MlFront_Lua MlFront_ZipFile UnifiedScript_Std MlFront_Thunk MlFront_Console MlFront_ProgressZig; do
  opam pin add $pkg https://gitlab.com/dkml/build-tools/MlFront/-/releases/permalink/latest/downloads/MlFront.tar.gz
done

(Even though I document "AI" in a couple files, I do it for my own benefit, apply it narrowly, and keep it under my control. Among other things, I can't imagine there are many (American) attorneys who would say it is wise for me to proactively and quasi-permanently label packages as "AI assisted/etc.", so I'll keep my packages out of the opam repository if that becomes a new policy.)

Enjoy!

loo - lua of ocaml

Ben announced

Hi

Like mentioned in the title this compiles Ocaml (Bytecode) into Lua (lua5.1). This project is ai generated, I tried to fully disclose that with the methods described in the project ocaml-ai-dislosure:

https://github.com/maltasea/lua_of_ocaml

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.