ANN: dune (jbuilder) 1.0+beta17

On behalf of the dune development team, I’d like to announce the 17 beta.

Let me first make yet another reminder that the build system formerly named as jbuilder is now called dune. As of now, this poses no changes to users. However, the 1.0 release will make the old name obsolete. We will provide a migration tool to automate the transition.

As for this release, I’ve replicated the detailed change log below. I will not make a usual short summary of the release, because I’ve prepared an entire blog post for this purpose instead:

I urge everyone to migrate, and happy hacking.


  • Make jbuilder aware that num is an external package in OCaml >= 4.06.0

  • jbuilder exec will now rebuild the executable before running it if
    necessary. This can be turned off by passing --no-build (#345)

  • Fix jbuilder utop to work in any working directory (#339)

  • Fix generation of META synopsis that contains double quotes (#337)

  • Add S . to .merlin by default (#284)

  • Improve jbuilder exec to make it possible to execute non public executables.
    jbuilder exec path/bin will execute bin inside default (or specified)
    context relative to path. jbuilder exec /path will execute /path as
    absolute path but with the context’s environment set appropriately. Lastly,
    jbuilder exec will change the root as to which paths are relative using the
    -root option. (#286)

  • Fix jbuilder rules printing rules when some binaries are missing (#292)

  • Build documentation for non public libraries (#306)

  • Fix doc generation when several private libraries have the same name (#369)

  • Fix copy# for C/C++ with Microsoft C compiler (#353)

  • Add support for cross-compilation. Currently we are supporting the
    opam-cross-x repositories such as

  • Simplify generated META files: do not generate the transitive
    closure of dependencies in META files (#405)

  • Deprecated ${!...}: the split behavior is now a property of the
    variable. For instance ${CC}, ${^}, ${read-lines:...} all
    expand to lists unless used in the middle of a longer atom (#336)

  • Add an (include ...) stanza allowing one to include another
    non-generated jbuild file in the current file (#402)

  • Add a (diff <file1> <file2>) action allowing to diff files and
    promote generated files in case of mismatch (#402, #421)

  • Add jbuilder promote and --auto-promote to promote files (#402,

  • Report better errors when using (glob_files ...) with a directory
    that doesn’t exist (#413, Fix #412)

  • Jbuilder now properly handles correction files produced by
    ppx_driver. This allows to use [@@deriving_inline] in .ml/.mli
    files. This require ppx_driver >= v0.10.2 to work properly (#415)

  • Make jbuilder load rules lazily instead of generating them all
    eagerly. This speeds up the initial startup time of jbuilder on big
    workspaces (#370)

  • Now longer generate a META.pkg.from-jbuilder file. Now the only
    way to customise the generated META file is through
    META.pkg.template. This feature was unused and was making the code
    complicated (#370)

  • Remove read-only attribute on Windows before unlink (#247)

  • Use /Fo instead of -o when invoking the Microsoft C compiler to eliminate
    deprecation warning when compiling C++ sources (#354)

  • Display a warning for invalid lines in jbuild-ignore (#389)


PSA: The opam package is being rescheduled due to a bug caught late in the release process.


bug caught late in the release process.

More accurately, in the “post release” stage :laughing:

Anyways, apologies to those who were affected by this. The gremlins are working around the clock to fix this. For those who are curious about what the issue is:


So, the opam package is still called jbuilder?
Shouldn’t we have an “alias package” called dune then?

There will be a more detailed transition plan announced when we are ready
to undertake it. For now, all we’ve done is rename the github repo.

1 Like