OCaml Weekly News

Previous Week Up Next Week


Here is the latest OCaml Weekly News, for the week of April 07 to 14, 2020.

Table of Contents

Announcing dune-deps: produces a project-centric dependency graph

Martin Jambon announced

Since the original announcement, I received some good feedback from users working on large projects. Thank you!

The latest version released today is 1.2.0. It is already available on opam-repository (thank you @kit-ty-kate). The changes since the original release, besides bug fixes, include:

  • Ability to select or ignore dune files and folders to scan. For example, dune-deps foo bar -x bar/test uses all the dune files found in folders foo and bar but will ignore bar/test. This is useful for ignoring uninteresting parts of the project and for ignoring parse errors (see bug #4).
  • Executable name disambiguation. For example, private executables of the same name like foo/main and bar/baz/main are now rendered as main<foo> and main<baz> respectively instead of just main.
  • Optional exclusion of all executables or all external libraries with --no-exe and --no-ext.
  • Ability to show only the dependencies and/or the reverse dependencies of selected libraries. See below.

Whole-project graphs for large projects tend to be unreadable. To deal with that, I added support for an "hourglass view" (⌛) option for showing only the dependencies and reverse dependencies of a component of interest.

The following is obtained with -h opam-client on the opam project:


Please let us know if this works for your favorite projects! The source code of dune-deps makes it somewhat easier now to experiment with new strategies for eliminating nodes. See the Filter and Filterable modules.

Check out dune-deps --help for detailed documentation on the options.

Sean Grove said and Martin Jambon replied

That’s a nice idea - it’d be great to have this available as a GitHub action so anyone could do this with just a click or two!

So, I made a generic yaml workflow that people can stick into their git/github project. This will automatically maintain the dependency graph .deps/deps.png which can be included in a readme.

OCamlformat 0.14.0

Etienne Millon announced

As described in this thread, ocamlformat 0.14.0 introduced a new algorithm to determine how documentation comments are placed. We underestimated the impact of making this the default, and this means that many unwanted diffs were present for 0.13.0 -> 0.14.0 upgrades.

We are going to prepare a 0.14.1 release next week reverting this behavior back to the 0.13.0 defaults. Users still on 0.13.0 are encouraged to wait for this and upgrade directly to 0.14.1.

Sorry for the inconvenience, and thanks for the feedback!

Dune 2.5.0

Rudi Grinberg announced

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, @diml)
  • Fix a bug introduced in 2.4.0 causing .bc programs to be built with -custom by default (#3269, fixes #3262, @diml)
  • 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, @diml)
  • [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, @diml)
  • 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, @diml)
  • 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, @artempyanykh)


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 online.