Dune 3.9.0

The Dune team is thrilled to announce the release of Dune 3.9.0. This version ships with a host of new features and improvements, including:

  • New dune show Command: This command enables you to display various pieces of information. For instance, you can use dune show pp to display the preprocessed output of a file or dune show aliases [DIR] to list the aliases available in DIR. Read more about the command on its manpage using dune show --help.
  • Improved Dialect Support: We have rolled out several fixes related to dialect support. These changes make it easier to work with Dream's .eml files.
  • Introduction of (build_if) Toggle in (test) Stanza: This new field facilitates the packaging of non-portable tests and benchmarks. If you have tests that don't build on a specific platform, you can now tell Dune not to build them on other Platforms with the build_if field.

Enjoy the new features and improvements incorporated into this version!

See full changelog

Added

  • Include the time it takes to read/write state files when --trace-file is enabled (#7960, @rgrinberg)

  • Include source tree scans in the traces produced by --trace-file (#7937, @rgrinberg)

  • Add --all option to dune rpc status to show all Dune RPC servers running. (#8011, fix #7902, @Alizter)

  • Add additional metadata to the traces provided by --trace-file whenever --trace-extended is passed (#7778, @rleshchinskiy)

  • $ dune describe is now a command group, so arguments to subcommands must be passed after subcommand itself. (#7919, @Alizter)

  • Add dune show command group which is an alias of dune describe. (#7946, @Alizter)

  • Add dune show env command and make dune printenv an alias of it. (#7985, @Alizter)

  • Add commands dune show targets and dune show aliases that display all the available targets and aliases in a given directory respectively. (#7770, grants #265, @Alizter)

  • Extensions used in (dialect) can contain periods (e.g., cppo.ml). (#7782, fixes #7777, @nojb)

  • The interface and implementation fields of a (dialect) are now optional (#7757, @gpetiot)

  • Add (build_if) to the (test) stanza. When it evaluates to false, the executable is not built. (#7899, fixes #6938, @emillon)

  • Allow (include_subdirs qualified) to be used when libraries define a (modules ...) field (#7797, fixes #7597, @anmonteiro)

  • Allow multiple globs in library's (stdlib (internal_modules ..)) (@anmonteiro, #7878)

Changed

  • Do not rerun OCaml syntax files on every iteration of the watch mode. This is too memory consuming. (#7894, fix #6900, @rgrinberg)

  • Attach melange rules to the default alias (#7926, @haochenx)

  • Compute digests and manage sandboxes in background threads (#7947, @rgrinberg)

Fixed

  • Validate file extension for $ dune ocaml top-module. (#8005, fixes #8004, @3Rafal)

  • Cinaps: The promotion rules for cinaps would only offer one file at a time no matter how many promotions were available. Now we offer all the promotions at once (#7901, @rgrinberg)

  • Add necessary parentheses in generated opam constraints (#7682, fixes #3431, @Lucccyo)

Removed

  • Remove some compatibility code for old version of dune that generated .merlin files. Now dune will never remove .merlin files automatically (#7562)

  • In opam constraints, reject (and) and (or) with no arguments at parse time (#7730, @emillon)