OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of September 09 to 16, 2025.

Table of Contents

Dune dev meeting

Shon announced

Hi everyone! :camel:

Starting tomorrow, Wednesday September 9th, 2025, we will begin holding our Dune dev meeting WEEKLY, every Wednesday, at alternating time slots.

Whether you are a maintainer, a regular contributor, a new joiner or just curious, you are always welcome to join: these discussions are open! The goal of these meetings is to provide a place to discuss the ongoing work together and synchronize between the Dune developers :smile:

However, we will no longer be manually announcing these meetings, as they are at set recurring times, and the meeting times and ways to participate are well documented.

:calendar: Agenda and Notes

If there is a prior agenda, it will be available on the dedicated meeting page available from or dev wiki. Feel free to ask if you want to add more items in it.

You may review the meeting notes for any past meetings from the very same pages.

:computer: Links

:heart:

Dune 3.20

Etienne Marais announced

The Dune Team is happy to announce the release of Dune 3.20.2.

This release comes with some fixes regarding js_of_ocaml and cram test. It also fixes dune when using Cygwin.

Changelog

  • Fixed
    • Fix jsoo separate compilation with modules_without_implementation. Regression introduced in ocaml/dune#10767. (ocaml/dune#12320, fixes ocaml/dune#12306 @hhugo)
    • Fix runtest-js mistakenly using wrong dependencies (ocaml/dune#12324, @vouillon)
    • Remove empty .cram.test.t directory during the running of a cram test. (ocaml/dune#12329, fixes ocaml/dune#12321, @Alizter)
    • Fix Cygwin bootstrap (ocaml/dune#12325, fixes ocaml/dune#12316, @Alizter)

OCaml compiler office hours? (preparation thread)

gasche announced

Following our current discussion on making participation to the OCaml compiler development more inviting (https://discuss.ocaml.org/t/why-lean-4-replaced-ocaml-as-my-primary-language/17109/45?u=gasche, https://discuss.ocaml.org/t/synchronous-discussion-channel-for-compiler-contributors/17198/1 ), I propose to give a try to "OCaml compiler office hours". My idea is to do this once during a week day around the end of September (and then we see how it goes).

  • Format: a synchronous remote meeting (voice with optional video), backed by a collaborative pad to record questions, take notes, share links etc.
  • Topic: anything related to the development of the OCaml compiler, that is, the github/ocaml/ocaml project. (All topics and questions are welcome, at all levels of knowledge and familiarity with the compiler.)
  • Duration: probably one to two hours, but the idea of "office hours" is that people can of course join late and leave at any time.

I am including below a poll to ask which time slots would be possible / comfortable for prospective attendants. (As the organizer, I pre-selected slots that are comfortable for me.) Please only answer the poll if you are motivated to attend such a meeting (the preferences may different from the general timezone of the OCaml community).

Editor’s note: please follow the archive link above to access the poll.

(If we do this several time we will of course think of a rotation to accomodate people from different timezones.)

Second beta release of OCaml 5.4.0

octachron announced

After an extended summer break, the release of OCaml 5.4.0 is getting close.

Since there have been a handful of meaningful bug fixes this summer, we are releasing a second beta version of OCaml 5.4.0 to help you update your software and libraries ahead of the release (see below for the installation instructions). More information about the whole release process is now available in the compiler repository.

Compared to the first beta release, this beta release contains four notable bug fixes:

  • one type system bugfix for variance annotation on private types
  • one memory concurrency safety fix for weak pointers
  • two Windows fixes

Those fixes are complemented by:

  • one runtime performance fix
  • three tools and compiler-libs related fixes
  • one error message fix.

The full list of fixes for this second beta is available below.

Overall, this beta release is already quite stable. If the tests for this beta release go well, we are expecting to have a first release candidate in the week of the 22 September, and the full release in the beginning of October.

If you find any bugs, please report them on OCaml's issue tracker.

The last progresses on stabilising the ecosystem are still tracked on the opam readiness for 5.4.0 meta-issue.

If you are interested in full list of features and bug fixes of the new OCaml version, the updated change log for OCaml 5.4.0 is available on GitHub.

Happy hacking, Florian Angeletti for the OCaml team

Installation Instructions

The base compiler can be installed as an opam switch with the following commands on opam 2.1 and later:

opam update
opam switch create 5.4.0~beta2

The source code for the beta is also available at these addresses:

  • Fine-Tuned Compiler Configuration

    If you want to tweak the configuration of the compiler, you can switch to the option variant with:

    opam update
    opam switch create <switch_name> ocaml-variants.5.4.0~beta2+options <option_list>
    

    where option_list is a space separated list of ocaml-option-* packages. For instance, for a flambda and no-flat-float-array switch:

    opam switch create 5.4.0~beta2+flambda+nffa ocaml-variants.5.4.0~beta2+options ocaml-option-flambda ocaml-option-no-flat-float-array
    

    All available options can be listed with opam search ocaml-option.

Changes since the first beta

  • Type system fix
    • #14200, #14202 : bad variance check with private aliases (Jacques Garrigue, report and review by Stephen Dolan)
  • Windows fixes
    • #13504, #13625, +#14223: Add Thread.set_current_thread_name. (Romain Beauxis, review by Gabriel Scherer and Antonin Décimo)
    • #13541, #13777: Using C++11 thread_local causes name-mangling issues when linking with flexlink on Cygwin. (Antonin Décimo and David Allsopp, report by Kate Deplaix)
  • Runtime fixes
    • #14061, #14209: fix a memory-ordering bug in Weak.set that could result in uninitialized memory seen by Weak.get on another domain. (Damien Doligez, review by Gabriel Scherer)
    • #14169: runtime, fix cache miss within the stack fragments cache (Florian Angeletti, review by Gabriel Scherer)
  • Tooling fixes
    • #13302, +#14236: Store locations of longidents components (Ulysse Gérard and Jules Aguillon, review by Jules Aguillon and Florian Angeletti)
    • #12642, #13536, +#14184, +#14192: in the toplevel, print shorter paths for constructors and labels when only some modules along their path are open. (Gabriel Scherer, review by Florian Angeletti)
    • #14196, #14197: ocamlprof: do not instrument unreachable clauses (Gabriel Scherer, review by Nicolás Ojeda Bär, report by Ali Caglayan)
  • Error messages
    • #14214, #14221: fix a confused error message for module inclusions, functor error messages were missing some type equalities potentially leading to nonsensical "type t is not compatible with type t" submessage (Florian Angeletti, report by Basile Clément, review by Gabriel Scherer)

Unicode 17.0.0 update for Uucd, Uucp, Uunf and Uuseg

Daniel Bünzli announced

Hello,

Unicode 17.0.0 was released on September 9th. It adds 4803 new characters for a total of 159'801 characters.

Among other interesting scripts, this adds support for the Beria Erfe script, a modern-use script from Africa which coincidentally is also refered to as the camel alphabet.

For more information about other additions see this page.

Accordingly these libraries had to be updated (aggregated, boring, release notes here)

  • Uucd 17.0.0 Unicode character database decoder for OCaml, docs
  • Uucp 17.0.0 Unicode character properties for OCaml, docs
  • Uunf 17.0.0 Unicode text normalization for OCaml, docs
  • Uuseg 17.0.0 Unicode text segmentation for OCaml, docs

Both Uucd and Uucp are incompatible releases sinces new block and script enumerants were added.

Other than that the minimal Unicode introduction and Unicode OCaml tips is still here and remember that despite the myths OCaml :heart: Unicode.

A big thanks for funding from the OCaml Software Foundation and from my donors.

Daniel

Scope Image File Viewer

Charles Averill announced

I wanted to mess around with image file parsing and ended up building a small image viewer application using SDL. Includes a few hand-written parsers as well as calls to SDL_Image for more complicated formats. Not super performant but working on it.

https://opam.ocaml.org/packages/scope/

OCaml security team

Hannes Mehnert announced

Dear everyone,

we’ve accomplished several tasks:

  • https://ocaml.org/security is now live
  • The public mailing list for security advisories is sympa.inria.fr/sympa/info/ocsf-ocaml-security-announcements – please subscribe if you’d like to receive security announcements
  • There’ll be a brief introduction at Fun OCaml and a talk at OCaml workshop (ICFP) )16:00 - 16:30
  • We will have a public meeting for discussions on Oct 22nd 14:00 - 16:00 CEST (online, yet to be announced where)
  • There’s already the OCaml security advisory database https://github.com/ocaml/security-advisories (still empty, we’ll fill it over the next weeks)

Testo 0.2.0 - test library with support for snapshots, parallel runs, xfails, timeouts

Martin Jambon announced

Testo was designed as a feature-rich testing framework that makes common tasks easy and unusual ones possible. It is similar to Alcotest but supports more options including notably:

  • snapshotting: large output capture and diffing
  • test-driven development: write tests first, make them pass later (~expected_outcome option)
  • review test results without re-running them (status subcommand)
  • fast parallel execution supporting Windows and older OCaml versions (>= 4.08)
  • complete documentation: tutorial, howto guides, OCaml API reference
  • timeouts (new!)

We’ve been using Testo at Semgrep where we need the snapshotting feature to track the output of the semgrep command in end-to-end tests.

Changes since the last release include bugfixes, a few new command-line options, and support for timeouts. Install it now with

$ opam install testo

Testo development is an open-source community effort that happens on GitHub. It has been funded by Semgrep, my employer and fine purveyor of application security software. We're planning for a 1.0 release once the known Windows-specific bugs are gone. No major breaking changes are in sight.

For reference, the previous announcement from last year is here.

Enjoy your free software!

tinyfiledialogs bindings

Charles Averill announced

Bindings to the cross-platform tinyfiledialogs library, providing an API for (you guessed it) simple graphical file/directory/color selection using what the host operating system provides.

https://opam.ocaml.org/packages/tinyfiledialogs/

RFC: for...in construct

Sacha Ayoun announced

Hello,

Here's an RFC I drafted for adding a for...in construct to the language. Feedback is welcome here :slight_smile:

Some reservations were already voiced here, and acknowledged in the RFC.

dead_code_analyzer 1.0.0

fantazio announced

Hello everyone,

Almost 10 years later, the dead_code_analyzer is coming back !

Thanks to all the more or less recent contributors and reviewers (I am not allowed to tag you all as a new user).

The tool has been updated to OCaml 5.2. It is available on opam. There is planned work to update it to OCaml 5.3. There is planned work to offer a version compatible with OCaml 4.14. However, there is no intent to maintain the dead_code_analyzer on any OCaml version other than the latest.

This static analyzer is a complement to the compiler’s warnings on unused code constructs. It reads .cmi and .cmt files, produced by using -keep-locs (on by default) on .mli files and -bin-annot on .ml files.

It scans a compiled OCaml project and reports various warnings about suspicious code:

  • exported values never used,
  • class fields never used,
  • constructors and record fields never used,
  • optional arguments always or never used,
  • some stylistic issues.

By default, only the 3 first elements of the above list are reported. More details available in the project’s README. A more thorough documentation is in progress.

Relocatable OCaml

David Allsopp announced

It is my great pleasure, 3 years to the day since I finalised the first full demonstration of it in Ljubljana for the OCaml Workshop in 2022, to announce the general availability of Relocatable OCaml for testing and review.

For example, this creates a 5.4.0 switch (the good old-fashioned slow way):

$ time opam switch create --repos=relocatable=git+https://github.com/dra27/opam-repository.git#relocatable,default original-compiler ocaml.5.4.0
real    1m27.646s

But, having run that, subsequent switches are a just a tad quicker:

$ eval $(opam env)
$ ocamlopt -where
/home/opam/.opam/original-compiler/lib/ocaml
$ time opam switch create . --repos=relocatable,default ocaml.5.4.0
real    0m5.105s
$ eval $(opam env)
$ ocamlopt -where
/home/opam/myproject/_opam/lib/ocaml

And, um, that's it really!

Oh, there are a few other things bundled into the relocatable branch on dra27/opam-repository:

  • It's available for all versions of OCaml since 4.08. They install using their "trunk" versions - i.e. the version number of what would be the next release of OCaml (4.08.2, 4.09.2, 4.10.3, 4.11.3, 4.12.2, 4.13.2, 4.14.3, 5.0.1, 5.1.2, 5.2.2, 5.1.3, pre-release 5.4.0 and, for completeness, trunk OCaml is present as 5.5.0)
  • Relocatable versions of ocamlbuild and ocamlfind are included, along with patches for omod and stdcompat
  • The ocaml-option- packages work for all of the older versions, too
  • They all work on Windows (including 4.08-4.12, which aren't yet available in opam-repository)
  • They all work on Apple silicon (including 4.08, 4.09 and 4.11)

I have literally just opened the PRs on ocaml/ocaml (ocaml/ocaml#14243, ocaml/ocaml#14244, ocaml/ocaml#14245 and ocaml/ocaml#14246). In the interests of those of us who maintain libraries and tools which have to target multiple versions of OCaml, there will be some kind of story for keeping these older versions available, but the focus for now will be reaching a consensus for merging the feature itself into OCaml 5.5.

Please do test and report any issues at https://github.com/dra27/relocatable/issues. Over-zealous lock-file systems notwithstanding, the compiler should be as "drop-in" a replacement as updating to any "point release" of the compiler (i.e. if you have something which works in OCaml 5.3.0 but doesn't work in Relocatable OCaml 5.3.1, that's a bug, and I'd love to hear about it a.s.a.p., please!)

FUN OCaml is live on YouTube and Twitch

Sabine Schmaltz announced

We're at FUN OCaml and having some awesome OCaml talks today! And you can join us remotely. 🧡🐫

For the schedule and links to the live streams of FUN OCaml 2025 from Warsaw, see

https://fun-ocaml.com

We also have a discord server for FUN OCaml here:

https://discord.gg/DxAghYKqn4

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.