Attn: Development Editor, Latest OCaml Weekly News
Alan Schmitt <[email protected]> Tue, 21 Oct 2025 11:17:47 +0200
| Newsgroups | gmane.comp.lang.caml.inria |
|---|---|
| Message-ID | <[email protected]> |
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
Ocaml notebooks in web browser
Cure2 - combinator frontend for re2
Other OCaml News
Old CWN
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.
[ocaml-eglot] <https://github.com/tarides/ocaml-eglot>
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.
[GitHub] <https://github.com/tarides/ocaml.nvim>
Ocaml notebooks in web browser
══════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ocaml-notebooks-in-web-browser/17385/1>
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!
[try it]
<https://davy39.github.io/xeus-ocaml/lab/index.html?path=demo.ipynb>
[new issues] <https://github.com/davy39/xeus-ocaml/issues/new>
Cure2 - combinator frontend for re2
═══════════════════════════════════
Archive:
<https://discuss.ocaml.org/t/ann-cure2-combinator-frontend-for-re2/17410/1>
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
└────
[Cure2] <https://github.com/ahrefs/cure2>
Other OCaml News
════════════════
From the ocaml.org blog
───────────────────────
Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].
• [Setting up Open Telemetry (OTel, Prometheus, Grafana and Jaeger)
with OCaml]
• [CI support for OCaml 5.4]
[the ocaml.org blog] <https://ocaml.org/blog/>
[Setting up Open Telemetry (OTel, Prometheus, Grafana and Jaeger) with
OCaml] <https://fearful-odds.rocks/blog/setting-up-otel-with-ocaml>
[CI support for OCaml 5.4]
<https://www.tunbury.org/2025/10/18/ci-support-for-ocaml-54/>
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].
[Alan Schmitt]
[send me a message] <mailto:[email protected]>
[the archive] <https://alan.petitepomme.net/cwn/>
[RSS feed of the archives] <https://alan.petitepomme.net/cwn/cwn.rss>
[caml-list] <https://sympa.inria.fr/sympa/info/caml-list>
[Alan Schmitt] <https://alan.petitepomme.net/>