CHANGES:
Thu Apr 30 14:15:42 CEST 2026
Official stable release announcements and updates from the OCaml compiler, OCaml infrastructure and the OCaml Platform Tools.
CHANGES:
Thu Apr 30 14:15:42 CEST 2026
We're happy to announce the release of Merlin 5.7.0-504. This release comes with a number of bug fixes and improvements to Merlin.
For more details, we encourage you to delve into the full changelog.
See the related announcement on the Discuss forums.
option in locate-types result for optional parameters (#2027)-end-position parameter for enclosing (#2029)CHANGES:
Thu Apr 09 09:59:38 WAT 2026
option in locate-types result for optional parameters (#2027)-end-position parameter for enclosing (#2029)We're happy to announce the release of merlin v5.6.1-504!
This latest release brings performance optimizations, refined editor behavior, and improved stability to your OCaml development environment.
let ... in bindings and no longer appears redundantly on function names.document command concatenated labels and variants incorrectly.document command which sometime concatenates consecutive variants and labels (#2005)let ... in bindings (#2009)We're happy to announce the release of merlin v4.7.1-413, which fixes an issue in the merlin binary that prevented installation!
Merlin 5.6 is now available with support for OCaml 5.4, a new type navigation command, and several bug fixes!
New locate-types command
The new locate-types command returns all locatable type identifiers in an expression as a tree structure. Unlike locate-type, which only handles simple type constructors and ignores type arguments, locate-types works on complex types like (int, Foo.t) result. You can now navigate to int, Foo.t, or result individually. This enables better "Go to Type Definition" functionality in editors that support it.
OCaml 5.4 support
This release supports OCaml 5.4.
Improved error recovery
Type checking now handles mutually recursive definitions better when they contain errors, providing more useful feedback during development.
OpenBSD support
Fixed merlin_reader to work correctly on OpenBSD.
Vim plugin fix
:MerlinOccurrencesProjectWide no longer errors when it can't gather code previews.
See the GitHub repository and the related announcement on the Discuss forums for more details.
locate-types command (#1951)Merlin 5.5-503 is now available! This release addresses several long-standing issues with jump-to-definition, occurrences reporting, and inlay hints while adding new utilities for working with typed holes.
Key changes include enhanced locate functionality that can now disambiguate between files with identical names and contents, fixes to occurrences that properly report stale files, and corrected inlay hints on function parameters. The outline feature has been expanded to handle class types and locally defined values, with a new selection field that provides the exact location of symbols. Several jump-to-definition issues have been resolved, and the destruct feature no longer hangs when processing patterns with the cons operator (::).
The merlin library now exposes utilities for manipulating typed holes through Merlin_analysis.Typed_hole, and ocaml-index has improved performance through better granularity in index reading via segmented marshalization. This release also includes fixes for typer assertion failures and cache backtracking issues that were causing crashes in certain scenarios.
Merlin_analysis.Typed_holelocate can now disambiguate between files with identical names and contentsoccurrences now reports stale files (#1885)inlay-hints fix inlay hints on function parameters (#1923)We are pleased to announce the release of Merlin 4.19-414!
:MerlinSearch command, thatWe're happy to announce the release of Merlin 5.4.1-503!
Merlin 5.4-503 is now available with support for OCaml 5.3. This release leverages new features in OCaml 5.3 to improve locate behavior, resolving issues where Merlin previously confused unique identifiers from interfaces and implementations. The indexer has been optimized to perform fewer merges, and initial support for project-wide renaming has been added, allowing occurrences to return all usages of related definitions across a project.
The Vim plugin receives an enhancement with search-by-type functionality, accessible through the existing :MerlinSearch command. The command now automatically switches between search-by-type and polarity search based on the first character of the query.
:MerlinSearch command, thatThis release introduces Merlin 5.3-502, compatible with OCaml 5.2, and 4.18-414, compatible with OCaml 4.14. Key updates include EXCLUDE_QUERY_DIR for better file management, resolving exceptions in polarity search,
and stabilizing type-enclosing results. For users of 5.3-502, additional enhancements address path resolution issues, fixes jump to fun functionality, and ensure proper handling of occurrences from hidden source files.
merlin binary
merlin binary (only in 5.3-502)
We are happy to announce the joint release of Merlin 5.2.1-502 and 4.17.1. This release adds many new features to Merlin including the ability to add hints to a source tree, serch for values using a type signature and expanding PPX annotations to preview their source code. There are also bug fixes for both the Merlin binary and editor modes.
More information can be found in the Discuss announcement.
Contributions are always welcome at Merlin | Issues
-unboxed-types and -no-unboxed-types as OCaml ignored flags (ocaml/merlin#1795, fixes ocaml/merlin#1794)expand-node command for expanding PPX annotations (ocaml/merlin#1745)inlay-hints command for adding hints on a source tree (ocaml/merlin#1812)search-by-type command for searching values by types (ocaml/merlin#1828)dot-merlin-reader ignoring SOURCE_ROOT and STDLIB directives (ocaml/merlin#1839, ocaml/merlin#1803)merlin.py (ocaml/merlin#1798)merlin-search-by-type, merlin-search-by-polarity and change the behaviour of merlin-search to switch between by-type or by-polarity depending on the query (ocaml/merlin#1828)We are pleased to announce the release of Merlin 5.1-502. This is an important release that brings a lot of backend changes and a major
new feature: project-wide occurrences queries.
Try it by running dune build @ocaml-index (since dune 3.16.0) and performing a reference query!
More information can be found in the discuss announcement and the wiki.
Merlin_lib.index_formatSOURCE_ROOT that is used to resolve relative paths found in the
indexes.INDEX that is used to declare the list of index files Merlin should
use when looking for occurrences.UNIT_NAME configuration directive that can be used to tell Merlin
the correct name of the current unit in the presence of wrapping (ocaml/merlin#1776)merlin-lib.commands: Add a find_command_opt alternative to
find_command that does not raise (ocaml/merlin#1778)We are pleased to announce the release of Merlin 4.16-414 and 4.16-501.
These releases expose additional functions for packages using merlin-lib that need to manually parse merlin commands.
merlin-lib.commands library which disassociates the
execution of commands from the new_protocol, from the binary, allowing
it to be invoked from other projects (ocaml/merlin#1758)merlin-lib.commands: Add a find_command_opt alternative to
find_command that does not raise (ocaml/merlin#1778)We are pleased to announce the release of Merlin 4.15-414 and 4.15-501.
These releases bring a handful of bug fixes and improvements, notably to the
destruct feature, that were already released for OCaml 5.2 in Merlin 5.0-502.
We are pleased to announce the release of Merlin 5.0-502!
This release brings official support for OCaml 5.2. Substantial backend changes were required to adapt to this release, especially for features such as occurrences and get-documentation. Do not hesitate to report any suspicious behavior in the issue tracker!
This release also fixes a handful of issues, two of them improving the behaviour of Merlin's destruct feature.
destruct: Removal of residual patterns (#1737, fixes #1560)merlin-lib.commands library that disassociates the
execution of commands from the new_protocol, from the binary, allowing
it to be invoked from other projects (#1758)merlin.hide
attribute is present. (#1768)uid_to_decl table in 5.2's CMT files to get documentation.
(#1773)We're thrilled to announce the release of Merlin 4.14, a significant update that introduces a suite of enhancements and fixes to improve your OCaml editor experience.
In addition to the improvements and bug fixes in this release, Merlin 4.14 is the first version to support the upcoming OCaml 5.2 compiler.
Some highlights in this release include:
Happy coding!
FLG -pp ppx.exe -as-pp/-dump-ast use of invalid shell redirection when
direct process launch on Windows. (#1723, fixes #1722)ocamlmerlin responses to detect server crashes (#1716)module-type (#1728, partially fixes #1656)We're happy to announce the release of Merlin 4.13. This release comes with a number of bug fixes to the Merlin binary.
It also introduces a new -cache-lifespan flag that can be used to set cache invalidation periods. This flag allows for fine-tuning of cache invalidation periods, enabling users to customize Merlin's internal configurations for optimal performance in various project contexts.
Additionally, this release includes several improvements in editor modes. For more details, we encourage you to delve into the full changelog.
-cache-lifespan flag, that sets cache invalidation period. (#1698,
#1705)Merlin 4.12 is a small patch release fixing regressions introduced in previous versions.
We are pleased to announce the release of Merlin 4.11 for OCaml 4.14.1, 5.0, and 5.1.
This release brings official support for OCaml 5.1 and introduces some changes to Emacs' default bindings proposed by the community:
tuareg-eval-region) and bind
C-c C-v instead to merlin-error-check;merlin-document and bind C-c M-d and
C-c | instead to merlin-destruct;merlin-type-expr.Thanks to everyone involved!
tuareg-eval-region) and bind C-c C-v instead to merlin-error-check;
rebind C-c C-d to merlin-document and bind C-c M-d and C-c | instead to merlin-destruct;
bind C-u C-c C-t to merlin-type-expr.defadvice macro (ocaml/merlin#1675)We're thrilled to announce the release of Merlin 4.10, which comes with many bug fixes and improvements.
One of the standout features of this release is the significantly enhanced
support for binding operators like let+ and and+. You'll find that the
results from type-enclosing on expressions that contain let bindings are now
more precise.
construct command (#1618). Prefixes are still produced when
warning 42 (disambiguated name) is active.short-path from looping in some cases related to recursive type
definitions (#1645)type-enclosing on let/and operators (#1653)merlin-construct-with-local-values (#1644)We are pleased to announce the release of Merlin 4.9 for OCaml 4.14.1 and 5.0.
This maintenance release brings multiple bug fixes and improvements. In particular we identified and patched an important memory consumption issue that could greatly affect Merlin’s performance in heavily functorized projects.
scope option to the occurrences command in preparation for
the upcoming project-wide-occurrences feature (#1596)false instead of true in the
construct command, for consistency (#1599).construct results ordering for sum types sand poly variants (#1603)errors to erroneously alert about missing
cmi files (#1577)merlin-construct (#1598)construct ordering (#1603)We are pleased to announce the release of Merlin 4.8 for OCaml 4.14.1 and 5.0.
This maintenance release brings multiple bug fixes and improvements to document fetching, jump-to-definition and type-on-hover for records' labels.
Oops, we went looking but didn't find the changelog for this release 🙈
(??) custom prefix operator.
(#1507, fixes #1506)enclosing command result (#1512)verbosity=smart mode for type enclosing that only expand
modules' types (#1374, @ulugbekna)enclosing command (#1512)Oops, we went looking but didn't find the changelog for this release 🙈
merlin-lib package that exposes merlin's internals and the merlin
package with the frontend. (#1448, #1455, #1457, #1497, @rgrinberg,
@tmattio, @kit-ty-kate)Seq-based API of Yojson 2.0, avoiding the need for the
deprecated Stream module (#1475 by @Leonidas-from-XIV)MERLIN_LOG (#1480 by @ulugbekna)type-enclosing results (#1483, fixes #1477)core_type (#1484)merlin-locate optional, both for
consistency with Emacs convention and for backwards compatibility. (#1476,
@antalsz)= syntax in compiler flags (#1409)MerlinTypeOf (#1433 by @ddickstein, fixes
#1221)*merlin-errors* containing the last viewed error
(#1414, @panglesd)merlin-wrapper create a default .merlin file only when there is
no dune-project to let tests use dune ocaml-merlin reader. (#1425)occurrences to work when looking for locally abstract types
(#1382)-alert compiler flag (#1401)-error-style compiler flag (#1402, @nojb)Oops, we went looking but didn't find the changelog for this release 🙈
construct that builds a list of possible terms when
called on a typed hole (#1318)refactor-open improvements (#1313, #1314, #1366, #1372)
open Foo (* calling refactor-open qualify on this open *)
let _ = Foo.bar (* previously could result in [Dune__exe.Foo.bar] *)
unqualify should not qualifyPersistent_env.Error in Typemod.initial_env (#1355)construct command:
MerlinConstruct. When several results are suggested, <c-i>
and <c-u> can be use to change the depth of the recursive
construction. (#1318)merlin-locate-type command:
MerlinLocateType (#1359)construct command:
merlin-construct. (#1352)merlin-locate-type command. (#1359)merlin--highlight and various minor improvements
(#1367, @mattiase)construct command (#1318)Oops, we went looking but didn't find the changelog for this release 🙈
workdir configuration value when using the
dune ocaml-merlin configuration provider the same as when using
dot-merlin-reader so that ppxes behaves in the same way as before
(#1284, fixes ocaml/dune#4479, discussion in #1292)_), allow correct typing of these
holes and add a new holes command that returns the locations of all
holes in the current file along with their types (#1242, #1289)MerlinNextHole and MerlinPreviousHole commands to navigate
between holes. Jump to the first hole after destruct (#1287, #1303)merlin-next-hole and merlin-previous-hole commands to
navigate holes. Jump to the first hole after calling destruct. (#1291)holes command and AST node (#1242, #1289)Oops, we went looking but didn't find the changelog for this release 🙈
merlin_analysis and merlin_utils librarydot-merlin-reader with a binary that reads
.merlin files. (#1123, #1152)Oops, we went looking but didn't find the changelog for this release 🙈
- (#1142)Locate_type) (#1067)without_cmisEnv.check_state_consistency (#1044)check_state_consistency (#1044)** globbing in .merlin won't look into hidden directories
(starting with a '.') (by Daniel Bünzli, #990)Special thanks to Rudi Grinberg for helping us in reviewing and merging pull-requests.
backend
-pp flageditors modes
emacs
merlin--overlay function (by Wilfred Hughes)vim
testsuite