OCaml Weekly News
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...inconstruct - dead_code_analyzer 1.0.0
- Relocatable OCaml
- FUN OCaml is live on YouTube and Twitch
- Other OCaml News
- Old CWN
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
- Meeting link: zoom
- Calendar event: google calendar
- Wiki with information and previous notes: dune wiki on GitHub
: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-jsmistakenly using wrong dependencies (ocaml/dune#12324, @vouillon) - Remove empty
.cram.test.tdirectory 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_listis a space separated list ofocaml-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
- Windows fixes
- Runtime fixes
- 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
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.
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_outcomeoption) - review test results without re-running them (
statussubcommand) - 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.
RFC: for...in construct
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
ocamlbuildandocamlfindare included, along with patches foromodandstdcompat - 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
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
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.