OCaml Changelog

RSS

Read the latest releases and updates from the OCaml ecosystem.

Odoc 1.4.0

We are pleased to announce release 1.4.0 of odoc, the new, Dune-friendly documentation generator for OCaml and ReasonML.

odoc-output|690x444

You can install odoc and generate docs for your Dune project with:

opam update
opam install odoc
dune build @doc

Then, view the docs by opening _build/default/_doc/_html/index.html!

While release 1.4.0 has new features, it is mainly focused on stability and maintainability. See its full changelog here. The previous release, 1.3.0 last October, included a lot of new code. Because of concerns about its stability, we chose not to widely announce 1.3.0. So, this message serves as an announcement for both releases :) The full changelog for 1.3.0 can be found here.

In summary, compared with 1.2.0, odoc now has:

For now, we plan to continue improving the stability of odoc and the quality of its output. In the longer term, odoc has two significant goals:

  • To replace ocamldoc as OCaml's primary documentation generator. At the core of odoc is a powerful cross-referencer, capable of fully handling the complexity of OCaml's module system. Shortcomings in ocamldoc's ability to resolve cross-references in complex projects were one of the original motivations for starting odoc.

  • To create centrally-hosted, cross-referenced, searchable online documentation for all the published packages in opam, a “docs.ocaml.org.”

Thanks to the odoc users and contributors, and happy documenting!

See full changelog

Changes

  • All parsing errors are now recoverable warnings (#238).
  • Page titles are now level-0 headings ({0 ...}), and top-level sections within a page are level-1 headings ({1 ...}) (#217, Rizo Isrof).
  • Don't render definitions of externals (#275, Nik Graf).
  • Disable programming ligatures (#248).
  • Rename --root-uri option to --xref-base-uri (#223, Rizo Isrof).
  • Deprecate redundant reference kind annotations (#246).

Additions

  • Preliminary compatibility with the current 4.08 beta releases (#309, Jon Ludlam).
  • Paragraph headings ({4 ...}) and subparagraph headings ({5 ...}) (#217, Rizo Isrof).
  • odoc support-files-targets command (#232).
  • Recommend bsdoc for using odoc with BuckleScript (#269, Leandro Ostera).

Bugs fixed

  • Improve breadcrumbs on .mld pages (#293, Daniel Buenzli).
  • Display tables of contents in nested module and class pages (#261, Rizo Isrof).
  • Uncaught exception when parsing references to operators with - in them, such as @-> (#178).
  • Incorrect parsing of references to operators with . in them, such as *. (#237).
  • Assertion failure when processing optional arguments in an .ml file with a type annotation, when that type annotation uses an alias of 'a option (#101).
  • Assertion failure when two modules with the same name are found by odoc (#148, Jon Ludlam).
  • Verbatim blocks ({v ... v}) can now only be terminated if the v} is immediately preceded by whitespace (#71, reported Daniel Buenzli).
  • Wrong column numbers for errors reported in comments (#227, #253).
  • Restore parsing of ocamldoc-style reference kind annotations (#244).
  • Ordinary type keyword instead of and rendered in HTML for mutually-recursive types (#105, reported @Fourchaux).
  • nonrec keyword not rendered (#249).
  • and not rendered for mutually-recursive modules, classes, and class types (#251).
  • Outer comment attached to a module rendered when the module is included (#87, Jon Ludlam).
  • Polymorphic variant constructor documentation not rendered (#176, reported @steinuil).
  • Variant constructor and record field documentation styled differently (#260, Jon Ludlam).
  • Sloppy keyword markup in HTML output (#319).
  • Rendering of multiple constraint clauses (#321).
  • Incorrect order of functor arguments (#261, Rizo Isrof).
  • odoc html option -o now creates the output directory if it does not exist #171, #264 Rizo Isrof).
  • odoc html-targets output now includes path prefix given through -o option (#173, Rizo Isrof).
  • Allow -I and -o options to refer to non-existent directories (#32, #170, Daniel Buenzli).
  • Make odoc compile-targets match odoc compile (#273, Daniel Buenzli).
  • odoc compile-deps does not work on .cmt files (#162, Daniel Buenzli).
  • odoc html-deps now scans for .odoc files recursively (#307, Daniel Buenzli).
  • odoc html-targets ignores stop comments (#276, Daniel Buenzli).
  • odoc html-targets and odoc html-deps segfault on .mld pages (#277, #282, Daneil Buenzli).
  • --theme-uri option not propagated to some subpages (#318, Thomas Refis).
  • Binary files not opened in binary mode (#281, Ulrik Strid).

Build and development

  • Always print backtraces for unhandled exceptions (3d10feb).
  • CI on macOS (#216, Leandro Ostera).
  • Test runner improvements (#266, Rizo Isrof).
  • Fix esy builds in Travis (#301, Jon Ludlam).
  • Don't require make in the esy build (#308, Leandro Ostera).
  • Get rid of some large GADTs (#292, Jon Ludlam).
  • Remove dependency on bos (#305, Daniel Buenzli).
  • Remove dependency on rresult (#306, Daniel Buenzli).
  • Remove dependency on bisect_ppx, previously present in development checkouts (#316).

Dune 1.8.0

On behalf of the dune team, I'm pleased to announce release 1.8. The highlight of this release is a standalone preprocessor that allows OCaml programs to use the new let bindings introduced in 1.8 and still be compatible with OCaml versions all the way back to 4.02.

This release includes some important contributions from a new contributor: @aalekseyev. So I would like to use this opportunity to welcome him to the team. Thanks Arseniy!

See full changelog
  • Clean up watch mode polling loop: improves signal handling and error handling during polling (#1912, fix #1907, fix #1671, @aalekseyev)

  • Change status messages during polling to be one-line, so that the messages are correctly erased by ^K. (#1912, @aalekseyev)

  • Add support for .cxx extension for C++ stubs (#1831, @rgrinberg)

  • Add DUNE_WORKSPACE variable. This variable is equivalent to setting --workspace in the command line. (#1711, fix #1503, @rgrinberg)

  • Add c_flags and cxx_flags to env profile settings (#1700 and #1800, @gretay-js)

  • Format dune printenv output (#1867, fix #1862, @emillon)

  • Add the (promote-into <dir>) and `(promote-until-clean-into

    )` modes for `(rule ...)` stanzas, so that files can be promoted in another directory than the current one. For instance, this is used in merlin to promote menhir generated files in a directory that depends on the version of the compiler (#1890, @jeremiedimino)
  • Improve error message when dune subst fails (#1898, fix #1897, @rgrinberg)

  • Add more GC counters to catapult traces (fix908, @rgrinberg)

  • Add a preprocessor shim for the let+ syntax of OCaml 4.08 (#1899, implements #1891, @jeremiedimino)

  • Fix generation of .merlin files on Windows. \ characters needed to be escaped (#1869, @mlasson)

  • Fix 0 error code when $ dune format-dune-file fails. (#1915, fix #1914, @rgrinberg)

  • Configurator: deprecated query_expr and introduced query_expr_err which is the same but with a better error in case it fails. (#1886, @ejgallego)

  • Make sure (menhir (mode promote) ...) stanzas are ignored when using --ignore-promoted-rules or -p (#1917, @jeremiedimino)

Mdx 1.3.0

See full changelog
  • Updated readme file with the new features: dune rules, named environment and ocaml versions, Some grammar correction too (@gpetiot, #101, aantron, #102)
  • Better lexer error messages (@avsm, #103)
  • Added cram syntax parsing (@trefis, #106)
  • Renamed mdx to ocaml-mdx to avoid conflicts/for more precision (@clecat, #110, #115)
  • Fix blank spaces causing parsing errors (@gpetiot, #97)
  • Fix empty lines causing a String.sub (@clecat, #107)

Dune 1.7.3

See full changelog
  • Fix interpretation of META files containing archives with / in the filename. For instance, this was causing llvm to be unusable with dune (#1889, fix #1885, @diml)

  • Make errors about menhir stanzas be located (#1881, fix #1876, @diml)

Dune 1.7.2

See full changelog
  • Add ${corrected-suffix}, ${library-name} and a few other variables to the list of variables to upgrade. This fixes the support for various framework producing corrections (#1840, #1853, @diml)

  • Fix $ dune subst failing because the build directory wasn't set. (#1854, fix #1846, @rgrinberg)

  • Configurator: Add warning to Pkg_config.query when a full package expression is used. Add Pkg_config.query_expr for cases when the full power of pkg-config's querying is needed (#1842, fix #1833, @rgrinberg)

  • Fix unavailable, optional implementations eagerly breaking the build (#1857, fix #1856, @rgrinberg)

Dune 1.7.1

See full changelog
  • Fix the watch mode (#1837, #1839, fix #1836, @diml)

  • Configurator: Fix misquoting when running pkg-config (#1835, fix #1833, @Chris00)

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 upgrade command 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-file to profile slow builds using shiny flame graphs in Chrome.

See full changelog
  • Second step of the deprecation of jbuilder: the jbuilder binary now emits a warning on every startup and both jbuilder and dune emit warnings when encountering jbuild files (#1752, @jeremiedimino)

  • Change the layout of build artifacts inside _build. The new layout enables optimizations that depend on the presence of .cmx files 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 lsof on macOS to implement --stats (#1636, fixes #1634, @xclerc)

  • Generate dune-package files for every package. These files are installed and read instead of META files 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 modes field. (#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 compute to call internal memoized functions (#1528, @rudihorn, @jeremiedimino)

  • Add --trace-file option to trace dune internals (#1639, fix #1180, @emillon)

  • Add --no-print-directory (borrowed from GNU make) to suppress Entering directory messages. (#1668, @dra27)

  • Remove --stats and 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_ocaml binary when the ocamlfind package is not available (#1467, @nojb)

  • Make the seq package 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 Configurator handle sizeof (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-paths when calling ocamlc -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 upgrade command for upgrading jbuilder projects to Dune (#1749, @jeremiedimino)

  • When automatically creating a dune-project file, 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 toplevel stanza. This stanza is used to define toplevels with libraries already preloaded. (#1713, @rgrinberg)

  • Generate .merlin files that account for normal preprocessors defined using a subset of the action language. (#1768, @rgrinberg)

  • Emit (orig_src_dir <path>) metadata in dune-package for dune packages built with --store-orig-source-dir command line flag (also controlled by DUNE_STORE_ORIG_SOURCE_DIR env variable). This is later used to generate .merlin with S-directives pointed to original source locations and thus allowing merlin to see those. (#1750, @andreypopp)

  • Improve the behavior of dune promote when 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 which function to replace the which command line utility in a cross platform way. (#1773, fixes #1705, @Chris00)

  • Make configurator append paths to $PKG_CONFIG_PATH on macOS. Previously it was prepending paths and thus $PKG_CONFIG_PATH set 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.c and foo.cpp can 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_PROFILE environment 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-fmt to format-dune-file and remove its --inplace option. (#1821, @emillon).

  • Autoformatting: (using fmt 1.1) will also format dune files (#1821, @emillon).

  • Autoformatting: record dependencies on .ocamlformat-ignore files (#1824, fixes #1793, @emillon)

Utop 2.3.0

The new feature in this release is to automatically install printers marked with [@@ocaml.toplevel_printer] (#269 @diml). Adding this annotation to your libraries will remove the need to have a separate top package to install the printers.

For example, in the uri library, the old printing function for Uri.t was:

val pp_hum : Format.formatter -> t -> unit

Just adding this annotation results in Uri.t values being automatically pretty printed in this version of utop.

val pp_hum : Format.formatter -> t -> unit [@@ocaml.toplevel_printer]
See full changelog
  • Add cool screenshot to README (#259 @rizo) and update links (#257 @bobot)
  • Improve robustness by using more tail-recursive functions (#251 @gpetiot)
  • Remove deprecation warnings in newer compilers (#246 @ncihnegn)
  • Minimum OCaml version supported is now 4.03.0 (#254 @XVilka)
  • Publish API documentation online and add doc: entry to opam file (#270 @avsm)
  • Port build to dune from jbuilder (#268 @avsm)
  • Upgrade local opam metadata to opam 2.0 format (#268 @avsm)

We are pleased to announce the release of opam 2.0.3.

This new version contains some backported fixes:

  • Fix manpage remaining $ (OPAMBESTEFFORT)
  • Fix OPAMROOTISOK handling
  • Regenerate missing environment file

Installation instructions (unchanged):

  1. From binaries: run

    sh <(curl -sL https://opam.ocaml.org/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 or to update you sandbox script.

  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 or to update you sandbox script)

  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!

Mdx 1.2.0

See full changelog
  • Support end-of-line ellipsis (@dra27, #85)
  • Support OCaml 4.02.3 (@gpetiot, #86)
  • Support version=.., version<=.. and version>=.. keywords to run a code-block depending on the currently installed OCaml version (@gpetiot, #87, #90)
  • Upgrade Travis tests to use opam 2.0.2 (@avsm, #89)
  • Do not depend on ppx_tools for toplevel (@avsm, #89)
  • Fix embedding in a larger Dune project with a cppo override (@avsm, #89)
  • mdx output: escape HTML entities in code blocks (#91, @samoht)
  • Add a mechanism to promote files to blocks and blocks to file (@gpetiot, #37)
  • Support multiple toplevel environments (@gpetiot, #38)
  • Use ocaml-migrate-parsetree to compile in 4.06.1 & 4.07.0 (@gpetiot, #41)
  • Add a mdx rule command to generate dune rules (@gpetiot, #44)
  • Add a mdx output command to generate an HTML document (@samoht, #45)
  • Support empty code blocks (@samoht, #46)
  • Fix detection of OCaml code/toplevel (@samoht, #47)
  • Better handling of multi-line shell scripts (@samoht, #48)
  • Fix regression in toplevel blocks when creating newtype (@samoht, #49)
  • Fix evaluation of non-determinitic test (@samoht, #50)
  • Improve mdx rules to take into account more precise dependencies (@samoht, #51)
  • Fix promotion of blocks to complete ML files (@samoht, #52)
  • mdx does not use the cppo library, just the binary (@samoht, #53)
  • fix ellipsis in code blocks (@samoht, #57)
  • Fix relative paths for promoted blocks to files (@samoht, #58)
  • Fix location of errors for multi-line commands (@samoht, #60)
  • improve the parser for shell blocks (@samoht, #61)
  • Allow to load preludes in specific environments (@samoht, #63)
  • Fix evaluation of code after directives in prelude (@samoht, #64)
  • Improve promotion to ml files (@samoht, #66)
  • mdx rule: generates (source_tree) dependencies for directory metadata (@samoht, #67)
  • Fix handling of 'module type' in multiple toplevel environment (@samoht, #68)
  • Add an eval=false label to skip the evaluation of a code block (@samoht, #69)
  • Fix parsing of shell blocks with multiple exit codes (@samoht, #71)
  • Support source-tree as extra block metadata (@samoht, #72)
  • Better formatting of non-compiling promoted contents (@samoht, #73)
  • Be sure to remove the .corrected files if the promotion to ML file works (mdx74)
  • Add missing dependency in test/dune (@samoht, #75)
  • Support dir=.. labels in ml code blocks (@samoht, #76)
  • Allow to promote to mli files too (@samoht, #77)
  • Support multi-line strings (@samoht, #78)
  • fail (and exit 1) if prelude and ml blocks cannot be evaluated properly (@samoht, #80, @samoht, #83)
  • Allow to pass --root to mdx rule (@samoht, #81)
  • mdx rule: do not add (package mdx) in the dependencies (@samoht, #82)

Dune 1.6.3

The dune team is pleased to announce the bug fix release of Dune 1.6.3. Normally, we don't bother announcing all bug fix releases, but this one contains quite a few fixes. I'd like to take this opportunity to encourage everyone to upgrade. Cheers.

See full changelog
  • Fix merlin handling of private module visibility (#1653 @bobot)

  • skip directories when looking up programs in the PATH (#1628, fixes #1616, @jeremiedimino)

  • Fix preprocessing for libraries with (include_subdirs ..) (#1624, fix #1626, @nojb, @rgrinberg)

  • Do not generate targets for archive that don't match the modes field. (#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)

  • Do not generate targets for archive that don't match the modes field. (#1632, fix #1617, @rgrinberg)

  • Get the correct environment node for multi project workspaces (#1648, @rgrinberg)

  • Fix an issue causing menhir generated parsers to fail to build in some cases. The fix is to systematically use -short-paths when calling ocamlc -i (#1743, fix #1504, @jeremiedimino)

We are pleased to announce the release of opam 2.0.2.

As sandbox scripts have been updated, don't forget to run opam init --reinit -ni to update yours.

This new version contains mainly backported fixes:

  • Doc:
    • update man page
    • add message for deprecated options
    • reinsert removed ones to print a deprecated message instead of fail (e.g. --alias-of)
    • deprecate no-aspcud
  • Pin:
    • on pinning, rebuild updated pin-depends packages reliably
    • include descr & url files on pinning 1.2 opam files
  • Sandbox:
    • handle symlinks in bubblewrap for system directories such as /bin or /lib (#3661). Fixes sandboxing on some distributions such as CentOS 7 and Arch Linux.
    • allow use of unix domain sockets on macOS (#3659)
    • change one-line conditional to if statement which was incompatible with set -e
    • make /var readonly instead of empty and rw
  • Path: resolve default opam root path
  • System: suffix .out for read_command_output stdout files
  • Locked: check consistency with opam file when reading lock file to suggest regeneration message
  • Show: remove pin depends messages
  • Cudf: Fix closure computation in the presence of cycles to have a complete graph if a cycle is present in the graph (typically ocaml-base-compilerocaml)
  • List: Fix some cases of listing coinstallable packages
  • Format upgrade: extract archived source files of version-pinned packages
  • Core: add is_archive in OpamSystem and OpamFilename
  • Init: don't fail if empty compiler given
  • Lint: fix light_uninstall flag for error 52
  • Build: partial port to dune
  • Update cold compiler to 4.07.1

Installation instructions (unchanged):

  1. From binaries: run

    sh <(curl -sL https://opam.ocaml.org/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 or to update your sandbox script.

  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 or to update you sandbox script)

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

We hope you enjoy this new minor 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.6.2

See full changelog
  • Fix regression introduced by #1554 reported in: https://github.com/ocaml/dune/issues/734#issuecomment-444177134 (#1612, @rgrinberg)

  • Fix dune external-lib-deps when preprocessors are not installed (#1607, @diml)

Dune 1.6.1

See full changelog
  • Fix hash collision for on-demand ppx rewriters once and for all (#1602, fixes #1524, @diml)

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

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://opam.ocaml.org/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)

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://opam.ocaml.org/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!

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://opam.ocaml.org/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

See full changelog
  • Store config files in ~/.config/dune/ instead of ~/.dune to match what dune is doing (#27, @samoht)
  • Support opam 1.2.2 when linting (#29, @samoht)
  • Use -p <pkg> instead of -n <pkg> to follow dune convention (#30, #42, @samoht)
  • Default to nano if the EDITOR environment variable is not set. (#32, @avsm)
  • Fix location of documentation when odoc creates an _html subdirectory (#34, @samoht)
  • Remove the browse command (#36, @samoht)
  • Re-add the publish delegatation mechanism to allow non-GitHub users to publish packages (see dune-release help delegate) (#37, @samoht)
  • Fix dropping of v at the beginning of version numbers in dune-release opam (#40, @let-def)
  • Add basic token validation (#40, @let-def)

We are pleased to announce the release of a third release candidate for opam 2.0.0. This one is expected to be the last before 2.0.0 comes out.

Changes since the 2.0.0~rc2 are, as expected, mostly fixes. We deemed it useful, however, to bring in the following:

  • a new command opam switch link that allows to select a switch to be used in a given directory (particularly convenient if you use the shell hook for automatic opam environment update)
  • a new option opam install --assume-built, that allows to install a package using its normal opam procedure, but for a source repository that has been built by hand. This fills a gap that remained in the local development workflows.

The preview of the opam 2 webpages can be browsed at https://opam.ocaml.org/2.0-preview/ (please report issues here).

Installation instructions (unchanged):

  1. From binaries: run

    sh <(curl -sL https://opam.ocaml.org/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.

Thanks a lot for testing out this new RC and reporting any issues you may find.

Thanks to the people who contributed to this release: ELLIOTTCABLE, Louis Roché, Rudi Grinberg, Yotam Barnoy, Leo White, Daniel Below, Andreas Hauptmann, Christophe Troestler, Bobby Priambodo, Milo Davis.

See full changelog
  • backend

    • new "polarity search" feature: provides a Hoogle-like type-based search for libraries that are in merlin's scope. See https://github.com/ocaml/merlin/blob/master/doc/features.md#polarity-search
    • new "open refactoring" feature: helps cleaning the code in the scope of an open statement. See https://github.com/ocaml/merlin/blob/master/doc/features.md#open-refactoring
    • spell-checking: a simple spell-checker has been added to suggest corrections when nothing can be directly completed.
    • type-driven record completion: merlin will now make use of type information from the context for narrowing and refining completion candidates.
    • support for #require directive in a source file, and will treat it as a package use
    • Add support for OCaml 4.07
    • locate: various minor bugfixes, as well as the following general improvements:
      • improved context detection
      • better tracking of namespaces
      • fixed support for local bindings
      • fixed support of disambiguated record fields and variant constructors
      • improved support for functors: merlin will now jump through functor application to the functor definitions and in some cases go back to the argument that was given (if it is simply reexported).
    • backport fixes of OCaml 4.06.1 to the 4.06 backend
    • various minor bugfixes
  • editor modes

    • emacs
      • proper handling of multibyte strings (by @Chris00)
      • bind "q" to close type buffer (by @MiloDavis)
      • make goto-point encoding independent
      • add reason-mode to the guessed favorite mode list (by @Khady)
      • sped up some tight loops (by @rgrinberg)
      • add support for x-ref backend (by @rgrinberg)
    • vim
      • fix support for Neomake (by @bobbypriambodo and @statianzo)
      • fix encoding issues in filepaths (by @Thelyria)
      • fix handling of enclosing-type cache (by @ELLIOTTCABLE)
      • add to prevent flashing when highlighting an enclosing (by @bluddy)
See full changelog
  • Remove opam lint warnings for 1.2 files (#2, @samoht)
  • Add a --keep-v option to not drop v at the beginning of version numbers (#6, @samoht)
  • Pass -p <package> to jbuilder (#8, @diml)
  • Fix a bug in Distrib.write_subst which could cause an infinite loop (#10, @diml)
  • Add a --dry-run option to avoid side-effects for all commands (@samoht)
  • Rewrite issues numbers in changelog to point to the right repository (#13, @samoht)
  • Stop force pushing tags to origin. Instead, just force push the release tag directly to the dev-repo repository (@samoht)
  • Fix publishing distribution when the the tag to publish is not the repository HEAD (#4, @samoht)
  • Do not depend on opam-publish anymore. Use configuration files stored in ~/.dune to parametrise the publishing workflow. (@samoht)

We are pleased to announce the release of a second release candidate for opam 2.0.0.

This new version brings us very close to a final 2.0.0 release, and in addition to many fixes, features big performance enhancements over the RC1.

Among the new features, we have squeezed in full sandboxing of package commands for both Linux and macOS, to protect our users from any misbehaving scripts.

NOTE: if upgrading manually from 2.0.0~rc, you need to run opam init --reinit -ni to enable sandboxing.

The new release candidate also offers the possibility to setup a hook in your shell, so that you won't need to run eval $(opam env) anymore. This is specially useful in combination with local switches, because with it enabled, you are guaranteed that running make from a project directory containing a local switch will use it.

The documentation has also been updated, and a preview of the opam 2 webpages can be browsed at https://opam.ocaml.org/2.0-preview/ (please report issues here). This provides the list of packages available for opam 2 (the 2.0 branch of opam-repository), including the compiler packages.

Installation instructions:

  1. From binaries: run

    sh <(curl -sL https://opam.ocaml.org/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.

Thanks a lot for testing out this new RC and reporting any issues you may find.

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

See full changelog

Features

  • Add: option to align all infix ops (#150, @hhugo)
  • Add: option to attempt to indent the same as ocp-indent (#162)
  • Add: option for no discretionary parens for tuples (#157, @hhugo)
  • Add: alternative format for if-then-else construct (#155, @hhugo)
  • Add: option to customize position of doc comments (#153, @hhugo)

Bug fixes

  • Fix: dropped item attributes on module expressions
  • Fix: toplevel let%ext (#167, @hhugo)
  • Fix: parens around type alias & empty object type (#166, @hhugo)
  • Fix: missing comments for [let open] (#165, @hhugo)
  • Fix: missing comments in ppat_record (#164, @hhugo)
  • Fix: check_typ wrt constraint on module type (#163, @hhugo)
  • Fix: let binding with constraint (#160, @hhugo)
  • Fix: handle generative functor type (#152, @hhugo)

Formatting improvements

  • Improve: remove redundant parens around application operators
  • Improve: parenthesize and break infix constructors the same as infix ops
  • Improve: consider prefix ops and not to be trivial if their arg is
  • Improve: align arrow type args and do not wrap them (#161)
  • Improve: formatting for multiple attributes (#154, @hhugo)
  • Improve: keep the original string escaping (#159, @hhugo)
  • Improve: discretionary parens in patterns (#151, @hhugo)
  • Improve: breaking of infix op arguments
  • Improve: consider some extensions to be "simple"
  • Improve: punning (#158, @hhugo)
  • Improve: force break of let module/open/exception/pats (#149, @hhugo)

Build, packaging, and testing

  • Add support for bisect (#169, @hhugo)
  • Exclude failing tests from make -C test
See full changelog

Features

  • Add: support for new%js (#136, @hhugo)
  • Add: support for Ptyp_object (#104, @smondet)
  • Use original filename when given in error messages. (#96, @mbarbin)

Bug fixes

  • Fix: allow extensions in types (#143, @hhugo)
  • Fix: parens on symbol type constructor
  • Fix: parenthesization of '!=' partial application as a prefix op (#126, @hhugo)
  • Fix: parens around Ppat_constraint under Pexp_match or Pexp_try (#124, @hhugo)
  • Fix: parenthesization of tuple args of variant type declarations (#122, @hhugo)
  • Fix: missing parens around list inside Constr pattern (#123, @hhugo)
  • Fix: incorrect breaking of long strings (#130, @hhugo)
  • Fix: missing parens inside array literal (#129, @hhugo)
  • Fix: attributes on arguments of function (#121, @hhugo)
  • Fix: floating docstrings within a type declaration group
  • Fix: missing parens in sugared Array.set
  • Fix: missing attributes on patterns
  • Fix: is_prefix_id for != (#112, @hhugo)
  • Fix: missing parens around module value types in signatures (#108, @hcarty)
  • Fix: floating docstrings within a value binding group
  • Fix: missing attributes on extension points (#102, @hcarty)
  • Fix: extensible variants with aliases (#100, @hcarty)
  • Fix: several issues with extension sequence expressions
  • Fix: generative functors
  • Fix: preserve files with an empty ast (instead of failing) (#92, @mbarbin)
  • Fix: missing extension on Pexp_sequence
  • Fix: missing docstrings and attributes on types
  • Fix: missing parens around sugared Array and String operations
  • Fix: missing parens around Pexp_newtype
  • Fix: missing parens around Ppat_constraint, Ppat_or, and Ppat_unpack
  • Fix: dropped space when string wrapped between spaces
  • Fix: repeated ppx extension on mutual/recursive let-bindings (#83, @mbarbin)
  • Fix: dropped comments on Pmty_typeof
  • Fix: missing parens around Ppat_unpack under Ppat_constraint

Formatting improvements

  • Improve: two open lines following multiline definition only with --sparse (#144)
  • Improve: indent rhs of ref update (#139, @hhugo)
  • Improve: no parens around precedence 0 infix ops (refines #115) (#141, @hhugo)
  • Improve: support (type a b c) (#142, hhugo)
  • Improve: no parens for { !e with a } (#138, @hhugo)
  • Improve: no parens for constr inside list pattern. (#140, @hhugo)
  • Improve: generative functor applications (#137, @hhugo)
  • Improve: omit parens around lists in local opens (#134, @hhugo)
  • Prepare for ocaml#1705 (#131, @hhugo)
  • Improve: comment wrapping for dangling close
  • Improve: if-then-else conditions that break
  • Improve: suppress spurious terminal line break in wrapped strings
  • Improve: parens for nested constructors in pattern (#125, @hhugo)
  • Improve: remove duplicate parens around Ptyp_package
  • Improve: indentation after comment within record type declaration
  • Improve: add discretionary parens on nested binops with different precedence
  • Improve: empty module as functor argument (#113, @hhugo)
  • Improve: indentation of multiple attributes
  • Improve: attributes on short structure items
  • Improve: attributes on type declarations
  • Improve: tuple attribute args
  • Improve: parenthesization of Ppat_or
  • Improve: determination of file kind based on provided name
  • Improve: extension on the let at toplevel: e.g. let%expect_test _ (#94, @mbarbin)
  • Improve: constraints in punned record fields (#93, @mbarbin)
  • Improve: nullary attributes
  • Improve: Ppat_tuple under Ppat_array with unnecessary but clearer parens
  • Improve: breaking of arguments following wrapped strings

Build, packaging, and testing

  • Simplify using (universe) support in jbuilder 1.0+beta20
  • Add some regtests (#135, @hhugo)
  • Upgrade to Base v0.11.0 (#103, @jeremiedimino)
  • Add Travis CI script
  • Fix: build [make reason] (#97, @mbarbin)
  • Simplify Makefile due to jbuilder 1.0+beta18

Initial release.

Import some code from topkg.

  • Use of Astring, Logs, Fpath andBos instead of custom re-implementations;
  • Remove the IPC layer which is used between topkg and topkg-care;
  • Bundle everything as a single binary;
  • Assume that the package is built using dune;
  • Do not read/need a pkg/pkg.ml file.
See full changelog
See full changelog
  • Now based on opam 2 libs and intended for publications in the 2.0 format (inclusive opam files, etc.)
  • Bumped version number to avoid confusion with opam versions
  • Removed the two-step operation ("prepare" and "publish"). A single invocation does all
  • Removed looking up current opam pinnings and repositories for metadata, which was too complex and counter-intuitive. Now opam files are looked up only in the specified directories or archives
  • Multiple publications without added complexity
  • Simplified command-line: URLs, directories, opam files, package names can be specified directly on the command-line, and repeated for multiple publications
  • Allow providing the auth token directly
If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.