OCaml Weekly News
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
andnvrtc
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
Shon announced
Tacit 1.0.0 - Combinators!
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!
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!
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:
Claudius is now available in opam! 🎉
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
New release of UnionFind
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.
Bogue, the OCaml GUI
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!
Dune 3.20
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.
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 dodune 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 asdune build @runtest-name_of_lib
. (#11109, partially fixes #10239, @Alizter) - feature:
$ dune subst
use version fromdune-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 inmelange.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 onbyte
(fixes #12243, #12242, @vouillon and @Alizter) - Fix the interpretation of paths in
dune runtest
when running from within a subdirectory. (#12251, fixes #12250, @Alizter)
- Fix
- 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
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
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.
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:
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
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:
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.