toolchain with a coherent set of tools for build, documentation, testing and IDE integration. The project is a collaborative effort across the OCaml community, tied together by the OCaml Labs group in Cambridge, and OCamlPro in Paris, and the whole OCaml community.
Allsopp, Leo Andres, Olivier Andrieu, Florian Angeletti, Edgar Aroutiounian, Nicolas Assouad, Tuncer Ayaz, Anton Bachin, Nicolas Ojeda Bar, Mathieu Barbin, Yotam Barnoy, Jochen Bartl, Jacob Bass, Romain Beauxis, Daniel Below, Matthias Andreas Benkard, Josh Berdine, Vincent Bernardoff, Vincent Berthoux, Francois Bobot, Richard Bonichon, Nick Borden, Mehdi Bouaziz, Raja Boujbel, Frédéric Bour, Daniel Buenzli, Elliott Cable, Romain Calascibetta, Benjamin Canou, Hezekiah Carty, Pierre Chambart, Amir Chaudhry, Kaustuv Chaudhuri, Xavier Clerc, Raphael Cornet, Roberto di Cosmo, Simon Cruanes, Tim Cuthbertson, Milo Davis, Richard Davison, Enguerrand Decorne, Ian Denhardt, Kate Deplaix, Dani Dickstein, Jeremie Dimino, Stephen Dolan, Damien Doliguez, Matthieu Dubuget, Tim Dysinger, Spiros Eliopoulos, John Else, Mohamed Elsharnouby, Shon Feder, Fabrice Le Fessant, Jean- Christophe Filliatre, Jared Forsyth, Simon Fowler, Alain Frisch, Anders Peter Fugmann, Sylvain Le Gall, Jacques Garrigue, Thomas Gazagnaire, Louis Gesbert, Gaetan Gilbert, Geoff Gole, Gemma Gordon, Ivan Gotovchits, Rudi Grinberg, Michael Grunewald, Oliver Gu, Adrien Guatto, Xavier Guerin, Armaël Gueneau, Mads Hartmann, Andreas Hauptmann, Philipp Haselwarter Gregoire Henry, Hugo Heuzard Daniel Hillerström, Sebastien Hinderer, Juergen Hoetzel, Wilfred Hughes, Ronan Le Hy, Takayuki Imada, Keigo Imai, Riso Isrof, Vincent Jacques, Martin Jambon, Kevin Ji, David Kaloper-Mersinjak, Brandon Kase, Anton Kochkov, Tomasz Kolodziejski, Chis Konstad, Marek Kubica, Marc Lasson, Theo Laurent, Qi Li, Nandor Licker, Jon Ludlam, Thomas Leonard, Rodolphe Lepigre, Maxime Lesourd, Gabe Levi, Martin Lucina, Ximin Luo, Anil Madhavapeddy, Louis Mandel, Luc Marange, Claude Marche, Thierry Martinez, Laurent Mazare, Tim McGilchrist Hannes Mehnert, Perry E. Metzger, Wojciech Meyer, Etienne Millon, Ben Millwood, Samuel Mimram, Yaron Minsky, Cedric Le Moigne, Sebastien Mondet, Florent Monnier, Richard Mortier, Darin Morrison, Markus Mottl, Max Mouratov, Tony Narlock, Andre Nathan, Olivier Nicole, Jason Nielsen, Gregory Nisbet, Andrew Noyes, Leandro Ostera, Saswat Padhi, Egor Panﬁlov, Vasilis Papavasileiou, Guillaume Petiot, Bryan Phelps, Zach Ploskey, Lucas Pluvinage, Francois Pottier, Nicolas Pouillard, Mindy Preston, Bobby Priambodo, Dominic Price, Raphael Proust, Steve Purcell, Gabriel Radanne, Tahina Ramananandro, Daniel de Rauglaudre, Andrew Ray, Nathan Rebours, Thomas Reﬁs, Jan Rehders, Chris Reichert, Andrea Richiardi, Marshall Roch, Louis Roche, Mario Rodas, Leonid Rozenberg, Julien Sagot, Gabriel Scherer, Bernhard Schommer, David Scott, Pavel Senchanka, Marcello Seri, David Sheets, Mark Shinwell, Zach Shipko, KC Sivaramakrishnan, Magnus Skjegstad, Ryan Slade, Romain Slootmaekers, Roma Sokolov, Anurag Soni, Benjamin San Souci, Patrick Stapfer, Jason Staten, Quentin Stievenart, Alessandro Strada, Sander Spies, Yury Sulsky, Thibault Suzanne, Willy Tan, Dario Teixeira, Rijnard van Tonder Edwin Torok, Christophe Troestler, Martin Trojer, Frederic Tuong, Pierre Vandenhove, Raman Varabets, Ramana Venkata, Ricky Vetter, Jordan Walke, Liang Wang, Philippe Wang, Marc Weber, Pierre Weis, Sebastian Wiesner, Leo White, John Whitington, Maverick Woo, Justin Wood, Hao Wu, Hongchang Wu, Jeremy Yallop, Syohei Yoshida, Jianxin Zhao, aalekseyev, art-w, asmanur, Axiles, chrismamo1, copy, dkim, Fourchaux, gerdstolpmann, Kakadu, madroach, mfp, mwweissmann, nberth, ncihnegn, nv-vn, Nyavlys, orbitz, polazarus, prometheansacriﬁce, pszilagyi, pveber, sliquister, tategakibunko, tddsg, torkve, whitequark, ygrek, zogg
to gather feedback and improve workﬂows jbuilder was initially released to solve build, later renamed to dune in 2017… Feb 2017: opam 2~beta1 Mar 2017: opam2~beta2 May 2017: opam2~beta3 June 2017: opam 1.2.0 deprecated Aug 2017: opam 2~beta4 Nov 2017: opam 2~beta5 Mar 2017: jbuilder beta1 Apr 2017: jbuilder beta2-9 July 2017: opam builds using jbuilder Aug 2017: beta10-13, more developers Sep 2017: in top 10 opam packages Nov 2017: jbuilder beta16 dune
2018: critical build issue in camlp5 May 2018: opam 2~rc2 (sandboxing) July 2018: opam 2~rc3 Aug 2018: opam 2~rc4 Sep 2018: opam 2.0.0 stable released! Sep 2018: opam-repo using 2.0 format. in 2018… opam dune opam 2.0.0 released with v1.2-v2.0 migration and secure sandboxing
2018: jbuilder beta18 Mar 2018: jbuilder beta19 Apr 2018: jbuilder beta20 May 2018: promoted to ocaml/ org July 2018: dune 1.0 stable released Aug 2018: dune 1.1 stable Sep 2018: dune 1.2 stable opam 2.0.0 released with v1.2-v2.0 migration and secure sandboxing dune 1.x stable released and widely adopted by community in 2018… opam dune Jan 2018: opam 2~rc1 May 2018: critical build issue in camlp5 May 2018: opam 2~rc2 (sandboxing) July 2018: opam 2~rc3 Aug 2018: opam 2~rc4 Sep 2018: opam 2.0.0 stable released! Sep 2018: opam-repo using 2.0 format.
years of development! • new developer workﬂows: local switches, lockﬁles, richer package description language for more sophisticated constraints. • more portable with built-in solver and switch to OCaml compiler being a package, and foundations for full Windows support (coming in 2.1!). • more secure builds from source via secure OS sandboxing on macOS and Linux, so rogue code cannot compromise host machine. opam.ocaml.org
high velocity of releases, and growing maintainer list. • overall has been faster, more batteries included and more portable than previous solutions. • compositional builds unlock ﬂexible switching between opam and dune workﬂows • lint and promotion mechanisms assist with code hygiene, and assist with interface migrations. • carefully limited computation model ensures consistency of build rules across large codebases. dune.readthedocs.org
metadata so that newly released tools do not break existing builds. (lang dune 1.0) (name mirage-types) (library (name mirage_ppx) (modules mirage_ppx) (preprocess (staged_pps -arg1))) dune-project ﬁle deﬁnes semantic version of dune build but we use a feature introduced in a later version of dune
metadata so that newly released tools do not break existing builds. (lang dune 1.0) (name mirage-types) File "dune", line 4, characters 13-31: 4 | (preprocess (staged_pps -arg1))) ^^^^^^^^^^^^^^^^^^ Error: 'staged_pps' is only available since version 1.1 of the dune language (library (name mirage_ppx) (modules mirage_ppx) (preprocess (staged_pps -arg1))) helpful error messages with hint on how to ﬁx the problem
MIT DCO merlin stable (3.1.0) MIT utop stable (2.2.0) BSD3 ocp-indent stable (1.6.1) LGPLv2 mdx stable (1.0.0) ISC bun devel (0.3.2) MIT odoc devel (1.2.0) ISC dune-release devel (0.3.0) ISC ocamlformat devel (0.7) MIT CLA Eventually, these tools will merge into one CLI driver }
some OCaml compiler versions, depending on demand. • Can oﬀer precompiled host tools from a monorepo that is bootstrapped quickly. • Monorepo provides a place to test platform tools with each other simultaneously. • Bleeding edge versions of the compiler can still have useful tooling (i.e. avoid ppx breakage).
to opam opam 2.0.0 dune 1.2.1 merlin 3.1.0 …etc Converted to Git refs opam.git#v2.0.0 dune.git#v1.2.1 merlin.git#3.1.0 …etc dune-release duniverse git-lock New tool to bridge opam and dune dubbed “duniverse” https://github.com/avsm/duniverse Runs heuristics to convert opam packages to a single dune build.
/ ocaml_modules / odoc / ocaml_modules / mdx $ find ocaml_modules -name \*.ml -o -name \*.mli | \ xargs wc -l 1148464 total All code tracked in one repository Updated from opam metadata Everything must be ported to Dune For transitions, we have https://github.com/dune-universe
popular editors. VS Code and Atom have plugins that work out-of-the-box. • More backend features: • “polarity search” enabled type-based search • open refactoring cleans up code in the context of an open statement • type-driven record completion simpliﬁes editing • Improved portability via Windows and FreeBSD support. Status: stable 3.1.0
and a nice terminal interface. • Has been quiet for the past few years, but now re- energised by moving to a new community maintainership: https://github.com/ocaml-community/utop • After being integrated into Platform, portability also improving and more consistent CI. Status: stable 2.2.0
• Aims for code legibility, exposing the high-level structure while remaining compact, and spotting syntactic gotchas like dangling if/else. • Been in rapid development all year, and can now format huge codebases (e.g. all of Jane Street’s internal code) • Works alongside ocp-indent, but the tools will merge. • Good example of a “new” Platform tool: liberal license, CLA/ DCO, community contributions, clear maintainership Status: development
• Still under development, and increasingly contributor-friendly. • Major advances this year: • support for Dune so the two ways to invoke it are now odig and dune build @doc • a uniﬁed Git repository that is easier to hack on. • Still todo before a release are a cleanup of the type-driven analysis (the “doc-ock” component) and full language coverage. Status: development
removing packages from the Platform list. An “RFC” process. • Generate uniﬁed changelogs for easier upstream consumption. • Windows support in all tools (David Allsopp’s talk later). • The hard vendoring problem: where do the ﬁxes go? Immediate next steps: I will post on discuss.ocaml.org with 4.07.1~beta1 in ~October Meanwhile, view the preview mono-repository at: https://github.com/avsm/platform If any tools are missing you think should be included, talk to me!
dune LTS (1.3.0) Jeremie Dimino, Rudi Grinberg merlin stable (3.1.0) Fred Bour, Thomas Reﬁs utop stable (2.2.0) Jeremie Dimino ocp-indent stable (1.6.1) Louis Gesbert mdx stable (1.0.0) Thomas Gazagnaire bun devel (0.3.2) Mindy Preston odoc devel (1.2.0) Thomas Reﬁs, Leo White, Anton Bachin dune-release devel (1.0.1) Thomas Gazagnaire ocamlformat devel (0.7) Josh Berdine, Hugo Heuzard