[ANN] dune 3.8.0

The dune team is pleased to announce the release of Dune 3.8.0.

It is now available in opam-repository. As usual, it should always be safe to upgrade your dune package: new features and deprecations are only availble if you upgrade the language version in your dune-project files.


  • Introduce mdx stanza 0.4 requiring mdx >= 2.3.0 which updates the default
    list of files to include *.mld files (#7582, @Leonidas-from-XIV)

  • Allow (stdlib ...) to be used with (wrapped false) in library stanzas
    (#7139, @anmonteiro).

  • Allow the main module of a library with (stdlib ...) to depend on other
    libraries (#7154, @anmonteiro).

  • Support (link_flags ...) in (cinaps ...) stanza. (#7423, fixes #7416,

  • Allow (package ...) in any position within (rule ...) stanza (#7445,

  • Added a new user action (concurrent ) which is like (progn ) but runs the
    actions concurrently. (#6933, @Alizter)

  • Accept the Ordered Set Language for the modes field in library stanzas
    (#6611, @anmonteiro).

  • Allow parallel execution of inline tests partitions (#7012, @hhugo)

  • Add the --display-separate-messages flag to separate the error messages
    produced by commands with a blank line. (#6823, fixes #6158, @esope)

  • Add --watch-exclusions to Dune build options (#7216, @jonahbeckford)

  • Adds support for loading plugins in toplevels (#6082, fixes #6081,
    @ivg, @richardlford)

  • Introduce a public_headers field on libraries. This field is like
    install_c_headers, but it allows to choose the extension and choose the
    paths for the installed headers. (#7512, @rgrinberg)

  • Dune can now detect Coq theories from outside the workspace. This allows for
    composition with installed theories (not necessarily installed with Dune).
    (#7047, @Alizter, @ejgallego)

  • Added a --no-build option to dune coq top for avoiding rebuilds (#7380,
    fixes #7355, @Alizter)

  • Add a coqdoc_flags field to the coq.theory stanza allowing the user to
    pass extra arguments to coqdoc. (#7676, fixes #7954 @Alizter)

  • Preliminary support for Coq compiled intefaces (.vos files) enabled via
    (mode vos) in coq.theory stanzas. This can be used in combination with
    dune coq top to obtain fast re-building of dependencies (with no checking
    of proofs) prior to stepping into a file. (#7406, @rlepigre)

  • Read pkg-config arguments from the PKG_CONFIG_ARGN environment variable
    (#1492, #7734, @anmonteiro)

  • Use $PKG_CONFIG, when set, to find the pkg-config binary (#7469, fixes
    #2572, @anmonteiro)


  • Bootstrap: remove reliance on shell. Previously, we’d use the shell to get
    the number of processors. (#7274, @rgrinberg)

  • Non-user proccesses such as version control or config checking are now run
    silently. (#6994, fixes #4066, @Alizter)

  • Bytecode executables built for JSOO are linked with -noautolink and no
    longer depend on the shared stubs of their dependent libraries (#7156, @nojb)

  • Always include opam files in the generated .install file. Previously, it
    would not be included whenever (generate_opam_files true) was set and the
    .install file wasn’t yet generated. (#7547, @rgrinberg)


  • Modules that were declared in (modules_without_implementation),
    (private_modules) or (virtual_modules) but not declared in (modules)
    will cause Dune to emit a warning which will become an error in 3.9. (#7608,
    fixes #7026, @Alizter)

  • Coq language versions less 0.8 are deprecated, and will be removed
    in an upcoming Dune version. All users are required to migrate to
    (coq lang 0.8) which provides the right semantics for theories
    that have been globally installed, such as those coming from opam
    (@ejgallego, @Alizter)


  • Find pps dependencies in the host context when cross-compiling, (#7415,
    fixes #4156, @anmonteiro)

  • Fix plugin loading with findlib. The functionality was broken in 3.7.0.
    (#7556, @anmonteiro)

  • Load the host context findlib.conf when cross-compiling (#7428, fixes
    #1701, @rgrinberg, @anmonteiro)

  • Allow overriding the ocaml binary with findlib configuration (#7648,

  • Resolve ppx_runtime_libraries in the target context when cross compiling
    (#7450, fixes #2794, @anmonteiro)

  • Fix dune install when cross compiling (#7410, fixes #6191, @anmonteiro,

  • Fix string quoting in the json file written by --trace-file (#7773,

  • Correctly set MANPATH in dune exec. Previously, we would use the bin/
    directory of the context. (#7655, @rgrinberg)

  • merlin: ignore instrumentation settings for preprocessing. (#7606, fixes
    #7465, @Alizter)

  • When a rule’s action is interrupted, delete any leftover directory targets.
    This is consistent with how we treat file targets. (#7564, @rgrinberg)

  • Fix dune crashing on MacOS in watch mode whenever $PATH contains $PWD
    (#7441, fixes #6907, @rgrinberg)

  • Dune in watch mode no longer builds concurrent rules in serial (#7395
    @rgrinberg, @jchavarri)

  • dune coq top now correctly respects the project root when called from a
    subdirectory. However, absolute filenames passed to dune coq top are no
    longer supported (due to being buggy) (#7357, fixes #7344, @rlepigre and

  • RPC: Ignore SIGPIPE when clients suddenly disconnect (#7299, #7319, fixes
    #6879, @rgrinberg)

  • Always clean up the UI on exit. (#7271, fixes #7142 @rgrinberg)

  • Bootstrap: correctly detect the number of processors by allowing nproc to be
    looked up in $PATH (#7272, @Alizter)

  • Speed up file copying on macos by using clonefile when available
    (@rgrinberg, #7210)

  • Support commands that output 8-bit and 24-bit colors in the terminal (#7188,

  • Speed up rule generation for libraries and executables with many modules
    (#7187, @jchavarri)

  • Do not re-render UI on every frame if the UI doesn’t change (#7186, fix
    #7184, @rgrinberg)

  • Make coq_db creation in scope lazy (@ejgallego, #7133)

  • dune install now respects --display quiet mode (#7116, fixes #4573, fixes
    #7106, @Alizter)

  • Stub shared libraries (dllXXX_stubs.so) in Dune-installed libraries could
    not be used as dependencies of libraries in the workspace (eg when compiling
    to bytecode and/or Javascript). This is now fixed. (#7151, @nojb)

  • Fix regression where Merlin was unable to handle filenames with uppercase
    letters under Windows. (#7577, @nojb)

  • On nix+macos, pass -f to the codesign hook to avoid errors when the binary
    is already signed (#7183, fixes #6265, @greedy)

  • Fix bug where RPC clients built with dune-rpc-lwt would crash when closing
    their connection to the server (#7581, @gridbugs)

  • Fix RPC server on Windows (used for OCaml-LSP). (#7666, @nojb)


3.8.2 is now available, please find the changelog below (with that of 3.8.1).

3.8.2 (2023-06-16)

  • Switch back to threaded console for all systems; fix unresponsive console on
    Windows (#7906, @nojb)

  • Respect -p / --only-packages for melange.emit artifacts (#7849,

  • Fix scanning of Coq installed files (@ejgallego, reported by
    @palmskog, #7895 , fixes #7893)

  • Fix RPC buffer corruption issues due to multi threading. This issue was only
    reproducible with large RPC payloads (#7418)

  • Fix printing errors from excerpts whenever character offsets span multiple
    lines (#7950, fixes #7905, @rgrinberg)

3.8.1 (2023-06-05)

  • Fix a crash when using a version of Coq < 8.13 due to the native compiler
    config variable being missing. We now explicitly default to (mode vo) for
    these older versions of Coq. (#7847, fixes #7846, @Alizter)

  • Duplicate installed Coq theories are now allowed with the first appearing in
    COQPATH being preferred. This is inline with Coq’s loadpath semantics. This
    fixes an issue with install layouts based on COQPATH such as those found in
    nixpkgs. (#7790, @Alizter)

  • Revert #7415 and #7450 (Resolve ppx_runtime_libraries in the target context
    when cross compiling) (#7887, fixes #7875, @emillon)


And here’s the changelog for dune 3.8.3, just released, which fixes two important bugs on Linux and Windows:

3.8.3 (2023-06-27)

  • Fix deadlock on Windows (#8044, @nojb)

  • When using sendfile to copy files on Linux, fall back to the portable
    version if it fails at runtime for some reason (NFS, etc).
    (#8049, fixes #8041, @emillon)

1 Like