[ANN] Dune 2.5.0

The dune team is pleased to announce the release of dune 2.5.0. This release has been brewing for a while and contains a few interesting features. I’ll highlight some of the bigger ones:

  • The coq support has been thoroughly extended. There’s now support for both composition of coq libraries in the same workspace and extraction of coq code to OCaml.

  • There’s a new $ dune upgrade subcommand to help you upgrade dune files from 1.x to 2.x

  • $ dune utop will now load ppx preprocessors to the toplevel. Ppx authors might enjoy this style of interactive development.

  • There’s a new (subdir ..) stanza that can be used to evaluate stanzas in sub directories. This makes it possible to have a single dune file for an entire project (generated or not).

I’d like to thank everyone who contributed to dune 2.5.0. Your help is greatly appreciated.

Here’s the full change log:

2.5.0 (09/04/2020)

  • Add a --release option meaning the same as -p but without the
    package filtering. This is useful for custom dune invocation in opam
    files where we don’t want -p (#3260, @jeremiedimino)

  • Fix a bug introduced in 2.4.0 causing .bc programs to be built
    with -custom by default (#3269, fixes #3262, @jeremiedimino)

  • Allow contexts to be defined with local switches in workspace files (#3265,
    fix #3264, @rgrinberg)

  • Delay expansion errors until the rule is used to build something (#3261, fix
    #3252, @rgrinberg, @jeremiedimino)

  • [coq] Support for theory dependencies and compositional builds using
    new field (theories ...) (#2053, @ejgallego, @rgrinberg)

  • From now on, each version of a syntax extension must be explicitely tied to a
    minimum version of the dune language. Inconsistent versions in a
    dune-project will trigger a warning for version <=2.4 and an error for
    versions >2.4 of the dune language. (#3270, fixes #2957, @voodoos)

  • [coq] Bump coq lang version to 0.2. New coq features presented this release
    require this version of the coq lang. (#3283, @ejgallego)

  • Prevent installation of public executables disabled using the enabled_if field.
    Installation will now simply skip such executables instead of raising an
    error. (#3195, @voodoos)

  • dune upgrade will now try to upgrade projects using versions <2.0 to version
    2.0 of the dune language. (#3174, @voodoos)

  • Add a top command to integrate dune with any toplevel, not just
    utop. It is meant to be used with the new #use_output directive of
    OCaml 4.11 (#2952, @mbernat, @jeremiedimino)

  • Allow per-package version in generated opam files (#3287, @toots)

  • [coq] Introduce the coq.extraction stanza. It can be used to extract OCaml
    sources (#3299, fixes #2178, @rgrinberg)

  • Load ppx rewriters in dune utop and add pps field to toplevel stanza. Ppx
    extensions will now be usable in the toplevel
    (#3266, fixes #346, @stephanieyou)

  • Add a (subdir ..) stanza to allow evaluating stanzas in sub directories.
    (#3268, @rgrinberg)

  • Fix a bug preventing one from running inline tests in multiple modes
    (#3352, @jeremiedimino)

  • Allow the use of the %{profile} variable in the enabled_if field of the
    library stanza. (#3344, @mrmr1993)

  • Allow the use of %{ocaml_version} variable in enabled_if field of the
    library stanza. (#3339, @voodoos)

  • Fix dune build freezing on MacOS when cache is enabled. (#3249, fixes ##2973,


With issue/PR links:


The ppx-in-utop and subdir enhancements sound great, really looking forward to the upgrade. Thanks to the maintainers and everyone that helped! :wave: