[Caml-list] Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt
2026-03-17T14:39:13Z

[-- Attachment #1: Type: text/plain, Size: 16376 bytes --]

Hello

Here is the latest OCaml Weekly News, for the week of March 10 to 17,
2026.

Table of Contents
─────────────────

Public securiy meeting
Google OR-Tools: CP-SAT Subset
Neocaml-mode (A modern Emacs major mode for OCaml) is looking for testers
oui: multi-platform binary installers
Nixtamal: Fulfilling Input Pinning for Nix
OCaml-RDF 1.2.0
Slipshow!
Is there a public archive for the caml-list?
Old CWN

Public securiy meeting
══════════════════════

Archive: <https://discuss.ocaml.org/t/public-securiy-meeting/17882/1>

Hannes Mehnert announced
────────────────────────

Dear everyone,

as a reminder – next week Thursday (March 19th) 14:00 CEST, there will
be a public OCaml security meeting hosted by the
<https://ocaml.org/security> team. We will meet at
<https://meet.bornhack.dk/OCamlSecurityPublicMeeting>

Our agenda and notes will be at
<https://pad.data.coop/Ie5voBePSiKvjZdEko6otQ>#

If you're curious, the notes from our last meeting are at
<https://pad.data.coop/7-Ic5rG6ToynsW02hJsndg>

Hope to see you there!

Google OR-Tools: CP-SAT Subset
══════════════════════════════

Archive:
<https://discuss.ocaml.org/t/google-or-tools-cp-sat-subset/17885/1>

Timothy Bourke announced
────────────────────────

The [Google OR-Tools] are a suite of tools for solving optimization
problems. They include, in particular, [CP-SAT], which is a powerful
constraint solver and optimizer for integer linear programming and
boolean satisfiability problems.

The [ocaml-ortools] package provides an OCaml interface to a subset of
CP-SAT constraints. It comprises two parts `ortools`, which allows
modelling constraint problems in OCaml and translating them to a
protocol buffer format (thanks to [ocaml-protc]), and
`ortools_solvers`, which allows an embedded version of CP-SAT to be
called directly from OCaml. Both parts can be installed using opam or
built with dune. The latter includes the source of OR-Tools 9.15 which
is built together with most of its libraries and installed as part of
the opam package.

Some simple examples can be found in the [online documentation] and
[source code]. They can be built using the following commands.

┌────
│ opam install ortools ortools_solvers
│ ocamlfind ocamlopt -o prog -package ortools -package ortools_solvers -linkpkg prog.ml
└────

I would be happy to accept pull requests for the missing CP-SAT
constraints (I think it best to develop the interface together with
real applications, and I only need the ILP and boolean parts at the
moment), to translate more of the standard example programs (an easy
way to contribute), and to include other solvers from the suite
(likely to involve solving tedious compilation and compatibility
problems across multiple platforms).

Thanks to @nojb, @Rucikir , and others for [their help] with [dune],
and @xvw and @panglesd for [their help] with odoc. Thanks to @jmid ,
@mseri , and @avsm for discussing and merging my [opam-repository]
pull requests.

[Google OR-Tools] <https://developers.google.com/optimization>

[CP-SAT] <https://d-krupke.github.io/cpsat-primer/>

[ocaml-ortools] <https://github.com/INRIA/ocaml-ortools>

[ocaml-protc] <https://github.com/mransan/ocaml-protoc>

[online documentation]
<https://inria.github.io/ocaml-ortools/ortools/index.html>

[source code]
<https://github.com/INRIA/ocaml-ortools/tree/master/samples/sat>

[their help]
<https://discuss.ocaml.org/t/foreign-archives-no-static-libraries-dylib-on-mac/17669>

[dune] <https://discuss.ocaml.org/t/dune-cmake-and-j/17768>

[their help]
<https://discuss.ocaml.org/t/odoc-index-for-multiple-packages-inter-package-links-and-local-global-sidebar/17652>

[opam-repository] <https://github.com/ocaml/opam-repository>

Neocaml-mode (A modern Emacs major mode for OCaml) is looking for testers
═════════════════════════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/neocaml-mode-a-modern-emacs-major-mode-for-ocaml-is-looking-for-testers/17807/23>

Continuing this thread, Bozhidar Batsov announced
─────────────────────────────────────────────────

FYI - <https://github.com/bbatsov/neocaml/releases/tag/v0.4.0>

You'll need to update your Tree-sitter grammars due to some upstream
(breaking) changes in the TS OCaml grammar.

oui: multi-platform binary installers
═════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-oui-multi-platform-binary-installers/17886/1>

Nathan Rebours announced
────────────────────────

We are happy to announce the first release of `oui'!

`oui' is a tool that generates multi-platform binary installers for
your OCaml applications. It can generate installers for Windows, Linux
and MacOS. We hope it will help all of you out there developping
applications for non OCaml developers, allowing your users to install
your programs without having to install OCaml and/or opam, thus
greatly simplifying their user experience.

You can install `oui' with the following command:
┌────
│ opam install oui
└────

We made it as generic as possible to ensure it works for everyone. You
invoke it as follows:
┌────
│ oui build oui.json install-bundle
└────

where `install-bundle' is a folder containing your precompiled
binaries and any files you want to install alongside them, arranged in
any way you'd like. The `oui.json' file is a configuration file that
contains metadata and information on the installation bundle's layout
such as where to find binaries to add to the `PATH' or where to find
manpages.

`oui' can also create installers for plugins, assuming the main
application was either installed by a `oui' generated installer, or
was installed following some basic rules.

The project is hosted on github:
<https://github.com/OCamlPro/ocaml-universal-installer> The full
documentation is available [here]. In particular, you can find
guidelines on how to use it to create installers for your dune built
project [here].

Please go ahead and give it a try, we'd love to hear your feedback.

We welcome external contributors so if you'd like to take part in the
project, please read our [CONTRIBUTING.md] and jump in!

The project is still in a relatively early stage and there are some
key features we'd like to add, such as streamlining the user
experience for dune projects (removing the necessity to maintain a
separate configuration file for the most common use cases) or support
for cross-compilation/cross-platform installer generation. If those
features sound interesting to you and you would like to fund their
development, please reach out to contact@ocamlpro.com .

Finally, we'd like to thank our partner CEA-list who funded the
initial development of `oui' from `opam-wix' and made it all possible!

Happy installing!

[here]
<https://github.com/OCamlPro/ocaml-universal-installer/blob/master/doc/README.md>

[here]
<https://github.com/OCamlPro/ocaml-universal-installer/blob/master/doc/README.md#generating-a-binary-installer-for-your-dune-project>

[CONTRIBUTING.md]
<https://github.com/OCamlPro/ocaml-universal-installer/blob/master/CONTRIBUTING.md>

Nixtamal: Fulfilling Input Pinning for Nix
══════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-nixtamal-fulfilling-input-pinning-for-nix/17887/1>

toastal announced
─────────────────

[Nixtamal] is my first serious OCaml project release, now at verison
1.1.4. It was created as a reaction to the lack of features I wanted
from its “competitors” `niv' & `npins' while additionally covering
features Nix flakes never could support given it’s rigid design
philosophy which has more drawbacks than folks initially realize. I
have been using it on all projects for a couple months now & had at
least a couple folks I didn’t know prior try it out providing feedback
& bug reports.

*Key features:*

• Automate the manual work of input pinning for dependency management
• Allow easy ways to lock & refresh those inputs
• Declarative [KDL] manifest file over imperative <abbr title="command
line interface">CLI flags
• Host, forge, <abbr title="version control
system">VCS-agnostic
• Choose eval time fetchers (builtins)
or build time fetchers (Nixpkgs, default) — which opens up fetching
now-supported [Darcs], [Pijul], & [Fossil]
• Supports mirrors (on kinds that support mirrors)
• Override hash algorithm on a per-project & per-input basis —
including BLAKE3 support (which _does_ require enabling
`blake3-hashes` to opt in)
• Custom freshness commands (avoid refetching massive inputs just to
check the hash hasn’t changed)
• No experimental Nix features required (flakes)

Outside the homepage, it would be worth checking the [<abbr
title="frequently asked questions">FAQs] if any /whats/ or
/whys/ come up.

[Nixtamal] <https://nixtamal.toast.al>

[KDL] <https://kdl.dev>

[Darcs] <https://darcs.net>

[Pijul] <https://pijul.org>

[Fossil] <https://fossil-scm.org>

[FAQs]
<https://nixtamal.toast.al/faqs/>

OCaml-RDF 1.2.0
═══════════════

Archive: <https://discuss.ocaml.org/t/ann-ocaml-rdf-1-2-0/17890/1>

Zoggy announced
───────────────

Hello,

A new release of OCaml-RDF, [1.2.0], is available. The main additions
are:

• a new [Igraph] module, providing immutable graphs (for functional
style).
• a new [rdf_rdfa] package implementing a [Rdfa 1.1] processor.

It is available from [my own opam repository].

[1.2.0] <https://www.good-eris.net/ocaml-rdf/posts/ocaml-rdf-1.2.0.html>

[Igraph]
<https://www.good-eris.net/ocaml-rdf/refdoc/rdf/Rdf/Igraph/index.html>

[rdf_rdfa]
<https://www.good-eris.net/ocaml-rdf/refdoc/rdf_rdfa/index.html>

[Rdfa 1.1] <https://www.w3.org/TR/rdfa-core>

[my own opam repository] <https://framagit.org/zoggy/opam-repository>

Slipshow!
═════════

Archive: <https://discuss.ocaml.org/t/ann-slipshow/16337/22>

Continuing this thread, Paul-Elliot announced
─────────────────────────────────────────────

It is with a blatant denial of the current situation that I announce
the next release of Slipshow:

Slipshow 0.10.0: Don't look `{up}'
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

The +asteroid+ star of the release is the new warnings that the
compiler can raise to help you write a bug-free presentation. Those
warnings are visible on the command-line, but also in the
hot-reloading preview in `serve' mode!

<https://github.com/user-attachments/assets/f78568e5-dbbf-49e3-9cd3-8d2e5c4edfda>

Warnings will hopefully help detect bugs in your presentations and
improve the experience, especially of newcomers!

This time, I'd like to thanks @Alistair for the incredible [Grace 💅]
library. Whenever I look somewhere, I find a new OCaml pearl. Thank
you for that! This library, the ecosystem, open-source, are all
awesome things.

And thanks again to NLNet for [supporting] the development of
Slipshow!

Here is the full changelog:

[Grace 💅] <https://github.com/johnyob/grace>

[supporting] <https://nlnet.nl/project/Slipshow/>

Added
╌╌╌╌╌

• Helpful warnings at compile-time (#213):
• Action parsing failures,
• Missing ID (and `external-ids' frontmatter field to selectively
deactivate),
• Duplicated ID,
• Frontmatter parsing error,
• Wrong target type for actions,
• Missing file,
• Unknown attribute,
• …

Fixed
╌╌╌╌╌

• Fixed drawing stopping slightly after pauses (#216)
• Fixed keyboard shortcuts not working in serve mode until the preview
was clicked (#215)
• Fix shortcuts not working after saving a drawing (#217)
• Fix wrong example links in docs (#218)

Is there a public archive for the caml-list?
════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/is-there-a-public-archive-for-the-caml-list/16374/6>

Continuing this thread, Calascibetta Romain announced
─────────────────────────────────────────────────────

Hello, I am pleased to announce the launch of
<https://caml-list.robur.coop/>, a unikernel that provides a search
engine for the caml-list. We now have public access to this archive
:tada:!

Our cooperative is currently working on several fronts, including
email, by offering an archiving system. For more details, please see
[this article]. Another article describes [the search engine] we use,
and a third explains [how we developed this unikernel] (although the
latter has evolved considerably since then, the core remains the
same).

We are therefore delighted to make this service available to the
community, and if you would like to help us improve it, the project is
currently available [here]. We would like to thank [NLnet] for funding
this unikernel, and if you appreciate our work, please do not hesitate
to make a donation to our cooperative (via [GitHub] or [directly to
our cooperative])

Finally, this example also showcases all our work on unikernels: from
what an Ethernet frame is, through the archive system and the
extraction of emails from a virtualised hard drive, right up to the
HTTP request - *everything is done in OCaml* (and we would once again
recommend reading our tutorial on [mnet] if you would like to build up
unikernels).

So have fun hunting for relics from the history of OCaml!

[this article]
<https://blog.robur.coop/articles/2025-01-07-carton-and-cachet.html>

[the search engine]
<https://blog.robur.coop/articles/ptt_stem_and_search_engine.html>

[how we developed this unikernel]
<https://blog.robur.coop/articles/2025-04-12-ptt-search-webapp.html>

[here] <https://github.com/robur-coop/blame>

[NLnet] <https://nlnet.nl/>

[GitHub] <https://github.com/sponsors/robur-coop>

[directly to our cooperative] <https://robur.coop/Donate>

[mnet] <https://robur-coop.github.io/mnet/>

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:alan.schmitt@polytechnique.org>

[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/>

[-- Attachment #2: Type: text/html, Size: 27639 bytes --]