Dune 1.7.0
On behalf of the dune team, I'm pleased to announce the release of dune 1.7.0. This release is the biggest release since 1.0 and I'm excited to present it to you. The change log is quite long so I'll summarize the most noteworthy changes:
- 
The jbuilder binary and jbuild files are officially deprecated. But not to worry, we've created a $ dune upgradecommand to do the hard work for you.
- 
The virtual libraries feature has made it to 1.7.0. I've blogged about it before 
- 
There's now a mode to disable transitive dependencies. This mode still has some caveats because it lacks proper compiler support. But we welcome user reports regarding its usability. 
- 
Dune now has a --trace-fileto profile slow builds using shiny flame graphs in Chrome.
See full changelog
- 
Second step of the deprecation of jbuilder: the jbuilderbinary now emits a warning on every startup and bothjbuilderandduneemit warnings when encounteringjbuildfiles (#1752, @jeremiedimino)
- 
Change the layout of build artifacts inside _build. The new layout enables optimizations that depend on the presence of .cmxfiles of private modules (#1676, @bobot)
- 
Fix merlin handling of private module visibility (#1653 @bobot) 
- 
unstable-fmt: use boxes to wrap some lists (#1608, fix #1153, @emillon, thanks to @rgrinberg) 
- 
skip directories when looking up programs in the PATH (#1628, fixes #1616, @jeremiedimino) 
- 
Use lsofon macOS to implement--stats(#1636, fixes #1634, @xclerc)
- 
Generate dune-packagefiles for every package. These files are installed and read instead ofMETAfiles whenever they are available (#1329, @rgrinberg)
- 
Fix preprocessing for libraries with (include_subdirs ..)(#1624, fix #1626, @nojb, @rgrinberg)
- 
Do not generate targets for archive that don't match the modesfield. (#1632, fix #1617, @rgrinberg)
- 
When executing actions, open files lazily and close them as soon as possible in order to reduce the maximum number of file descriptors opened by Dune (#1635, #1643, fixes #1633, @jonludlam, @rgrinberg, @jeremiedimino) 
- 
Reimplement the core of Dune using a new generic memoization system (#1489, @rudihorn, @jeremiedimino) 
- 
Replace the broken cycle detection algorithm by a state of the art one from this paper (#1489, @rudihorn) 
- 
Get the correct environment node for multi project workspaces (#1648, @rgrinberg) 
- 
Add dune computeto call internal memoized functions (#1528, @rudihorn, @jeremiedimino)
- 
Add --trace-fileoption to trace dune internals (#1639, fix #1180, @emillon)
- 
Add --no-print-directory(borrowed from GNU make) to suppressEntering directorymessages. (#1668, @dra27)
- 
Remove --statsand track fd usage in--trace-file(#1667, @emillon)
- 
Add virtual libraries feature and enable it by default (#1430 fixes #921, @rgrinberg) 
- 
Fix handling of Control+C in watch mode (#1678, fixes #1671, @jeremiedimino) 
- 
Look for jsoo runtime in the same dir as the js_of_ocamlbinary when the ocamlfind package is not available (#1467, @nojb)
- 
Make the seqpackage available for OCaml >= 4.07 (#1714, @rgrinberg)
- 
Add locations to error messages where a rule fails to generate targets and rules that require files outside the build/source directory. (#1708, fixes #848, @rgrinberg) 
- 
Let Configuratorhandlesizeof(in addition to negative numbers). (#1726, fixes #1723, @Chris00)
- 
Fix an issue causing menhir generated parsers to fail to build in some cases. The fix is to systematically use -short-pathswhen callingocamlc -i(#1743, fix #1504, @jeremiedimino)
- 
Never raise when printing located errors. The code that would print the location excerpts was prone to raising. (#1744, fix #1736, @rgrinberg) 
- 
Add a dune upgradecommand for upgrading jbuilder projects to Dune (#1749, @jeremiedimino)
- 
When automatically creating a dune-projectfile, insert the detected name in it (#1749, @jeremiedimino)
- 
Add (implicit_transitive_deps <bool>)mode to dune projects. When this mode is turned off, transitive dependencies are not accessible. Only listed dependencies are directly accessible. (#1734, #430, @rgrinberg, @hnrgrgr)
- 
Add toplevelstanza. This stanza is used to define toplevels with libraries already preloaded. (#1713, @rgrinberg)
- 
Generate .merlinfiles that account for normal preprocessors defined using a subset of theactionlanguage. (#1768, @rgrinberg)
- 
Emit (orig_src_dir <path>)metadata indune-packagefor dune packages built with--store-orig-source-dircommand line flag (also controlled byDUNE_STORE_ORIG_SOURCE_DIRenv variable). This is later used to generate.merlinwithS-directives pointed to original source locations and thus allowing merlin to see those. (#1750, @andreypopp)
- 
Improve the behavior of dune promotewhen the files to be promoted have been deleted. (#1775, fixes #1772, @jeremiedimino)
- 
unstable-fmt: preserve comments (#1766, @emillon) 
- 
Pass flags correctly when using staged_pps(#1779, fixes #1774, @jeremiedimino)
- 
Fix an issue with the use of (mode promote)in the menhir stanza. It was previously causing intermediate mock files to be promoted (#1783, fixes #1781, @jeremiedimino)
- 
unstable-fmt: ignore files using OCaml syntax (#1784, @emillon) 
- 
Configurator: Add whichfunction to replace thewhichcommand line utility in a cross platform way. (#1773, fixes #1705, @Chris00)
- 
Make configurator append paths to $PKG_CONFIG_PATHon macOS. Previously it was prepending paths and thus$PKG_CONFIG_PATHset by users could have been overridden by homebrew installed libraries (#1785, @andreypopp)
- 
Disallow c/cxx sources that share an object file in the same stubs archive. This means that foo.candfoo.cppcan no longer exist in the same library. (#1788, @rgrinberg)
- 
Forbid use of %{targets}(or${@}in jbuild files) inside preprocessing actions (#1812, fixes #1811, @jeremiedimino)
- 
Add DUNE_PROFILEenvironment variable to easily set the profile. (#1806, @rgrinberg)
- 
Deprecate the undocumented (no_keep_locs)field. It was only necessary until virtual libraries were supported (#1822, fix #1816, @jeremiedimino)
- 
Rename unstable-fmttoformat-dune-fileand remove its--inplaceoption. (#1821, @emillon).
- 
Autoformatting: (using fmt 1.1)will also format dune files (#1821, @emillon).
- 
Autoformatting: record dependencies on .ocamlformat-ignorefiles (#1824, fixes #1793, @emillon)