# \[ANN\] Dune 1.9.0

**URL:** <https://discuss.ocaml.org/t/ann-dune-1-9-0/3646>\
**Category:** Community\
**Tags:** jbuilder, dune, announce\
**Created:** [April 10, 2019, 9:00am UTC](https://discuss.ocaml.org/t/ann-dune-1-9-0/3646 "2019-04-10T09:00:50Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![rgrinberg](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/rgrinberg/32/40_2.png) [@rgrinberg](https://discuss.ocaml.org/u/rgrinberg)\
**Post date:** [April 10, 2019, 9:00am UTC](https://discuss.ocaml.org/t/ann-dune-1-9-0/3646/1 "2019-04-10T09:00:50Z")

</div>

On behalf of the dune team, I’m pleased to announce the release of Dune 1.9.0. This release introduces a few exciting new features:

- A tagging mechanism for implementations called [variants](https://dune.readthedocs.io/en/latest/variants.html)
- The ability to build libraries in the Coq proof assistant.
- A new `dune init` command to help users quickly generate boilerplate and get start with dune projects (contributed by @shonfeder)

I would like to thank Lucas Pluvinage and @ejgallego for contributing the first two features respectively. They’ve also collaborated on a [blog post](https://dune.build/blog/dune-1-9-0/) to describe these features in detail.

As usual, the change log is replicated here for your convenience:

## 1.9.0 (09/04/2019)

- Warn when generated `.merlin` does not reflect the preprocessing  
specification. This occurs when multiple stanzas in the same directory use  
different preprocessing specifications. This warning can now be disabled with  
`allow_approx_merlin` (#1947, fix #1946, @rgrinberg)

- Watch mode: display “Success” in green and “Had errors” in red (#1956,  
@emillon)

- Fix glob dependencies on installed directories (#1965, @rgrinberg)

- Add support for library variants and default implementations. (#1900,  
@TheLortex)

- Add experimental `$ dune init` command. This command is used to create or  
update project boilerplate. (#1448, fixes #159, @shonfeder)

- Experimental Coq support (fix #1466, @ejgallego)

- Install .cmi files of private modules in a `.private` directory (#1983, fix  
#1973 @rgrinberg)

- Fix `dune subst` attempting to substitute on directories. (#2000, fix #1997,  
@rgrinberg)

- Do not list private modules in the generated index. (#2009, fix #2008,  
@rgrinberg)

- Warn instead of failing if an opam file fails to parse. This opam file can  
still be used to define scope. (#2023, @rgrinberg)

- Do not crash if unable to read a directory when traversing to find root  
(#2024, @rgrinberg)

- Do not exit dune if some source directories are unreadable. Instead, warn the  
user that such directories need to be ignored (#2004, fix #310, @rgrinberg)

- Fix nested `(binaries ..)` fields in the `env` stanza. Previously, parent  
`binaries` fields would be ignored, but instead they should be combined.  
(#2029, @rgrinberg)

- Allow “.” in `c_names` and `cxx_names` (#2036, fix #2033, @rgrinberg)

- Format rules: if a dune file uses OCaml syntax, do not format it.  
(#2014, fix #2012, @emillon)

---

<div class="post-metadata">

**Author:** ![jeremiedimino](https://sea2.discourse-cdn.com/flex020/user_avatar/discuss.ocaml.org/jeremiedimino/32/699_2.png) [@jeremiedimino](https://discuss.ocaml.org/u/jeremiedimino)\
**Post date:** [May 2, 2019, 12:30pm UTC](https://discuss.ocaml.org/t/ann-dune-1-9-0/3646/2 "2019-05-02T12:30:21Z")

</div>

Update: we found a flaw in the design of library variants and are making some changes to the feature, see [this post](https://discuss.ocaml.org/t/dune-serious-bug-found-in-the-design-of-library-variants/3743) for details.
