OCaml Weekly News
Hello
Here is the latest OCaml Weekly News, for the week of October 14 to 21, 2025.
Table of Contents
Backstage OCaml: ocaml.nvim - A Neovim Plugin for OCaml
Archive: https://discuss.ocaml.org/t/ann-backstage-ocaml-ocaml-nvim-a-neovim-plugin-for-ocaml/17383/1
Charlène_Gros announced
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, you can post an issue on the ocaml.nvim GitHub repository.
Ocaml notebooks in web browser
Davy announced
Hello everyone !
I’m currently learning Ocaml, and found no better way to learn than working on a project :
I’m happy to announce xeus-ocaml, a new kernel to run Ocaml from Jupyterlite notebooks :partying_face:
I’m far from a professional developer, and very new to Ocaml, so do not hesitate to try it with your workflow, report any new issues, ask for other external libraries (currently only stdlib and ocamlgraph), or contribute to its development to make the code more robust and idiomatic.
Any feedback would be appreciated!
Cure2 - combinator frontend for re2
Emile Trotignon announced
Cure2 is a little library I just made, that provide a combinator frontend to Re2.
With it, instead of "https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&//=]*)"
,
you can write:
let second_level_char = charset Charset.[Ascii.alnum; chars "-@:%._\\+~#="] in
let top_level_chars = charset Charset.[Ascii.alnum; chars "()"] in
let path_chars = charset Charset.[Ascii.alnum; chars "()@:%_\\+.~#?&/="] in
str "http" + !?(char 's') + str "://"
+ !?(str "www.") + rep ~min:1 ~max:256 second_level_char
+ char '.' + rep ~min:1 ~max:6 top_level_chars
+ bow + rep path_chars
Other OCaml News
From the ocaml.org blog
Here are links from many OCaml blogs aggregated at the ocaml.org blog.
Old CWN
If you happen to miss a CWN, you can send me a message and I'll mail it to you, or go take a look at the archive or the RSS feed of the archives.
If you also wish to receive it every week by mail, you may subscribe to the caml-list.