2.17.0 (2026-03-26)
------------------

* Add support for OCaml 5.5 (#510 @anmonteiro)
* Add support for neocaml or other major modes in utop.el (#511, @bbatsov)

2.16.0 (2025-07-22)
------------------

* Add support for OCaml 5.4 (#500, @Octachron, @anmonteiro)
* restore backtrace (#503, fixes #501, @ysalmon)
* support camlp$n preprocessor (#486, fixes #485, @aqjune)
* utop configuration and state files (utoprc, utop-history) are now always in the relevant
  utop subdirectory (#484, fixes #478, #481 and #499, @tuohy).
* fix emacs completion for qualified paths (Module.M.some_name) (#497, fix #455, @juergenhoetzel, @bbatsov)
* implicit bindings for emacs mode (#465, fix #412, @bencef)

2.15.0 (2024-11-25)
------------------

* Add support for OCaml 5.3 (#489, @anmonteiro, @anmonteiro, @Octachron)

2.14.0 (2024-02-26)
-------------------

* Add support for OCaml 5.2 (#470, fixes #466, @leostera, @ManasJayanth,
  @huwaireb)

2.13.1 (2023-07-07)
-------------------

* Fix unavailable expunge on Windows (#447, @jonahbeckford)

2.13.0 (2023-07-03)
-------------------

* 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)

2.12.1 (2023-04-21)
-------------------

* Fix regression with unit qualification when a `Unit` module is in scope with
  no `()` constructor (#429, fixes #428, @emillon)

* emacs: add completion-at-point implementation (#406, fixes #261, @j-shilling)

2.12.0 (2023-04-17)
-------------------

* 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)

2.11.0 (2023-01-05)
-------------------

* 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)

2.10.0 (2022-10-06)
------------------

* 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`

2.9.2 (2022-06-15)
------------------

* Add support for OCaml 5.0 (#377 @dra27)

2.9.1 (2022-03-28)
------------------

* Add support for OCaml 5.0 (#371 @favonia)

2.9.0 (2021-12-09)
------------------

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

2.8.0 (2021-06-18)
------------------

* 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)

2.7.0 (2021-01-06)
------------------

* add support for OCaml 4.12 (@emillon, #339)

2.6.0 (2020-05-30)
------------------

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

2.5.0 (2020-04-26)
------------------

### Additions

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

### General

* 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)

2.4.3 (2019-12-31)
------------------

* add support for OCaml 4.10

2.4.2 (2019-09-18)
------------------

* Add support for OCaml 4.09.0 (@octachron @avsm, #299)

2.4.1 (2019-08-09)
------------------

### General

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

### Misc

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

2.4.0 (2019-05-17)
------------------

### General

* 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)

### Additions

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

### Breaking

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

2.3.0 (2019-01-31)
------------------

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](https://github.com/mirage/ocaml-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]
```

* 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)

2.2.0 (2018-07-15)
------------------

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

2.1.0 (2018-02-28)
------------------

* Add support for company-mode based completion in utop.el (#233)

2.0.2 (2017-11-07)
------------------

* 4.06.0 compatibility (#221)

2.0.1 (2016-05-30)
------------------

* Fix: restore the installation of `utop.el` (#210, Louis Gesbert)

2.0.0 (2016-05-26)
------------------

* 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`

1.19.3 (2016-08-15)
-------------------

* fix compatibility with 4.04.0+beta1

1.19.2 (2016-04-25)
-------------------

* Make ppx\_tools dependency optional

1.19.1 (2016-04-18)
-------------------

* fix compatibility with 4.03.0+beta2

1.19 (2016-04-07)
-----------------

* 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

1.18.2 (2016-03-02)
-------------------

* fix compatibility with OCaml 4.03

1.18.1 (2015-11-03)
-------------------

* fix compatibility with findlib 1.5.6

1.18 (2015-06-23)
-----------------

* emace mode improvements (Mads Hartmann Jensen)
  - add `utop-minor-mode` to make integration with major modes cleaner
  - clean-up of the elisp code
* add `UTop.end_and_accept_current_phrase` to avoid typing `;;` at the
  end of every phrases
* fix compatibility with OCaml trunk

1.17 (2014-12-12)
-----------------

* re-export `Config.load_path` as `UTop.load_path` (Peter Zotov)
* enable utop-command to be buffer-local (Mads Hartmann Jensen)
* fix 4.01 compatibility (Peter Zotov)

1.16 (2014-10-20)
-----------------

* make camlp4 support optional
* require OCaml 4.01.0 or newer
* implement wrapper for -safe-string

1.15 (2014-08-30)
-----------------

* fix compatibility with OCaml 4.02.0

1.14 (2014-07-05)
-----------------

* fix compatibility with OCaml 4.00.1 and earlier

1.13 (2014-07-04)
-----------------

* don't try to colorize the output when there is too much
* add auto-completion for the `#ppx` directive
* add support for -ppx, -dparsetree and -dsource
* fix compatibility with OCaml 4.02
* update pa_optcomp
* do not display the camlp4 welcome message

1.12 (2014-04-21)
-----------------

* supports -require for scripts
* support for React 1.0.0
* make utop.el compatible with melpa: http://melpa.milkbox.net

1.11 (2014-02-11)
-----------------

* update the async hook following the renaming of `Async_core` to
  `Async_kernel`
* fix tab completion not working on some emacs
* complete `#load_rec` the same way as `#load`

1.10 (2013-12-10)
-----------------

* add the `-require` command line argument to specify packages on the
  command line

1.9 (2013-11-26)
----------------

* automatically load all files in `$OCAML_TOPLEVEL_PATH/autoload` at
  startup. Can be disabled with `autoload: false` in `~/.utoprc` or
  `-no-autoload`.
* fix #38: handle errors from custom camlp4 ast filters
* fix #7: avoid a stack overflow in UTop_lexer

1.8 (2013-10-25)
----------------

* handle new syntax errors
* extend `#typeof` to values and modules. Thanks to Thomas Refis for
  this feature

1.7 (2013-08-08)
----------------

* fix compilation with ocaml < 4.01

1.6 (2013-08-07)
----------------

* hide topfind messages by default
* more predefined prompts available via `#utop_prompt_XXX`
* fix a bug in `#require` when passing multiple packages
* display errors in ~/.lambda-term-inputrc nicely
* doc update
* fix an issue when using first-class modules

1.5 (2013-04-28)
----------------

* when evaluating a region/buffer in emacs, evaluate all phrases
  instead of just the first one. Thanks to Matthias Andreas Benkard
  for this feature
* change the default prompt from `#` to `$` to match the standard
  toplevel
* add the option `UTop.show_box` to allow one to hide the completion
  bar
* enhance the lwt/async hooks for automatically waiting on a
  thread/deferred. Hooks were not triggered when the type of the
  expression was a type alias

1.4 (2013-03-09)
----------------

* hide identifiers starting with `_`. This can be disabled with
  `UTop.set_hide_reserved false`.
* automatically load camlp4 parsing (with original syntax) when
  trying to load a syntax extension
* fix a small bug when using camlp4, causing an exception to be raised
  when pressing `Enter` in the middle of a comment

1.3 (2013-01-29)
----------------

* allow to automatically wait for ascync deferred values
* added the `-short-paths` options for OCaml >= 4.01.0
  (and make it the default)

1.2.1 (2012-07-31)
------------------

* fix: do not expunge `Toploop`
* install a non-expunged version of utop: `utop-full`

1.2 (2012-07-30)
----------------

* ocaml 4.00 compatibility
* prevent findlib from being initialized twice
* better highlighting of errors
* automatically insert `Lwt_main.run` for
  toplevel expressions of type `'a Lwt.t`
* better camlp4 support
    * parse quotations and antiquotations to
      handle completion inside them
    * better support revised syntax
* emacs mode improvements
    * various fixes
    * highlight errors
    * add a menu
    * add interactive list of findlib packages
    * packages can be pre-loaded via the file variable
      `utop-package-list`
    * better tuareg integration
    * typerex integration
    * allow to complete using the toplevel environment
      in a tuareg buffer
    * allow to change the utop command
    * use the same history as the terminal mode
    * follow output of ocaml

1.1 (2010-08-06)
----------------

* add completion on labels
* add completion on methods
* smarter completion on record fields
* fix a bug in the lexer
* improvement for the emacs mode:
    * now pressing Tab really complete input
    * when sending input from a tuareg buffer, the cursor follow the
      end of buffer in all utop windows
    * fix usage of threads
    * add help
    * add manual pages
    * show more information in the prompt:
        * show the current value of the macro counter
        * show the number of key pressed since the beginning of a macro
          when recording a macro
        * show intermediate key sequence
    * better support for light colors terminals
    * add colors for module name and directives
    * add `UTop.smart_accept` to send only lines terminating with a `;;` token
    * search for compiler libraries at configure time
    * add a script to install compiler libraries
    * fix compatibility with ocaml 3.13
