[ANN] dune 3.11.0

The Dune team is pleased to announce the release of Dune 3.11 “for workgroups”.

Here is the changelog:


  • enabled_if now supports arch_sixtyfour variable (#8023, fixes #7997,

  • Experimental: Added a $ dune monitor command that can connect to a running
    dune build in watch mode and display the errors and progress. (#8152,

  • The progress RPC procedure now has an extra field for the In_progress
    constructor for the number of failed jobs. (#8212, @Alizter)

  • Add a --preview flag to dune fmt which causes it to print out the changes
    it would make without applying them (#8289, @gridbugs)

  • Introduce (source_trees ..) to the install stanza to allow installing
    entire source trees. (#8349, @rgrinberg)

  • Add --stop-on-first-error option to dune build which will terminate the
    build when the first error is encountered. (#8400, @pmwhite and @Alizter)

  • Dune now displays the number of errors when waiting for changes in watch
    mode. (#8408, fixes #6889, @Alizter)

  • Add with_prefix keyword for changing the prefix of the destination of
    installed files matched by globs. (#8416, @gridbugs)

  • Added experimental --display tui option for Dune that opens an interactive
    Terminal User Interface (TUI) when Dune is running. Press ‘?’ to open up a
    help screen when running for more information. (#8429, @Alizter and

  • Add a warnings field to dune-project files as a unified mechanism to
    enable or disable dune warnings (@rgrinberg, 8448)

  • dune exec: support syntax like %{bin:program}. This can appear anywhere
    in the command line, so things like dune exec time %{bin:program} now work.
    (#6035, #8474, fixes #2691, @emillon, @Leonidas-from-XIV)

  • Add a new alias @doc-json to build odoc documentation in JSON format. This
    output can be consumed by external tools. (#8178, @emillon)

Changed and fixed

  • Use posix_spawn instead of fork on MacOS. This gives us a performance
    boost and allows us to re-enable thread. (#8090, @rgrinberg)

  • Modules that were declared in (modules_without_implementation),
    (private_modules) or (virtual_modules) but not declared in (modules)
    will raise an error. (#7674, @Alizter)

  • No longer emit linkopts(javascript) in META files (#8168, @hhugo)

  • RPC message styles are now serialised meaning that RPC diagnostics keep their
    Ansi styling. (#8516, fixes #6921, @Alizter)

  • Truncate output from actions that produce too much output (@tov, #8351)

  • Allow libraries to shadow OCaml builtin libraries. Previously, builtin
    libraries would always take precedence. (@rgrinberg, #8558)

  • dune utop no longer links utop in “custom” mode, which should make this
    command considerably faster. (#8631, fixes #6894, @nojb)

  • Ensure that package names in dune-project are valid opam package names.
    (#8331, @emillon)

  • init: check that module names are valid (#8644, fixes #8252, @emillon)

  • dune init: parse --public as a public name (#8603, fixes #7108, @emillon)

  • Stop signing source files with substitutions. Sign only binaries instead
    (#8361, fixes #8360, @anmonteiro)

  • Make copy sandbox support directory targets. (#8705, fixes #7724, @emillon)

Deprecated and removed

  • Deprecate install destination paths beginning with “…” to prevent packages
    escaping their designated installation directories. (#8350, @gridbugs)

  • Remove warning against .dune files generated by pre dune 2.0 (#8611,

  • Remove versions 0.1 and 0.2 of the experimental ctypes extension. (#8293,


We just released dune 3.11.1 with the following fixes:


  • Fix dune rpc commands on Windows (#8806, fixes #8799, @nojb)
  • Fix inline_tests when the partition list is empty (#8849, fixes #8848, @hhugo)