Hello Here is the latest OCaml Weekly News, for the week of September 09 to 16, 2025. Table of Contents ───────────────── Dune dev meeting Dune 3.20 OCaml compiler office hours? (preparation thread) Second beta release of OCaml 5.4.0 Unicode 17.0.0 update for Uucd, Uucp, Uunf and Uuseg Scope Image File Viewer OCaml security team Testo 0.2.0 - test library with support for snapshots, parallel runs, xfails, timeouts tinyfiledialogs bindings RFC: `for...in' construct dead_code_analyzer 1.0.0 Relocatable OCaml FUN OCaml is live on YouTube and Twitch Other OCaml News Old CWN Dune dev meeting ════════════════ Archive: 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. [available from or dev wiki] :computer: Links ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ • Meeting link:[ zoom] • Calendar event:[ google calendar] • Wiki with information and previous notes: [dune wiki on GitHub] :heart: [ zoom] [ google calendar] [dune wiki on GitHub] Dune 3.20 ═════════ Archive: 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) ═════════════════════════════════════════════════ Archive: gasche announced ──────────────── Following our current discussion on making participation to the OCaml compiler development more inviting (, ), 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 ══════════════════════════════════ Archive: 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 [compiler repository] [OCaml's issue tracker] [opam readiness for 5.4.0 meta-issue] [on GitHub] 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: • [GitHub] • [OCaml archives at Inria] [GitHub] [OCaml archives at Inria] ◊ 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 ocaml-variants.5.4.0~beta2+options └──── 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) [#14200] [#14202] ◊ 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) [#14223] [#13541] [#13777] ◊ 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) [#14061] [#14209] [#14169] ◊ 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) [#14236] [#14184] [#14192] [#14196] [#14197] ◊ 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) [#14214] [#14221] Unicode 17.0.0 update for Uucd, Uucp, Uunf and Uuseg ════════════════════════════════════════════════════ Archive: 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 [Beria Erfe script] [this page] [here] [Uucd] [docs] [Uucp] [docs] [Uunf] [docs] [Uuseg] [docs] [here] [OCaml Software Foundation] [donors] Scope Image File Viewer ═══════════════════════ Archive: 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. OCaml security team ═══════════════════ Archive: Hannes Mehnert announced ──────────────────────── Dear everyone, we’ve accomplished several tasks: • 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 (still empty, we’ll fill it over the next weeks) [Fun OCaml] [OCaml workshop (ICFP)] Testo 0.2.0 - test library with support for snapshots, parallel runs, xfails, timeouts ══════════════════════════════════════════════════════════════════════════════════════ Archive: 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! [documentation] [tutorial] [howto guides] [OCaml API reference] [Semgrep] [Changes since the last release] [happens on GitHub] [here] tinyfiledialogs bindings ════════════════════════ Archive: 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. RFC: `for...in' construct ═════════════════════════ Archive: 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. [an RFC] [here] dead_code_analyzer 1.0.0 ════════════════════════ Archive: 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. [dead_code_analyzer] [README] Relocatable OCaml ═════════════════ Archive: 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 . 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!) [relocatable branch] [ocaml/ocaml#14243] [ocaml/ocaml#14244] [ocaml/ocaml#14245] [ocaml/ocaml#14246] FUN OCaml is live on YouTube and Twitch ═══════════════════════════════════════ Archive: 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 We also have a discord server for FUN OCaml here: Other OCaml News ════════════════ >From the ocaml.org blog ─────────────────────── Here are links from many OCaml blogs aggregated at [the ocaml.org blog]. • [Relocatable OCaml - from concept to demo to PRs] • [Upcoming OCaml Events] • [Shipping a robust DB migration runner for Chaufr (OCaml + Caqti + Lwt)] • [FUN OCaml 2025 - Join us in Warsaw, Poland on September 15 for a day full of presentations!] • [Dynamic Formal Verification in OCaml: An Ortac/QCheck-STM Tutorial] • [Caching opam solutions] • [Build IDs for Day10] [the ocaml.org blog] [Relocatable OCaml - from concept to demo to PRs] [Upcoming OCaml Events] [Shipping a robust DB migration runner for Chaufr (OCaml + Caqti + Lwt)] [FUN OCaml 2025 - Join us in Warsaw, Poland on September 15 for a day full of presentations!] [Dynamic Formal Verification in OCaml: An Ortac/QCheck-STM Tutorial] [Caching opam solutions] [Build IDs for Day10] 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]