OCaml Changelog

RSS

Read the latest releases and updates from the OCaml ecosystem.

Dune 1.6.0

The dune team is pleased to announce the release of Dune 1.6.0. This release does not contain any notable features or bug fixes that need to be specifically pointed out. Nevertheless, I expect that this will be a quality of life improvement to power users who have experienced dune's sharper corners.

Happy hacking!

See full changelog
  • Expand variables in install stanzas (#1354, @mseri)

  • Add predicate language support for specifying sub directories. This allows the use globs, set operations, and special values in specifying the sub directories used for the build. For example: (dirs :standard \ lib*) will use all directories except those that start with lib. (#1517, #1568, @rgrinberg)

  • Add binaries field to the (env ..) stanza. This field sets and overrides binaries for rules defined in a directory. (#1521, @rgrinberg)

  • Fix a crash caused by using an extension in a project without dune-project file (#1535, fix #1529, @jeremiedimino)

  • Allow %{bin:..}, %{exe:..}, and other static expansions in the deps field. (#1155, fix #1531, @rgrinberg)

  • Fix bad interaction between on-demand ppx rewriters and using multiple build contexts (#1545, @jeremiedimino)

  • Fix handling of installed .dune files when the backend is declared via a dune file (#1551, fixes #1549, @jeremiedimino)

  • Add a --stats command line option to record resource usage (#1543, @jeremiedimino)

  • Fix dune build @doc deleting highlight.pack.js on rebuilds, after the first build (#1557, @aantron).

  • Allow targets to be directories, which Dune will treat opaquely (#1547, @jordwalke)

  • Support for OCaml 4.08: List.t is now provided by OCaml (#1561, @ejgallego)

  • Exclude the local esy directory (_esy) from the list of watched directories (#1578, @andreypopp)

  • Fix the output of dune external-lib-deps (#1594, @jeremiedimino)

  • Introduce data_only_dirs to replace ignored_subdirs. ignored_subdirs is deprecated since 1.6. (#1590, @rgrinberg)

  • Add dune external-lib-deps --sexp --unstable-by-dir so that the output can be easily processed by a machine (#1599, @jeremiedimino)

See full changelog
  • lots of small fixes
  • better handling of attributes and extension points
  • better handling of GADT definitions
  • fixed a stack-overflow on extremely large files
  • indent the same (1 step) after let f = fun x -> and let f =\n fun x ->
  • build using dune

Dune 1.5.1

See full changelog
  • Fix dune utop <dir> when invoked from a sub-directory of the project (#1520, fix #1518, @diml)

  • Fix bad interaction between on-demand ppx rewriters and polling mode (#1525, fix #1524, @diml)

Dune 1.5.0

On behalf of the dune team, I'm pleased to announce the 1.5.0 release of dune. This release does not contain any major features, but it does contain a few notable bug fixes and a couple of useful little additions. First of all, $ dune exec now supports C-c again - I know this affected many of you. This releases introduces a couple of new aliases that will hopefully find their way into your workflows.

The first alias is @all and has been much requested by our users. $ dune build @dir/all will build all user defined targets in a the directory dir. This would include binaries, libraries, and user defined targets in dir. This alias should have been the defaulted instead of @install when running $ dune build, but we'll have to wait until dune 2.0 to make this compatibility breaking change. In the mean time, I highly recommend everyone to use $ dune build @all instead of $ dune build meanwhile. You may also set the default alias per project as well:

(alias
 (name default)
 (deps (alias_rec all)))

The second new alias is @check. It is inspired by cargo's check subcommand and roughly corresponds to type checking the project and building all artifacts necessary for editor integration - cmt, cmti's, .merlin, etc. This is the fastest target to verify that a project is in a valid state. Note that this alias will not relink binaries so it might not catch errors such as missing stubs. I find this alias handy when doing large, type driven refactoring of a codebase.

The rest of the change log is replicated below. Happy hacking!

See full changelog
  • Filter out empty paths from OCAMLPATH and PATH (#1436, @rgrinberg)

  • Do not add the lib.cma.js target in lib's directory. Put this target in a sub directory instead. (#1435, fix #1302, @rgrinberg)

  • Install generated OCaml files with a .ml rather than a .ml-gen extension (#1425, fix #1414, @rgrinberg)

  • Allow to use the bigarray library in >= 4.07 without ocamlfind and without installing the corresponding otherlib. (#1455, @nojb)

  • Add @all alias to build all targets defined in a directory (#1409, fix #1220, @rgrinberg)

  • Add @check alias to build all targets required for type checking and tooling support. (#1447, fix #1220, @rgrinberg)

  • Produce the odoc index page with the content wrapper to make it consistent with odoc's theming (#1469, @rizo)

  • Unblock signals in processes started by dune (#1461, fixes #1451, @jeremiedimino)

  • Respect OCAMLFIND_TOOLCHAIN and add a toolchain option to contexts in the workspace file. (#1449, fix #1413, @rgrinberg)

  • Fix error message when using copy_files stanza to copy files from a non sub directory with lang set to dune < 1.3 (#1486, fixes #1485, @NathanReb)

  • Install man pages in the correct subdirectory (#1483, fixes #1441, @emillon)

  • Fix version syntax check for test stanza's action field. Only emits a warning for retro-compatibility (#1474, fixes #1471, @NathanReb)

  • Fix interpretation of paths in env stanzas (#1509, fixes #1508, @jeremiedimino)

  • Add context_name expansion variable (#1507, @rgrinberg)

  • Use shorter paths for generated on-demand ppx drivers. This is to help Windows builds where paths are limited in length (#1511, fixes #1497, @jeremiedimino)

  • Fix interpretation of environment variables under setenv. Also forbid dynamic environment names or values (#1503, @rgrinberg).

We are pleased to announce the release of opam 2.0.1.

This new version contains mainly backported fixes, some platform-specific:

  • Cold boot for MacOS/CentOS/Alpine
  • Install checksum validation on MacOS
  • Archive extraction for OpenBSD now defaults to using gtar
  • Fix compilation of mccs on MacOS and Nix platforms
  • Do not use GNU-sed specific features in the release Makefile, to fix build on OpenBSD/FreeBSD
  • Cleaning to enable reproducible builds
  • Update configure scripts

And some opam specific:

  • git: fix git fetch by sha1 for git < 2.14
  • linting: add test variable warning and empty description error
  • upgrade: convert pinned but not installed opam files
  • error reporting: more comprehensible error message for tar extraction, and upgrade of git-url compilers
  • opam show: upgrade given local files
  • list: as opam 2.0.0 list doesn't return non-zero code if list is empty, add --silent option for a silent output and returns 1 if list is empty

Installation instructions (unchanged):

  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
    

    or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed.

  2. From source, using opam:

    opam update; opam install opam-devel
    

    (then copy the opam binary to your PATH as explained, and don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed)

  3. From source, manually: see the instructions in the README.

We hope you enjoy this new major version, and remain open to bug reports and suggestions.

NOTE: this article is cross-posted on opam.ocaml.org and ocamlpro.com. Please head to the latter for the comments!

See full changelog
  • Remove the status and log commands (#95, @samoht)
  • Fix dune-release publish doc when using multiple packages (#96, @samoht)
  • Fix inferred package name when reading dune-project files (#104. @samoht)
  • Add .ps and .eps files to default files excluded from watermarking (backport of dbuenzli/topkg@6cf1eae)
  • Fix distribution uri when homepage is using github.io (#102, @samoht)
  • dune-release lint now checks that a description and a synopsis exist in opam2 files (#101, @samoht)
  • Add a more explicit error message if git checkout fails in the local opam-repository (#98, @samoht)
  • Do not create an extra _html folder when publishing docs on Linux (#94, @anuragsoni and @samoht)

Odoc 1.3.0

See full changelog

Additions

  • Reason syntax output (#156, Patrick Stapfer).
  • BuckleScript support (#179, Leandro Ostera).
  • New CSS, appearance (#139, Rizo Isrof).
  • Table of contents for the sections in each page (fe26392).
  • Navigation breadcrumbs, and limit length of module paths in page titles (#150, Yotam Barnoy).
  • Syntax highlighting of code blocks (99f2be9).
  • Compiled odoc binary is now self-contained and requires no external files (bd3b53c).
  • --theme-uri option (#154, Rizo Isrof).
  • Option to convert .mld to HTML fragments rather than complete pages (#166, Rizo Isrof).

Bugs fixed

  • Use regular dashes in arrows to support ligature fonts (#180, Leandro Ostera).
  • Do not excessively indent code blocks (#133, Bobby Priambodo).
  • Always prepend page- to output file name when compiling .mld files (#183, Rizo Isrof).
  • Support floatarray type introduced in OCaml 4.06 (eb36158, Thomas Refis).
  • Support destructive type substitution (57cbb4e, Thomas Refis).
  • Render <i> tags in italics (#104, Thibault Suzanne).
  • Flush HTML output correctly (#167, Rizo Isrof).
  • Make HTML output more valid (#185, Leandro Ostera).
  • Various improvements to parsing, output, documentation, and the development workflow (Yotam Barnoy, Luke Czyszczonik, Mohamed Elsharnouby, Rudi Grinberg, Rizo Isrof, Leandro Ostera, Bobby Priambodo, Thomas Refis, Patrick Stapfer).

Build and development

  • odoc is now one repo.
  • Dropped several dependencies.
  • Considerable refactoring.
  • New commnt parser (78a6699).
  • Improved development workflow, including CONTRIBUTING.md, tests, coverage analysis, CI, and issue organization.
  • Initial NPM packaging (Leandro Ostera, #214).
  • Skeleton of odoc manual (Leandro Ostera, #203).

Dune 1.4.0

The dune team is pleased to announce the 1.4.0 release of Dune. The highlight of this release is the improved support for menhir, in particular the long awaited --infer flag. This seemingly small feature took quite a bit of coordination between the maintainers of dune and menhir. So I'd like to thank @fpottier for helping us out with this by adding better support for dune in menhir itself, and implementing the majority of the support in dune as well.

The rest of the release is mostly bug fixes, but one notable feature is that dune is now C-c friendly. Dune will now resume exactly where it's stopped after interruption instead of restarting the entire build.

EDIT: I actually forgot to mention that this release also includes integration with OCamlFormat due to @emillon. Initially, I had thought that this feature was released in 1.3.0. Sorry about that!

See full changelog
  • Do not fail if the output of ocamlc -config doesn't include standard_runtime (#1326, @jeremiedimino)

  • Let Configurator.V1.C_define.import handle negative integers (#1334, @Chris00)

  • Re-execute actions when a target is modified by the user inside _build (#1343, fix #1342, @jeremiedimino)

  • Pass --set-switch to opam (#1341, fix #1337, @jeremiedimino)

  • Fix bad interaction between multi-directory libraries the menhir stanza (#1373, fix #1372, @jeremiedimino)

  • Integration with automatic formatters (#1252, fix #1201, @emillon)

  • Better error message when using (self_build_stubs_archive ...) and (c_names ...) or (cxx_names ...) simultaneously. (#1375, fix #1306, @nojb)

  • Improve name detection for packages when the prefix isn't an actual package (#1361, fix #1360, @rgrinberg)

  • Support for new menhir rules (#863, fix #305, @fpottier, @rgrinberg)

  • Do not remove flags when compiling compatibility modules for wrapped mode (#1382, fix #1364, @rgrinberg)

  • Fix reason support when using staged_pps (#1384, @charlesetc)

  • Add support for enabled_if in rule, menhir, ocamllex, ocamlyacc (#1387, @jeremiedimino)

  • Exit gracefully when a signal is received (#1366, @jeremiedimino)

  • Load all defined libraries recursively into utop (#1384, fix #1344, @rgrinberg)

  • Allow to use libraries bytes, result and uchar without findlib installed (#1391, @nojb)

  • Take argument to self_build_stubs_archive into account. (#1395, @nojb)

  • Fix bad interaction between env customization and vendored projects: when a vendored project didn't have its own env stanza, the env stanza from the enclosing project was in effect (#1408, @jeremiedimino)

  • Fix stop early bug when scanning for watermarks (#1423, @struktured)

See full changelog
  • Improve: set break-sequences in sparse and compact profiles (#455, @jberdine)
  • Improve: keep a space inside tuples parens (#453, @gpetiot)
  • Improve: --root option to isolate configuration files (#402, @gpetiot)
  • Fix: missing parens around partially-applied :: (#452, @jberdine)
  • Fix: parens around expressions with attributes (#441, @gpetiot)
  • Build: do not execute shell scripts directly in build (#448, @dra27)
  • Add: read ocp indent config files (#445, @gpetiot)
  • Improve: option 'break-sequences' (#434, @gpetiot)
  • Improve: option 'no-indicate-multiline-delimiters' to have less whitespaces (#429, @gpetiot)
  • Fix: outdent before arrow (#444, @gpetiot)
  • Improve: User documentation (#449, @gpetiot)
  • Improve: option 'cases-exp-indent' to adjust indent (#428, @gpetiot)
  • Add: compact and sparse profiles (#408, @jberdine)
  • Improve: explicit error message in case of 'permission denied' error (#425, @gpetiot)
  • Fix: comment stabilization in Pexp_override (#422, @gpetiot)
  • Fix: corner case while formatting type variables (#440, @hhugo)
  • Fix: many missing comments (#418, @hhugo)
  • Fix: asserts and attributes (#414, @hhugo)
  • Fix: extension and attribute (#417, @hhugo)
  • Improve: support for function%ext (#416, @hhugo)
  • Fix: Inconsistent spacing around comments in signatures vs structures (#437, @gpetiot)
  • Improve: better error with location when comment dropped (#401, @gpetiot)
  • Fix doc comments (#413, @hhugo)
  • Improve: use input_name for error messages (@hhugo)
  • Improve: break after inherit (@hhugo)
  • Fix: aliases inside constructor declaration (#424, @gpetiot)
  • Fix: broken invariant for Pmod_unpack (#421, @gpetiot)
  • Fix: print error details in debug mode only (#420, @hhugo)
  • Fix: mark_parenzed_inner_nested_match (@hhugo)
  • Improve: tune the janestreet profile (@hhugo)
  • Improve: disable ocamlformat if no dot ocamlformat in the project (#391, @hhugo)
  • Improve: new option to control spacing around let bindings (#344, @hhugo)
  • Fix: prec of string/array sugar (#381, @hhugo)
  • Fix: lost comment in constraint expression (#400, @gpetiot)
  • Fix: lost cmt near functor (#399, @gpetiot)
  • Improve: preset profiles (default & janestreet) (#390, @gpetiot)
  • Improve: try to fit simple list/array elements on a single line (#375, @gpetiot)
  • Fix: bad comment spacing with module-item-spacing=compact (#395, @gpetiot)
  • Fix: dropped comment in revapply of extension (#394, @gpetiot)
  • Improve: let-and structures spacing depends on module-item-spacing (#367, @gpetiot)
  • Fix: consecutive prefix operator (#386, @hhugo)
  • Fix: invalid (#383, @hhugo)
  • Fix: lazy and alias (#388, @hhugo)
  • Improve: main loop and error reporting (#389, @hhugo)
  • Fix: exposed_left_typ (#385, @hhugo)
  • Fix: rec functor (#382, @hhugo)
  • Fix: while%ext/for%ext (@hhugo)
  • Fix: more on class (@hhugo)
  • Fix: invalid syntax on class (@hhugo)
  • Improve: follow XDG for global config files (@gpetiot)
  • Improve: add support for bigarray sugar index operator (@hhugo)
  • Add: support reading input from stdin (#353, @bkase)
  • Fix: the precedence of options (@gpetiot)
  • Improve: doc of config option choice alternatives (#354, @jberdine)
  • Improve: string formatting (@hhugo)
See full changelog
  • Switched build to dune (thanks to @nojb).
  • Added support for 4.07.1
  • Various bugfixes in the backend and in the editor modes.
  • Fix build on OCaml 4.02 to 4.04

Dune 1.3.0

It is my pleasure to announce the release of Dune 1.3.0. This release does not contain many features, but it does contain a few important bug fixes. Everyone is encouraged to upgrade.

Happy Hacking.

See full changelog
  • Support colors on Windows (#1290, @jeremiedimino)

  • Allow dune.configurator and base to be used together (#1291, fix #1167, @jeremiedimino)

  • Support interrupting and restarting builds on file changes (#1246, @kodek16)

  • Fix findlib-dynload support with byte mode only (#1295, @bobot)

  • Make dune rules -m output a valid makefile (#1293, @jeremiedimino)

  • Expand variables in (targets ..) field (#1301, #1320, fix #1189, @nojb, @rgrinberg, @jeremiedimino)

  • Fix a race condition on Windows that was introduced in 1.2.0 (#1304, fix #1303, @jeremiedimino)

  • Fix the generation of .merlin files to account for private modules (@rgrinberg, fix #1314)

  • Exclude the local opam switch directory (_opam) from the list of watched directories (#1315, @dysinger)

  • Fix compilation of the module generated for findlib.dynload (#1317, fix #1310, @jeremiedimino)

  • Lift restriction on copy_files and copy_files# stanzas that files to be copied should be in a subdirectory of the current directory. (#1323, fix #911, @nojb)

See full changelog
  • Determine opam-repository fork user from URI (#64, @NathanReb and @diml)
  • All subcommands now support multiple package names (@samoht)
  • Do not remove Makefile from the distribution archives (#71, @samoht)
  • Do not duplicate version strings in opam file (#72, @samoht)
  • Fix configuration file upgrade from 0.2 (#55, @samoht)
  • Add a --tag option to select the release tag (@samoht)
  • Add a --version option to select the release version (@samoht)
  • Fix --keep-v (#70, @samoht)
  • Make dune-release <OPTIONS> a shorchut to dune-release bistro <OPTIONS> (#75, @samoht)
  • Add a --no-open option to not open a browser after creating a new P (#79, @samoht)
  • Control --keep-v and --no-auto-open via options in the config file (#79, @samoht)
  • Be flexible with file names (#86 and #20, @anuragsoni)

Ppxlib 0.3.1

See full changelog
  • Add Attribute.declare_with_name_loc (#33, @diml)
  • Let the tool name pass thought when used as a -ppx (#41, @diml)
  • Update the AST to 4.06 (#8, @xclerc)

We are happy to announce the final release of opam 2.0.0.

A few weeks ago, we released a last release candidate to be later promoted to 2.0.0, synchronised with the opam package repository upgrade.

You are encouraged to update as soon as you see fit, to continue to get package updates: opam 2.0.0 supports the older formats, and 1.2.2 will no longer get regular updates. See the Upgrade Guide for details about the new features and changes.

The website opam.ocaml.org has been updated, with the full 2.0.0 documentation pages. You can still find the documentation for the previous versions in the corresponding menu.

Package maintainers should be aware of the following:

  • the master branch of the opam package repository is now in the 2.0.0 format
  • package submissions must accordingly be made in the 2.0.0 format, or using the new version of opam-publish (2.0.0)
  • anything that was merged into the repository in 1.2 format has been automatically updated to the 2.0.0 format
  • the 1.2 format repository has been forked to its own branch, and will only be updated for critical fixes

For custom repositories, the advice remains the same.


Installation instructions (unchanged):

  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
    

    or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed.

  2. From source, using opam:

    opam update; opam install opam-devel
    

    (then copy the opam binary to your PATH as explained, and don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed)

  3. From source, manually: see the instructions in the README.

We hope you enjoy this new major version, and remain open to bug reports and suggestions.

NOTE: this article is cross-posted on opam.ocaml.org and ocamlpro.com. Please head to the latter for the comments!

Ppxlib 0.2.2

See full changelog

Oops, we went looking but didn't find the changelog for this release 🙈

Dune 1.2.1

Dune 1.2.1 includes a few critical bug fixes over 1.2.0. Everyone is encouraged to upgrade as soon as possible.

On behalf of the dune team,

Happy hacking.

See full changelog
  • Enrich the dune Emacs mode with syntax highlighting and indentation. New file dune-flymake to provide a hook dune-flymake-dune-mode-hook to enable linting of dune files. (#1265, @Chris00)

  • Pass link_flags to cc when compiling with Configurator.V1.c_test (#1274, @rgrinberg)

  • Fix digest calculation of aliases. It should take into account extra bindings passed to the alias (#1277, fix #1276, @rgrinberg)

  • Fix a bug causing dune to fail eagerly when an optional library isn't available (#1281, @jeremiedimino)

  • ocamlmklib should use response files only if ocaml >= 4.08 (@1268, @bryphe)

Dune 1.2.0

On behalf of the dune team, I'm pleased to announce the release of Dune 1.2.0. This release contains many new goodies which I will not describe here. This is because Etienne Millon has prepared a blog post for this release: https://tarides.com/2018-09-06-dune-1-2-0.html

I'd also like to personally thank him for all work he's done to make this release so great.

As usual, the change log is replicated below for your convenience.

Happy hacking!

See full changelog
  • Ignore stderr output when trying to find out the number of jobs available (#1118, fix #1116, @jeremiedimino)

  • Fix error message when the source directory of copy_files does not exist. (#1120, fix #1099, @emillon)

  • Highlight error locations in error messages (#1121, @emillon)

  • Display actual stanza when package is ambiguous (#1126, fix #1123, @emillon)

  • Add dune unstable-fmt to format dune files. The interface and syntax are still subject to change, so use with caution. (#1130, fix #940, @emillon)

  • Improve error message for dune utop without a library name (#1154, fix #1149, @emillon)

  • Fix parsing ocamllex stanza in jbuild files (#1150, @rgrinberg)

  • Highlight multi-line errors (#1131, @anuragsoni)

  • Do no try to generate shared libraries when this is not supported by the OS (#1165, fix #1051, @jeremiedimino)

  • Fix Flags.write_{sexp,lines} in configurator by avoiding the use of Stdune.Path (#1175, fix #1161, @rgrinberg)

  • Add support for findlib.dynload: when linking an executable using findlib.dynload, automatically record linked in libraries and findlib predicates (#1172, @bobot)

  • Add support for promoting a selected list of files (#1192, @jeremiedimino)

  • Add an emacs mode providing helpers to promote correction files (#1192, @jeremiedimino)

  • Improve message suggesting to remove parentheses (#1196, fix #1173, @emillon)

  • Add (wrapped (transition "..message..")) as an option that will generate wrapped modules but keep unwrapped modules with a deprecation message to preserve compatibility. (#1188, fix #985, @rgrinberg)

  • Fix the flags passed to the ppx rewriter when using staged_pps (#1218, @jeremiedimino)

  • Add (env var) to add a dependency to an environment variable. (#1186, @emillon)

  • Add a simple version of a polling mode: dune build -w keeps running and restarts the build when something change on the filesystem (#1140, @kodek16)

  • Cleanup the way we detect the library search path. We no longer call opam config var lib in the default build context (#1226, @jeremiedimino)

  • Make test stanzas honor the -p flag. (#1236, fix #1231, @emillon)

  • Test stanzas take an optional (action) field to customize how they run (#1248, #1195, @emillon)

  • Add support for private modules via the private_modules field (#1241, fix #427, @rgrinberg)

  • Add support for passing arguments to the OCaml compiler via a response file when the list of arguments is too long (#1256, @jeremiedimino)

  • Do not print diffs by default when running inside dune (#1260, @jeremiedimino)

  • Interpret $ dune build dir as building the default alias in dir. (#1259, @rgrinberg)

  • Make the dynlink library available without findlib installed (#1270, fix #1264, @rgrinberg)

See full changelog
  • Improve: simplify setting option defaults, slight --help improvement (#350, @jberdine)
  • Improve: update emacs mode to use replace-buffer-contents (#345, @hhugo)
  • Improve: add option to not force-break structs (#346, @jberdine)
  • Improve: move 'formatting' options into separate section (#348, @gpetiot)
  • Improve: fun sugar (@hhugo)
  • Improve: add option to omit open lines between one-line module items (#303, @gpetiot)
  • Fix: infix ops (@hhugo)
  • Improve: reformat files with no locations (@hhugo)
  • Improve: better error when max-iters = 1 (@hhugo)
  • Improve: breaking before arrows in pattern match cases (@jberdine)
  • Improve: no parens for trailing 'not' (@hhugo)
  • Improve: missing break hint, fix #331 (@hhugo)
  • Improve: comments before match (#330, @jberdine)
  • Fix: missing comments (@hhugo)
  • Fix: missing attributes due to sugar (@hhugo)
  • Fix: parens non trivial rhs for # infix ops (@hhugo)
  • Improve: let-module-in break before in (#328, @jberdine)
  • Improve: sugar for nestest module_with (@hhugo)
  • Improve: attributes on let bindings (#324, @jberdine)
  • Improve: wrapping of functor args in type declaration (#315, @gpetiot)
  • Fix: comments attachment with infix ops (@hhugo)
  • Fix: comments attachment with Pexp_fun (@hhugo)
  • Fix: docstrings as attributes (@hhugo)
  • Improve: refactor and improve documentation of options (#302, @gpetiot)
  • Improve: error reporting in emacs integration (#304, @jberdine)
  • Improve: pexp_open as final arg of infix op (#314, @jberdine)
  • Fix: missing parens around labeled record pattern arg (@jberdine)
  • Fix: missing attributes (@hhugo)
  • Fix: duplicated (x3) attributes in pexp_letmodule (@hhugo)
  • Improve: allow to locally disable ocamlformat (@hhugo)
  • Improve: corner case indentation of fun -> function (#312, @jberdine)
  • Improve: labeled, optional, and default args (@jberdine)
  • Improve: punning default arg with type constraint (@jberdine)
  • Improve: add options to controls various spaces (#284, @hhugo)
  • Improve: add option to disable wrapping fun args (#283, @hhugo)
  • Improve: add option --break-cases to break each pattern-matching case (#251, @gpetiot)
  • Improve: rename --nested-parens option (@hhugo)
  • Improve: ws before colon for constraint (#293, @hhugo)
  • Improve: option to choose where to parens nested match (@hhugo)
  • Improve: always parens nested match (even the right most one) (@hhugo)
  • Improve: always break for let_and contruct (@hhugo)
  • Fix: missing comments (@hhugo)
  • Improve: Add option to preserve style of local module open (#267, @gpetiot)
  • Improve: preserve extension point formatting (@hhugo)
  • Improve: make double semi consistent between implementation and use_file (#292, @hhugo)
  • Improve: configure ocamlformat using attributes (@hhugo)
  • Improve: extension point (@hhugo)
  • Improve: break in type declaration for variant and record (#280, @hhugo)
  • Fix: memory leak (@hhugo)
  • Test: add ocaml compiler to test suite, and improve make -C test (@jberdine)
  • Fix: unary operator +/- (@hhugo)
  • Fix: doc comments in class (@hhugo)
  • Fix: ocaml bug, sort fields (@hhugo)
  • Improve: empty mod with comments (@hhugo)
  • Improve: disable warning generated by the lexer in quiet mode (@hhugo)
  • Fix: record update (@hhugo)
  • Fix: rec let binding and attribute (@hhugo)
  • Fix: punning (@hhugo)
  • Fix: let open and constraint (@hhugo)
  • Fix: not extension sugar when attribute (@hhugo)
  • Fix: no-comment-check missing case (@hhugo)
  • Fix: string literal (@hhugo)
  • Fix: format of infix in presence of %; (@hhugo)
  • Fix: let binding and type annot (@hhugo)
  • Fix: binding when lhs is an extension (@hhugo)
  • Fix: pat constraint in payload (@hhugo)
  • Fix: let rec with extension (@hhugo)
  • Fix: comments (@hhugo)
  • Fix: comments in fmt_case (@hhugo)
  • Fix: comments around Longident (@hhugo)
  • Fix: missing comment for pmty_with (@hhugo)
  • Improve: add option to disambiguate infix precedence with parens (@jberdine)
  • Improve: not when infix op arg (@jberdine)
  • Improve: add a flag to skip all checks about comments (@hhugo)
  • Improve: breaking of module ident/unpack/extension exps (#269, @jberdine)
  • Fix: literal sub-exps with attributes (@jberdine)
  • Fix: many fixes regarding attributes (@hhugo)
  • Improve: preserve formatting of block comments (#255, @hhugo)
  • Improve: breaking of applications with long literal list args (#258, @jberdine)
  • Fix: sugar functor (@hhugo)
  • Fix: type alias in variant (@hhugo)
  • Improve: formatting of comments (@jberdine)
  • Fix: prefix operators (@hhugo)
  • Fix: exception declarations (@hhugo)
  • Fix: doc comments in structure (#250, @hhugo)
  • Fix: add parens around pat with trailing attr (@hhugo)
  • Fix: let binding and Ppat_or (@hhugo)
  • Fix: be more permissive with pattern (@hhugo)
  • Fix: fix string_literal with when its location includes its attribute (#244, @hhugo)
  • Improve: improve errors returned to the user. (#243, @hhugo)
  • Fix: missing comments for Pexp_construct (#240, @hhugo)
  • Fix: multiple fixes around classes (#242, @hhugo)
  • Fix: comments in empty () and [] (#241, @hhugo)
  • Fix: support empty variant (#239, @hhugo)
  • Fix: add missing attribute (#238, @hhugo)
  • Fix: be more permissive with ppat_interval (#237, @hhugo)
  • Improve: remove trailing ws (#210, @hhugo)
  • Improve: attributes on type declarations (#232, @jberdine)
  • Improve: breaking of infix Array and String get and set ops (#233, @jberdine)
  • Fix: attributes and doc comments (#221, @hhugo)
  • Improve: spacing of module unpack (#230, @jberdine)
  • Improve: no parent for new (@hhugo)
  • Fix: Revert: Improve: remove redundant parens around application operators (@hhugo)
  • Improve: array alignment (#226, @hhugo)
  • Improve: nested array infix ops (#225, @hhugo)
  • Fix: is_adjacent and remove [~inclusive] from [Source.string_between] (@hhugo)
  • Fix: Cmts.CmtSet.split (@hhugo)
  • Improve: Allow comments inside empty delimited "things" (#223, @hhugo)
  • Fix: Source.ends_line (#222, @hhugo)
  • Improve: empty struct and sig (#217, @hhugo)
  • Improve: support for toplevel files (#218, @hhugo)
  • Fix: string literal, fix #214 (#219, @hhugo)
  • Improve: more tuning for functors (@hhugo)
  • Improve: sugar for functor type with multiple args (@hhugo)
  • Improve: sugar for functors with multiple args (@hhugo)
  • Improve: module type with (@hhugo)
  • Improve: break before with/and type (@hhugo)
  • Improve: break between fun args (@hhugo)
  • Improve: module unpacking (#215, @hhugo)
  • Improve: for & while loops (#211, @hhugo)
  • Fix: attributes on ite (#209, @hhugo)
  • Fix: partially applied (+) and (-) (#208, @hhugo)
  • Fix: polymorphic variant (#202, @hhugo)
  • Fix: parens with lazy pat (fix #199) (#201, @hhugo)
  • Improve: omit excess indentation of function cases (@jberdine)
  • Improve: extensions with payloads of multiple structure items (@jberdine)
  • Improve: parenthesization and attribute placement of if-then-else (@jberdine)
  • Fix: do not attach comments to docstrings (@jberdine)
  • Fix: short syntax for extensions (#193, @hhugo)
  • Fix: missing attrs for pcl_fun (@hhugo)
  • Fix: pos of attribute for functors (@hhugo)
  • Fix: () module only if not attrs (@hhugo)
  • Fix: missing attrs for object (@hhugo)
  • Fix: no short form of extension with attribs (@hhugo)
  • Fix: normalization for Pexp_poly and Pexp_constraint (#190, @hhugo)
  • Fix: some parenthesization context checks (#189, @hhugo)
  • Fix: attributes on fun expressions (@jberdine)
  • Fix: extensions with multiple module-level eval expressions (#185, @jberdine)
  • Fix: functor & apply (#182, @hhugo)
  • Fix: module rec with (@hhugo)
  • Fix: more parens in pat_constraint (@hhugo)
  • Improve: tuple & constraint (@hhugo)
  • Improve: empty module (#178, @hhugo)
  • Fix: extensible variant (#177, @hhugo)
  • Fix: index operator (#176, @hhugo)
  • Improve: empty module sig (@hhugo)
  • Fix: add attributes to module signature (@hhugo)
  • Add: support for objects and classes (#173, @hhugo)
  • Improve: remove some redundant parens around tuple types (@jberdine)
  • Fix: args in let bindings (@hhugo)
  • Improve: let module%ext (@hhugo)
  • Fix: infix op in alias (@hhugo)
  • Fix: extensions pat (@hhugo)
  • Fix: limit use of short syntax for extensions (@hhugo)
  • Improve: allow break after Psig_include (@jberdine)
  • Fix: { (a; b) with a; b } (@hhugo)
  • Fix: with type [longident] (@hhugo)
  • Fix: attributes on polymorphic variants (@hhugo)
  • Fix: attribute in let bindings (@hhugo)
  • Fix: private in extensible variant (@hhugo)
  • Fix: gadt in extensible variant (@hhugo)
  • Fix: missing parens in list pattern (@hhugo)
  • Improve: format [new e] like an apply (@hhugo)
  • Fix: parens for constraint (@hhugo)
  • Fix: avoid emitting >] which is an unparsable keyword (#171, @hhugo)
  • Fix: misplaced comments on module type of (@jberdine)

Dune 1.1.1

See full changelog
  • Fix $ jbuilder --dev (#1104, fixes #1103, @rgrinberg)

  • Fix dune exec when --build-dir is set to an absolute path (#1105, fixes #1101, @rgrinberg)

  • Fix duplicate profile argument in suggested command when an external library is missing (#1109, #1106, @emillon)

  • -opaque wasn't correctly being added to modules without an interface. (#1108, fix #1107, @rgrinberg)

  • Fix validation of library name fields and make sure this validation also applies when the name is derived from the public_name. (#1110, fix #1102, @rgrinberg)

  • Fix a bug causing the toplevel env stanza in the workspace file to be ignored when at least one context had (merlin) (#1114, @diml)

Dune 1.1.0

On behalf of the dune team, I'm proud to announce the 1.1.0 release of dune. This release contains a few interesting features that I won't describe in this post, because I've already written a dedicated blog post about this release: http://rgrinberg.com/posts/dune-upcoming-1-1/

See full changelog
  • Fix lookup of command line specified files when --root is given. Previously, passing in --root in conjunction with --workspace or --config would not work correctly (#997, @rgrinberg)

  • Add support for customizing env nodes in workspace files. The env stanza is now allowed in toplevel position in the workspace file, or for individual contexts. This feature requires (dune lang 1.1) (#1038, @rgrinberg)

  • Add enabled_if field for aliases and tests. This field controls whether the test will be ran using a boolean expression language. (#819, @rgrinberg)

  • Make name, names fields optional when a public_name, public_names field is provided. (#1041, fix #1000, @rgrinberg)

  • Interpret X in --libdir X as relative to PREFIX when X is relative (#1072, fix #1070, @jeremiedimino)

  • Add support for multi directory libraries by writing (include_subdirs unqualified) (#1034, @jeremiedimino)

  • Add (staged_pps ...) to support staged ppx rewriters such as ones using the OCaml typer like ppx_import (#1080, fix #193, @jeremiedimino)

  • Use -opaque in the dev profile. This option trades off binary quality for compilation speed when compiling .cmx files. (#1079, fix #1058, @rgrinberg)

  • Fix placeholders in dune subst documentation (#1090, @emillon, thanks @trefis for the bug report)

  • Add locations to errors when a missing binary in PATH comes from a dune file (#1096, fixes #1095, @rgrinberg)

We are happy to announce the opam 2.0.0 final release candidate! 🍾

This release features a few bugfixes over Release Candidate 3. It will be promoted to 2.0.0 proper within a few weeks, when the official repository format switches from 1.2.0 to 2.0.0. After that date, updates to the 1.2.0 repository may become limited, as new features are getting used in packages.

It is safe to update as soon as you see fit, since opam 2.0.0 supports the older formats. See the Upgrade Guide for details about the new features and changes. If you are a package maintainer, you should keep publishing as before for now: the roadmap for the repository upgrade will be detailed shortly.

The opam.ocaml.org pages have also been refreshed a bit, and the new version showing the 2.0.0 branch of the repository is already online. Report any issues here.


Installation instructions:

  1. From binaries: run

    sh <(curl -sL https://raw.githubusercontent.com/ocaml/opam/master/shell/install.sh)
    

    or download manually from the Github "Releases" page to your PATH. In this case, don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed.

  2. From source, using opam:

    opam update; opam install opam-devel
    

    (then copy the opam binary to your PATH as explained, and don't forget to run opam init --reinit -ni to enable sandboxing if you had version 2.0.0~rc manually installed)

  3. From source, manually: see the instructions in the README.

We hope you enjoy this new version, and remain open to bug reports and suggestions.

NOTE: this article is cross-posted on opam.ocaml.org and ocamlpro.com. Please head to the latter for the comments!

Dune 1.0.1

See full changelog
  • Fix parsing of %{lib:name:file} forms (#1022, fixes #1019, @diml)

Utop 2.2.0

See full changelog
  • 4.07.0 compatibility (#238, @hcarty)
  • Fix compatibility with latest tuareg-mode (#241, @Wilfred)
  • Do not expand include directories (#242, @sliquister)

Dune 1.0.0

It is my pleasure to announce the 1.0.0 release of Dune!

Dune is a built system for OCaml and Reason projects. It aims at building things fast and providing a smooth user experience.

Dune 1.0.0 is now available on github and in opam.

This is a big milestone for the project as it is the first release using the new Dune name that the community helped to choose. Dune started about a year and a half ago as the more narrow scoped Jbuilder and as since then proven itself to be the right tool for the job.

A big part of the work for this release was preparing the project for long-term support. Dune is the kind of project that will pretty much continue to evolve forever: it needs to keep up with the OCaml compiler evolving, development workflows changing, new kinds of tools with specific needs, etc... While doing so, it also needs to offer stability so that projects released now will continue to build with future versions of Dune.

Meeting these two constraints is a challenge. However, we had to do this for the renaming: we changed many things in Dune using what we learned from the Jbuilder experience. Still, Dune is able to understand and build Jbuilder projects. The mechanism used to support both Jbuilder and Dune projects is fully generic and will be the basis for future evolution.

You can find the full list of changes and bug fixes since Jbuilder 1.0+beta20 on the github release page. Following is an overview of some the new features:

  • General cleanup of the syntax: less parentheses, better behaved variables

  • Introduction of a dune.configurator library to help projects with C stubs detect and query the environment

  • General improvement of the default behavior: more parallelism by default, development mode by default

  • Better support for changing the defaults: it is now possible to set the default flags or change what dune build does by default

  • Support for setting the build directory

  • Better support for expectation tests on Windows

If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.