OCaml Changelog


Read the latest releases and updates from the OCaml ecosystem.

Utop 2.14.0

This release of UTop 2.14.0 brings support for the upcoming version of the compiler, OCaml 5.2.

See full changelog
  • Add support for OCaml 5.2 (#470, fixes #466, @leostera, @ManasJayanth, @huwaireb)

Utop 2.13.1

The release of UTop 2.13.0 introduced a regression on Windows. We're releasing UTop 2.13.1 with a patch, and made UTop 2.13.0 unavailable on Windows.

See full changelog
  • Fix unavailable expunge on Windows (#447, @jonahbeckford)

Utop 2.13.0

We're releasing version 2.13.0 of UTop! This version comes with a couple of bug fixes.

It also bumps the minimal required version of OCaml to 4.11.0 and removes deprecated values from the API.

See full changelog
  • Fix behavior of utop -stdin (#434, fixes #433, @tuohy)

  • Handle bounds with Zed.next_error (#442, @tmattio)

  • Load files from XDG directories (the legacy paths still work). (#431, @Skyb0rg007)

  • Remove deprecated values prompt_continue, prompt_comment, smart_accept, new_prompt_hooks, at_new_prompt (#427, @emillon)

  • Require OCaml 4.11.0 or newer. (#444, @emillon)

Utop 2.12.1

Following the release of UTop 2.12.0 a few days ago, we released UTop 2.12.1, a patch release that fixes a regression with unit qualification.

This release also includes an implementation of completion-at-point for Emacs.

See full changelog

Utop 2.12.0

UTop 2.12.0 is out with support for the upcoming release of OCaml 5.1!

This release also fixes an issue that prevented users to redefine the () constructor. You can now safely run type t = () of unit and continue using your top-level session.

See full changelog
  • Add support for OCaml 5.1 (#421, @emillon)

  • Mark prompt_continue, prompt_comment, smart_accept, new_prompt_hooks, at_new_prompt as deprecated (they have been documented as such since 2012 and most of them are ignored) (#415, @emillon)

  • Qualify () constructor in generated expressions. (#418, fixes #417, @emillon)

Utop 2.11.0

See full changelog
  • Bump the compatibility to 4.08+ (#393 @emillon)
  • Load @toplevel_printer annotated printers for functors (#378 @metavinek)
  • Do not display a backtrace when exiting normally (#399 #398 @emillon)

Utop 2.10.0

See full changelog
  • Use dependencies compatible with OCaml 5:
    • Use zed 3.2.0, based on uucp, uutf, and uuseg instead of camomile
    • Use logs.lwt instead of lwt_logs

Utop 2.9.0

See full changelog
  • Add support for OCaml 4.14 (#360 @kit-ty-kate)
  • Document options in utop(1) manpage (#364 #365 @lindig)

Utop 2.8.0

See full changelog
  • If the current working directory is the home directory, then do not load .ocamlinit (@hyphenrf @copy #338)
  • With OCaml 4.12.0 and later, the toplevel uses the toplevel state to exit with the right status code (#348 @octachron)
  • Fix color highlight for errors (#350 @chripell)
  • Add support for OCaml 4.13 (#353 @kit-ty-kate)

Emacs mode fixes:

  • Company text-completion fixes (@leungbk #340)
  • utop-query-arguments always returns (utop-arguments) whether it sets the utop-command or not (@dansanduleac #347)
  • Fix completion returning bogus candidates (#352 @chripell @rgrinberg)

Utop 2.6.0

See full changelog
  • compatible with OCaml 4.11 (@kit-ty-kate, #322)
  • switch to the new parser exposed since 4.11
  • Vi edit mode: register support

Utop 2.5.0

See full changelog


  • add #edit_mode_vi and #edit_mode_default mode to set the editing mode(@kandu)
  • Backport the #use_output directive (@diml, #313)


  • Load init file from ~/.config/utop/init.ml as per XDG conventions (@copy, #144)
  • Add OCaml 4.09 and 4.10 to the CI matrix (@kit-ty-kate, #310)
  • Add documentation for dune utop usage in emacs (@samarthkishor, #307)

Utop 2.4.2

See full changelog
  • Add support for OCaml 4.09.0 (@octachron @avsm, #299)

Utop 2.4.1

See full changelog


  • Remove camlp4 remnants (@XVilka, #290) (@kandu, #293)
  • Allow to statically link utop (@diml, #285) (@hongchangwu, #286)


  • Remove broken elisp (m-plamann, #292)
  • Add OCaml 4.08 build in Travis CI (XVilka, #291)

Utop 2.4.0

See full changelog


  • Better support for wide and combined glyph (@kandu)
  • Added tips for simpe prompt without fancy features (Marshall Abrams, #279)
  • Correct quoting for Windows command shell (Dmitry Bely, #272)


  • 4.08 compatibility (#284)
  • module UTop: add get_load_path and set_load_path to manage the include directories (#284)


  • module UTop: val load_path : string list ref is removed (#284)

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)

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)

Utop 2.1.0

See full changelog
  • Add support for company-mode based completion in utop.el (#233)

Utop 2.0.1

See full changelog
  • Fix: restore the installation of utop.el (#210, Louis Gesbert)

Utop 2.0.0

See full changelog
  • Add -implicit-bindings option to automatically bind expressions to names _0, _1 and so on. For example, 3 + 4;; becomes let _0 = 3 + 4;; (#161, #193, Fabian Hemmer)
  • Add tab completion for #mod_use (#181, Leonid Rozenberg)
  • Mention #help in #utop_help (#190, Fabian Hemmer)
  • Add #utop_stash and #utop_save to save the session to a file (#169, #199, Christopher Mcalpine and Fabian Hemmer)
  • Add support for reason in the emacs mode (#206, Andrea Richiardi)
  • Fix a bug where utop wouldn't apply ppx rewriters when running in emacs (Bug report: #192, fix: #202, Deokhwan Kim)
  • Refactor the use of hooks to support the various OCaml emacs mode (#201, Andrea Richiardi)
  • Drop support for camlp4/camlp5
  • Drop support for OCaml <= 4.01
  • Switch the build system to jbuilder
  • Resurect UTop_main.interact

Utop 1.19

See full changelog
  • allow to configure the external editor with UTop.set_external_editor
  • add UTop.set_margin_function to allow users to set the margin for the toplevel outcome. It is 80 by default
  • better for quoted strings ({|...|})
  • add a #pwd directive
  • experimental support for running utop in the middle of a program with UTop_main.interact
  • fix Async integration (automatic waiting of _ Deferred.t value). The new version is more robust against future change in Async
  • fix use of the non-existing replace-in-string function in the emacs mode (Syohei Yoshida)
  • fallback to Latin-1 for invalid UTF-8 sequences in the compiler output
If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.