OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of November 04 to 11, 2025.

Table of Contents

Opam-repository, signed! conex is in beta now :)

Hannes Mehnert announced

Dear everyone,

we’re proud to announce that conex, in an initial version, is now live! You can receive signed updates of the opam-repository. A quick guide:

To setup opam with conex on your machine, you need to install conex (and/or conex-mirage-crypto, see below) - currently only available as opam package (sorry about the bootstrap problem - hopefully it will be integrated into opam at some time).

Then, in your “\~/.opam/config” you need to specify the repository-validation-command:

repository-validation-command: [
  "/path/to/conex_verify_mirage_crypto"
  "--quorum=%{quorum}%"
  "--trust-anchors=%{anchors}%"
  "--repository=%{repo}%" {incremental}
  "--dir=%{dir}%" {!incremental}
  "--patch=%{patch}%" {incremental}
  "--incremental" {incremental}
]

Instead of “conex_verify_mirage_crypto”, you can as well use “conex_verify_openssl” (fewer dependencies, calls out to OpenSSL as the cryptographic provider, is slower).

Then you can run opam repo add conex-robur https://conex.robur.coop 1 sha256=ad5eb0e4a77abfbc6c1bb5661eba46049404e0222588dd059c87f12436d41a28. Thereafter you can opam repo remove default, and then you’re only using signed metadata. The “1” is the quorum of root keys for signatures to be valid, the “sha256=ad5eb0e4a77abfbc6c1bb5661eba46049404e0222588dd059c87f12436d41a28” is the hash of the public root key.

Read the full article at https://hannes.robur.coop/Posts/ConexRunning – happy to receive feedback.

The development of conex is supported by the OCaml Software Foundation and by ahrefs.

OCaml Platform Newsletter: September to October 2025

Sabine Schmaltz announced

Welcome to the sixteenth edition of the OCaml Platform newsletter!

In this September to October 2025 edition, we are excited to bring you the latest on the OCaml Platform, continuing our tradition of highlighting recent developments as seen in previous editions. To understand the direction we're headed, especially regarding development workflows and user experience improvements, check out our roadmap.

You can subscribe to this newsletter on LinkedIn!

Highlights:

  • OCaml 5.4.0 Released: Major stable release featuring labelled tuples, immutable arrays, unified array literal syntax, atomic record fields, and four new standard library modules
  • Security Response Team Established: New team formed to handle security vulnerabilities in the OCaml ecosystem
  • Enhanced Editor Support: OCaml-LSP 1.24.0 and Merlin 5.6 bring improved project navigation and performance optimizations
  • OCaml.org Reorganization: Clear separation between news about production-ready features and releases (OCaml Changelog) and ongoing work and experimental features (Backstage OCaml)
  • Experimental Tools Progress: Gospel ecosystem tools ready for testing, new ocaml.nvim plugin for Neovim users, and experimental Merlin branch using domains and effects

OCaml Changelog:

Backstage OCaml:

Stable Releases:

Unstable Releases:

OCaml Compiler

  • OCaml 5.4.0 Stable Release

    The October 9, 2025 release of OCaml 5.4.0 represents a major milestone with significant language enhancements. After two beta releases and a release candidate in September, the stable version delivers:

    Language Features:

    • Labelled tuples: Enable better documentation and type safety with labels on tuple fields

      let ( * ) (x,~dx) (y,~dx:dy) = x*.y, ~dx:(x *. dy +. y *. dx)
      
    • Immutable arrays ('a iarray): Covariant arrays for safer concurrent programming
    • Unified array literal syntax: [| ... |] now works for 'a array, 'a iarray, and floatarray
    • Atomic record fields: New [@atomic] attribute with Atomic.Loc submodule for lock-free concurrent access

    Standard Library Additions:

    • Pair: Utility functions for pairs
    • Pqueue: Priority queue implementation
    • Repr: Explicit functions for physical equality and comparison
    • Iarray: Operations on immutable arrays

    Runtime Improvements:

    • Frame pointers support for ARM64 (Linux and macOS)
    • Performance fix for Apple Silicon (using stlr instead of dmb ishld; str)
    • Software prefetching for ARM64, s390x, PPC64, and RISC-V
    • Restored "memory cleanup upon exit" mode

    The September beta releases and release candidate demonstrated the maturity of the release, with only minor TSAN and metadata fixes needed.

  • WIP: Relocatable OCaml

    Work on Relocatable OCaml is progressing toward inclusion in OCaml 5.5, with implementation PRs opened by David Allsopp in September. The changes are undergoing review from Samuel Hym, Jonah Beckford, and others.

    What Relocatable OCaml Enables:

    This feature allows the OCaml compiler and its associated tools to be moved to different filesystem locations after installation without breaking functionality. Key benefits include:

    • Binary distributions that work regardless of installation path
    • Improved flexibility for package managers organizing OCaml installations
    • Bundling of specific OCaml versions by developer tools without path conflicts
    • Simplified cross-platform distribution

    Current Status:

    The implementation is in active review with ongoing responses to feedback. The core development team is likely to review the changes at an upcoming meeting, targeting inclusion in OCaml 5.5.

    For technical details about the implementation approach and its implications for the ecosystem, see David Allsopp's blog post on Relocatable OCaml and the associated Discuss thread.

Build System

  • Dune

    Dune 3.20.2 (September 10, 2025) provides bug fixes and stability improvements for the 3.20 series.

    • Experimental: Dune Package Management

      We keep exploring:

      • Portable External Dependencies: An approach for storing system package dependencies in a platform-agnostic format, allowing projects to maintain a single specification that resolves correctly across Linux, macOS, and Windows environments, ensuring consistent builds regardless of platform-specific package naming and versioning differences.
      • Portable Lock Directories: Lock directories that work consistently across different operating systems and architectures, addressing the current limitation where platform-specific dependency resolutions prevent teams from sharing lock files through version control in heterogeneous development environments.
      • Lock Directories as Build Targets: Currently, the solver that comes up with a set of compatible dependencies needs to be run by the user explicitely (using dune pkg lock), but in the future we intend to create build plans implicitly via Dune build rules. This should make make package management simpler to use as it requires fewer user actions and does not require putting verbose lock directories into the project source directories. This change also paves the way for automatic relocking when dependencies change, including in watch mode.

      These features remain under active development and should not be relied on in production. However, we encourage cautious adoption of Dune Package Management itself for users comfortable with bleeding-edge tools that may still change. Dune package management is available in the stable release of Dune, as an experimental feature.

      Dune Maintained by: Rudi Grinberg (@rgrinberg, Jane Street), Nicolás Ojeda Bär (@nojb, LexiFi), Marek Kubica (@Leonidas-from-XIV, Tarides), Ali Caglayan (@Alizter, Tarides), Etienne Millon (@emillon), Stephen Sherratt (@gridbugs, Tarides), Antonio Nuno Monteiro (@anmonteiro), Etienne Marais (@maiste)

Package Management

  • opam-publish

    We celebrate two releases of opam-publish: opam-publish 2.6.0 (September 19, 2025) and opam-publish 2.7.0 (October 7, 2025).

    These releases make it easier to automate package publishing, particularly benefiting projects with continuous deployment pipelines.

    Maintained by: Raja Boujbel (@rjbou, OCamlPro), Kate Deplaix (@kit-ty-kate, Ahrefs)

Editor Tools

  • OCaml-LSP Server and Merlin

    September and October saw significant updates to editor support:

  • ocp-indent

    ocp-indent 1.9.0 (October 1, 2025): Updates for OCaml 5.4.0 compatibility and improved formatting rules.

  • Experimental: ocaml.nvim

    Tarides announced ocaml.nvim, a new Neovim plugin for OCaml development. This experimental plugin serves as the Neovim counterpart to ocaml-eglot, leveraging LSP for modern editor features.

    OCaml LSP Server maintained by: Ulysse Gérard (@voodoos, Tarides), Xavier Van de Woestyne (@xvw, Tarides), Rudi Grinberg (@rgrinberg, Jane Street)

    Merlin maintained by: Ulysse Gérard (@voodoos, Tarides), Xavier Van de Woestyne (@xvw, Tarides), Muluh Godson (@PizieDust, Tarides),

Documentation and PPX Tools

  • Ppxlib

    Ppxlib 0.36.2 (October 1, 2025): Compatibility updates for OCaml 5.4.0 and fixes for AST handling.

    Maintained by: Nathan Rebours (@NathanReb)

Gospel Ecosystem (Experimental)

The Gospel formal specification ecosystem now offers tools for experimental specification-driven testing, as detailed in "Gospel Ecosystem: Tools Ready to Try, Language Evolving".

Available Tools:

  • Ortac/QCheck-STM generates property-based tests from Gospel specifications written in .mli files. The tool won the TACAS 2025 Best Tool Paper award and can automatically produce comprehensive test suites from formal specifications. While the underlying Gospel language syntax may still change, the testing workflow is stable enough for experimental use in development environments.

Current Status:

The tools work well for isolated modules where you can write specifications and generate tests, but the Gospel language itself remains under active development with potential breaking changes ahead. Teams using these tools should be prepared to update specifications as the language evolves. This makes the ecosystem suitable for greenfield projects, experimental codebases, or well-isolated components where specification changes won't cascade through large systems.

Platform Infrastructure

  • OCaml Security Response Team

    The establishment of the OCaml Security Response Team (October 3, 2025) marks an important step in ecosystem maturity. The team will handle security vulnerabilities following established disclosure practices.

  • OCaml.org Reorganization

    The newly introduced separation of OCaml Changelog and Backstage OCaml provides clearer communication:

    • OCaml Changelog: Official stable releases and production-ready updates
    • Backstage OCaml: Experimental releases, work-in-progress, and development opportunities

    This helps readers distinguish more easily between what's ready for production use and what's still experimental.

Community Events

  • FUN OCaml 2025

    The FUN OCaml conference took place on September 15-16, 2025 in Warsaw, Poland, featuring talks on practical OCaml development, industry applications, and community projects. The FUN OCaml 2025 program and speaker lineup showcases the diverse ecosystem of OCaml in production. Video recordings of all presentations will be available soon for those who couldn't attend in person.

  • OCaml Workshop 2025

    The OCaml Users and Developers Workshop was held on October 17, 2025 in Singapore, co-located with ICFP/SPLASH, bringing together researchers and practitioners. You can find the list of presentations and a link to the video recordings on the OCaml Workshop 2025 page on OCaml.org!

    We're pleased to see the successful release of OCaml 5.4.0, marking a significant milestone with labelled tuples, immutable arrays, and atomic fields. The establishment of the Security Response Team and the reorganization of OCaml.org demonstrate the ecosystem's growing maturity.

    The clear separation between stable releases and experimental work helps the community make informed decisions about tool adoption. While experimental features in the Dune Developer Preview, ocaml.nvim, and Gospel ecosystem show promising directions, they remain in testing and should not be used in production.

    As always, we encourage feedback and contributions from the community as we continue to improve the OCaml Platform ecosystem.

Demonstration of the extension literals and constant rewriting features

Mikhail announced

Yo! :yoyo: :waving_hand:

I started learning the beautiful ppxlib library and found interesting information in their documentation about OCaml's syntax features, such as extension literals - the ability to append a one-letter identifier to numeric literals. I was surprised at how easy it was to do this.

Because I was inspired by this, I wrote a demonstration project (located in my GitHub repository) to show how to use it to implement metric system support in code.

utop # 5m;; 
- : Metric.Meter.t = 5

utop # Metric.Meter.(1m + 10m);;
- : Metric.Meter.t = 11

References:

  • OCaml – Language extensions – Extension literals
  • Ppxlib – Context-free transformation – [Constant Rewriting]()

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.