Backstage OCaml

RSS

Get updates on experimental releases, work-in-progress, and opportunities to contribute to the development of the OCaml Platform and its infrastructure.

Discuss this post on discuss!

Merlin's signature-help feature, which displays function signatures and highlights the active parameter as you type, has received several improvements:

  • Parameter-only display: Signature help now only appears on function parameters, no longer on the function name itself.
  • No more parameter looping: After the last parameter, the highlight no longer wraps back to the first one.
  • Better context support: Signature help now activates within let .. in bindings even before the in keyword is written.
  • Optional parameter detection: Optional parameters are now correctly detected and highlighted when the user starts writing one.

Some of these improvements are already available in the latest Merlin and ocaml-lsp releases, with the rest coming in upcoming versions.

A preview release of OCaml-LSP for the OCaml 5.5 series is available. Notable changes:

  • A new destruct custom request (#1583), intended to let clients such as ocaml-eglot trigger the command directly rather than through a code action.
  • Configurable Merlin via build systems other than dune, through the OCAMLLSP_PROJECT_BUILD_SYSTEM and OCAMLLSP_PROJECT_ROOT environment variables (#1581).
  • Long signatures returned by signature-help are now formatted with ocamlformat for improved readability (#1580).

For more details, see the full changelog below.

See full backstage

Fixes

  • Improve the readability of signature-help for long signatures (#1580)

Features

  • Add destruct custom request (#1583)

  • Allow to configure merlin using build systems other than dune.

    If $OCAMLLSP_PROJECT_BUILD_SYSTEM environment variable is set then OCaml LSP will execute $OCAMLLSP_PROJECT_BUILD_SYSTEM ocaml-merlin command to get merlin configuration for a module. It is expected the command to communicate using merlin-dot-protocol.

    If $OCAMLLSP_PROJECT_ROOT environment variable is set then OCaml LSP will use it as a project root directory.

Discuss this post on discuss!

We're excited to announce ocaml.nvim, a new Neovim plugin actively being developed by Tarides that brings advanced OCaml development features to Neovim users. Think of it as the Neovim sibling of ocaml-eglot, which we released earlier this year for Emacs users.

What is ocaml.nvim?

Modern code editors communicate with programming languages through the Language Server Protocol (LSP), which provides essential features like syntax checking, code navigation, and auto-completion. However, OCaml's language server exposes powerful custom commands beyond what generic LSP clients can access.

ocaml.nvim works alongside generic Neovim LSP plugins like nvim-lspconfig, providing direct access to advanced ocamllsp features without requiring complex editor-side logic. The plugin gives you access to all the advanced Merlin commands not supported by generic LSP clients.

Key Features

Typed Holes Navigation - Navigate between typed holes (_) and interactively substitute them with the Construct command.

Semantic Navigation - Move through your code semantically: jump between expressions, parent let bindings, modules, functions, and match expressions.

Phrase Navigation - Move between OCaml phrases (top-level definitions) in your buffer.

Many more features are in development, including alternating between .ml and .mli files, type enclosing, and pattern matching generation.

Getting Started

Installation is straightforward with lazy.nvim:

require("lazy").setup({
  { "tarides/ocaml.nvim",
    config = function()
      require("ocaml").setup()
    end
  }
})

The plugin complements your existing LSP setup—you'll continue to use Neovim's built-in LSP for standard features while ocaml.nvim adds OCaml-specific capabilities.

Project Status

The ocaml.nvim repository is now public on GitHub, with comprehensive documentation, a feature table, and screencast demonstrations. We're working towards a stable 1.0 release and welcome feedback from the community.

Try out ocaml.nvim and let us know what you think! For questions or feedback, reach out to Charlène Gros at charlene@tarides.com, join the discussion on the OCaml Discuss forum, or post an issue on the ocaml.nvim GitHub repository.

If you want to contribute to a new release announcement, check out the Contributing Guide on GitHub.