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

Alan Schmitt
2025-08-26T12:34:11Z

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

Hello

Here is the latest OCaml Weekly News, for the week of August 19 to 26,
2025.

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

Why Lean 4 replaced OCaml as my Primary Language
Tacit 1.0.0 - Combinators!
Slipshow!
Claudius is now available in opam! 🎉
New release of UnionFind
Bogue, the OCaml GUI
Dune 3.20
cudajit: Bindings to the `cuda' and `nvrtc' libraries
zbg v0.3.0: New release 2 years later
Announcing Raven: Scientific Computing for OCaml (Alpha Release)
Outreachy Demo Day August 2025
Other OCaml News
Old CWN

Why Lean 4 replaced OCaml as my Primary Language
════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/why-lean-4-replaced-ocaml-as-my-primary-language/17109/1>

Shon announced
──────────────

<https://kirancodes.me/posts/log-ocaml-to-lean.html>

Tacit 1.0.0 - Combinators!
══════════════════════════

Archive: <https://discuss.ocaml.org/t/tacit-1-0-0-combinators/17142/1>

arutonee announced
──────────────────

Partially as a beginner project (I am /very much/ a beginner- if
anyone else finds the package useful and feels like something should
be changed or knows more fun combinators, feel free to make a PR as I
have no clue what I’m doing), and partially just because I personally
want a relatively complete combinator library, `tacit' is now on opam!
Now you can write `let nth_root = C.c (C.phi1 Float.pow C.k (C.b1 ((
/. ) 1.) C.ki))' if you wanted to, for whatever reason :wink:

Xavier Van de Woestyne then added
─────────────────────────────────

Here is the package page: <https://ocaml.org/p/tacit/latest>

here is the repository: <https://github.com/arutonee1/tacit>

Slipshow!
═════════

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

Paul-Elliot announced
─────────────────────

(I hope it's still OK to announce my releases here, despite their
current frequencies and the fact that it's not an OCaml _library_.)

I am speechless to announce the new [opam release] of [Slipshow]!

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

[Slipshow] <https://github.com/panglesd/slipshow/>

Version 0.6.0: The King’s Slipshow
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

This release focuses on one specific feature: the speaker view.

<https://github.com/user-attachments/assets/6f1384f0-715c-4af7-80d6-7da9c0b9744b>

(Disclaimer: AI generated text ^[The text in the left of the gif above
was mostly generated by an LLM, mimicking "The King's speech"
declaration of war, but turned to praise peace, which we need a lot in
this world])

The speaker view includes a timer, speaker notes, and a presentation
synced with the main one. Note that a compiled presentation is still a
standalone html file that you can just double click on.

To open the speaker view, press `s'. To send some text to the speaker
notes, use the `speaker-note' action, as in the code below:

┌────
│ # The King's Slipshow
│
│ {pause speaker-note}
│ Say it like this: "perhaaaaaaaaps"...
│
│ In this grave hour, perhaps the most fateful in our history, I send to every household of my peoples, both at home and overseas, this message, spoken with the same depth of feeling for each one of you as if I were able to cross your threshold and speak to you myself.
│
│ {pause speaker-note}
│ Make a little pause and show a tear, it'll make it more dramatic.
│
│ As always, the world finds itself standing on the edge of war.
│
│ {pause center=time speaker-note}
│ Emphasize roar but avoid making everyone uncomfortable.
│
│ {#time}
│ Time after time, we have sought peaceful ways to resolve our differences. Yet too often, dialogue has been drowned out by the roar of weapons.
│
│ {pause speaker-note}
│ Pretend you know what you are speaking about: as a King, you can do that.
│
│ We are told that violence is unavoidable, that to be safe we must fight. But this is the old and dangerous lie that “might is right.” If we accept it, we accept the slow destruction of all that makes life worth living.
│
│ {pause down=end speaker-note}
│ DRAMATICALLY POINT FINGERS AT THE AUDIENCE!!!
│
│ For the sake of all we cherish, we must find another path. The real challenge before us is not to fight harder, but to imagine peace when anger blinds us, and to choose cooperation when conflict seems easier.
│
│ I call on all people, across every border, to remain calm, firm, and united in the higher cause of preserving life. To resist the call of hatred. To remember that in every city, in every nation, there are children who deserve a future unscarred by war.
│
│ The road will be hard. There may be days when peace feels impossible. But war spreads beyond the battlefield — it steals homes, divides families, and poisons the generations to come.
│
│ {#end}
│ If we remain steadfast in our refusal to give in to violence, then, with courage and compassion, we will prevail — not by destroying, but by preserving.
└────

Full changelog below:

◊ Engine

• Add a speaker view, opened with `s'. (#147)
• Fix `Z' and `X' not working (#147)
• On step change, move back to the position we left (#148)

◊ Language

• Add a `speaker-note' action. (#147)

Claudius is now available in opam! 🎉
═════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/claudius-is-now-available-in-opam/17145/1>

Shreya Pawaskar announced
─────────────────────────

We are happy to announce that Claudius is now available in opam!

Claudius is a functional style retro-graphics library for OCaml for
building generative art, demos, and games.

Here’s our github: [Claudius]

And some cool examples to checkout and explore more:
[claudius-examples]

[Claudius] <https://github.com/ClaudiusFX/claudius>

[claudius-examples] <https://github.com/ClaudiusFX/claudius-examples>

New release of UnionFind
════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-new-release-of-unionfind/17147/1>

François Pottier announced
──────────────────────────

Hello! It is my pleasure to announce a new release of my library
`unionFind'. The main news is that a concurrent union-find algorithm
is now available under the name `UnionFind.Concurrent'. To install it,
type `opam update && opam install unionFind.20250818'. For more
information, see the [documentation].

[documentation]
<https://cambium.inria.fr/~fpottier/unionFind/doc/unionFind/>

Bogue, the OCaml GUI
════════════════════

Archive: <https://discuss.ocaml.org/t/ann-bogue-the-ocaml-gui/9099/64>

sanette announced
─────────────────

Hello

it’s my pleasure to announce a new version of [Bogue], version
20250815 available on [opam].

The main novelty is an *internationalization mechanism*. All text used
by Bogue (like ‘close’ in a close button) will be automatically
translated into the user’s language. Currently 15 languages are
supported but more can easily be added either via configuration files,
on directly at run-time using the [i18n API].

note: Internationalization has been tested only for a small number of
applications; don’t hesitate to report bugs.

Happy bogue-ing!

[Bogue] <https://github.com/sanette/bogue>

[opam] <https://ocaml.org/p/bogue/20250815>

[i18n API] <https://sanette.github.io/bogue/Bogue.I18n.html>

Dune 3.20
═════════

Archive: <https://discuss.ocaml.org/t/ann-dune-3-20/17150/1>

Etienne Marais announced
────────────────────────

On the behalf of the Dune Team, I’m glad to announce the release of
dune `3.20.0' :partying_face:

This release contains some important bug fixes. It contains new
features for tests, such as the possibility to use an alias and the
possibility to declare a /timeout/ for /cram/ tests. This release also
provides new possibilities for the /watch mode,/ like the ability to
run an executable or promote files while the watch mode is running.

:warning: A significant change in this release is how the dune file
formatter acts. It will now try to fill the line instead of using the
vertical format.

If you encounter a problem with this release, you can report it on the
[ocaml/dune] repository.

[ocaml/dune] <https://github.com/ocaml/dune/issues>

Changelog
╌╌╌╌╌╌╌╌╌

◊ Fixed

• Stop re-running cram tests after promotion when it’s not necessary
(#11994, @rgrinberg)

• fix: `$ dune subst' should not fail when adding the version field in
opam files (#11801, fixes #11045, @btjorge)

• Kill all processes in the process group after the main process has
terminated; in particular this avoids background processes in cram
tests to stick around after the test finished (#11841, fixes #11820,
@Alizter, @Leonidas-from-XIV)

◊ Added

• `(tests)' stanzas now generate aliases with the test name. To run
`(test (name a))' you can do `dune build @runtest-a'. (#11558,
grants part of #10239, @Alizter)

• Inline test libraries now produce aliases `runtest-name_of_lib'
allowing users to run specific inline tests as `dune build
@runtest-name_of_lib'. (#11109, partially fixes #10239, @Alizter)

• feature: `$ dune subst' use version from `dune-project' when no
version control repository has been detected (#11801, @btjorge)

• Allow `dune exec' to run concurrently with another instance of dune
in watch mode (#11840, @gridbugs)

• Introduce `%{os}', `%{os_version}', `%{os_distribution}', and
`%{os_family}' percent forms. These have the same values as their
opam counterparts. (#11863, @rgrinberg)

• Introduce option `(implicit_transitive_deps
false-if-hidden-includes-supported)' that is equivalent to
`(implicit_transitive_deps false)' when `-H' is supported by the
compiler (OCaml >= 5.2) and equivalent to `(implicit_transitive_deps
true)' otherwise. (#11866, fixes #11212, @nojb)

• Add `dune describe location' for printing the path to the executable
that would be run (#11905, @gridbugs)

• `dune runtest' can now understand absolute paths as well as run
tests in specific build contexts (#11936, @Alizter).

• Added ‘empty’ alias which contains no targets. (#11556 #11952 #11955
#4161, grants #4161, @Alizter and @rgrinberg)

• Allow `dune promote' to properly run while a watch mode server is
running (#12010, @ElectreAAS)

• Add `--alias' and `--alias-rec' flags as an alternative to the `@@'
and `@' syntax in the command line (#5775, fixes #5775, @rgrinberg)

• Added a `(timeout <float>)' field to the `(cram)' stanza to specify
per-test time limits. Tests exceeding the timeout are terminated
with an error. (#12041, @Alizter)

◊ Changed

• Format long lists in s-expressions to fill the line instead of
formatting them in a vertical way (#10860, fixes #10860, @nojb)

• Switch from MD5 to BLAKE3 for digesting targets and rules. BLAKE3 is
both more performant and difficult to break than MD5 (#11735,
@rgrinberg, @Alizter)

• Print a warning when `dune build' runs over RPC (#11833, @gridbugs)

• Stop emitting empty module group wrapper `.js' file in
`melange.emit' (#11986, fixes #11986, @anmonteiro)

Etienne Marais later announced
──────────────────────────────

The Dune Team is happy to announce the release of Dune `3.20.1'.

This release introduces some minor fixes and reverts the dune file
formatter change. As mentioned above, the formatter change will be
reintroduced in a next release once it is able to detect the dune
project version.

Changelog
╌╌╌╌╌╌╌╌╌

◊ Fixed

• Fix `runtest-js' mistakenly depending on `byte' (fixes #12243,
#12242, @vouillon and @Alizter)

• Fix the interpretation of paths in `dune runtest' when running from
within a subdirectory. (#12251, fixes #12250, @Alizter)

◊ Changed

• Revert formatting change introduced in 3.20.0 making long lists in
s-expressions fill the line instead of formatting them in a vertical
way (#12245, reverts #10892, @nojb)

cudajit: Bindings to the `cuda' and `nvrtc' libraries
═════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-cudajit-bindings-to-the-cuda-and-nvrtc-libraries/15010/4>

Lukasz Stafiniak announced
──────────────────────────

cudajit 0.7.2 is now available in the opam repository. It’s a bug-fix
release. Note that a salient missing feature of cudajit is CUDA
graphs, if you want them I’m eager to add them, let me know!

OCANNL 0.6.0 is also available in the opam repository. However, I only
expect OCANNL to become usable at version 0.8 due to how I decided to
prioritize things. The upshot is that the front-end should become
pretty stable starting with version 0.7.

zbg v0.3.0: New release 2 years later
═════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/ann-zbg-v0-3-0-new-release-2-years-later/17165/1>

Dmitrii Kovanikov announced
───────────────────────────

Hi everyone :waving_hand:

2 years ago, I created `zbg' – Zero Bullshit Git. It was my first
project in OCaml to learn the language. But I still use the tool
daily. It's just a small wrapper around some `git' commands to make my
life easier.

• <https://github.com/chshersh/zbg>

I might be the only person using this tool, but it saves me time every
day, and it brings joy to programming, so, hey, that's enough reward
for me.

Moreover, I received some high-quality contributions from other people
who enhanced the tool. Thank you a lot!!

I like that `zbg' is rather small, and I intend to keep it that way. I
believe it serves as a nice example of a small (yet still useful)
project in OCaml.

Anyway, I just released a new version 2 years later. Have a look if
you're interested!

Previous discussion:

• <https://discuss.ocaml.org/t/ann-zbg-v0-2-0-a-new-version-of-zero-bullshit-git/13664>
• <https://discuss.ocaml.org/t/ann-zbg-zero-bullshit-git/11929>

Announcing Raven: Scientific Computing for OCaml (Alpha Release)
════════════════════════════════════════════════════════════════

Archive:
<https://discuss.ocaml.org/t/announcing-raven-scientific-computing-for-ocaml-alpha-release/16913/28>

Thibaut Mattio announced
────────────────────────

Help Shape Raven’s First Alpha - Call for Contributions!
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

I’m excited to announce that *Raven’s first alpha is scheduled in 3
weeks*, just in time for FunOCaml! (Following our zeroth alpha in
July)

What’s New
╌╌╌╌╌╌╌╌╌╌

We’ve added a plethora of new features:

• New `Talon' package that provides an equivalent for Pandas/Polars to
work with dataframes
• New `Saga' package providing tokenizers and NLP functionnalities
(e.g. Ngram models)
• Support for symbolic shapes and lazy views in Nx
• Support for new and machine-learning-specific data types, including
boolean, bfloat16, complex16, float8, etc.
• Support for forward mode differenciation through `Rune.jvp'
• Support for automatic vectorization through `Rune.vmap'
• Addition of a complete linear algebra suite in Nx

And, of course, since it is the theme of the FunOCaml workshop:
*addition of transformers blocks in Kaun to train large language
models.*

All of these features are currently in-progress in Raven’s repository,
ranging from ready-to-release (e.g. Talon) to prototyping (e.g. Kaun's
transformers), but we’re aiming for a release with all of the above
mid-september.

### Call for Contributions

If you were looking to contribute to Raven, now’s probably a really
good time! There’s going to be a lot of activity in the coming weeks,
and the repository is in good shape for first-time-contributors, with
a lot of good first issues: we’ve just landed a *complete linear
algebra suite* that’s ~80% working, which makes for the perfect set of
starter issues: failing tests that need fixing.

• *15 failing tests on the native backend*
• *35 on the C backend*

These range from implementing frontend operations using our new
backend ops, to investigating bugs in the newly added linear algebra
functions. Pick a test, fix it, open a PR!

Getting Started
╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌

┌────
│ git clone https://github.com/raven-ml/raven
│ dune pkg lock
│ dune build @nx/runtest
└────

If you’re interested in contributing, don’t hesitate to reach out as
well, I’m happy to give pointers and show you around the codebase.

Hoping you’re as excited about the upcoming release as I am - Happy
Hacking!

Outreachy Demo Day August 2025
══════════════════════════════

Archive:
<https://discuss.ocaml.org/t/outreachy-demo-day-august-2025/17167/1>

Patrick Ferris announced
────────────────────────

It is my pleasure to announce this Friday [date=2025-08-29
time=10:00:00 timezone="UTC"] we will host the Outreachy Demo
presentation. We invite all of the OCaml community and beyond to join
us in celebrating the hard work of the community’s two interns who
have been working on:

• [Claudius]: /A fantasy-console style graphics library for OCaml/
• [Dune]: /Extending dune to discover system information/

We’ll post the meeting link closer to the time. Hopefully see you
there! :camel:

[Claudius] <https://github.com/claudiusFX/Claudius>

[Dune] <https://github.com/ocaml/dune>

Other OCaml News
════════════════

From the ocaml.org blog
───────────────────────

Here are links from many OCaml blogs aggregated at [the ocaml.org
blog].

• [Presenting our Ecology of the Internet ideas at Aarhus 2025]
• [Upcoming OCaml Events]
• [Internship Report: Refactoring Tools Coming to Merlin]
• [An OCaml MCP server]
• [Week 33]
• [Streaming Binary Data in Mollymawk]
• [mlgpx is the first Tangled-hosted package available on opam]

[the ocaml.org blog] <https://ocaml.org/blog/>

[Presenting our Ecology of the Internet ideas at Aarhus 2025]
<https://anil.recoil.org/notes/ecology-at-aarhus>

[Upcoming OCaml Events] <https://ocaml.org/events>

[Internship Report: Refactoring Tools Coming to Merlin]
<https://tarides.com/blog/2025-08-20-internship-report-refactoring-tools-coming-to-merlin>

[An OCaml MCP server]
<https://jon.recoil.org/blog/2025/08/ocaml-mcp-server.html>

[Week 33] <https://jon.recoil.org/blog/2025/08/week33.html>

[Streaming Binary Data in Mollymawk]
<https://blog.robur.coop/articles/streaming-binaries-mollymawk.html>

[mlgpx is the first Tangled-hosted package available on opam]
<https://anil.recoil.org/notes/tangled-and-ci>

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: 35585 bytes --]