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: Shon announced ────────────── Tacit 1.0.0 - Combinators! ══════════════════════════ Archive: 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: here is the repository: Slipshow! ═════════ Archive: 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] [Slipshow] Version 0.6.0: The King’s Slipshow ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ This release focuses on one specific feature: the speaker view. (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: 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] [claudius-examples] New release of UnionFind ════════════════════════ Archive: 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] Bogue, the OCaml GUI ════════════════════ Archive: 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] [opam] [i18n API] Dune 3.20 ═════════ Archive: 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] 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 )' 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: 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: 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: 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: 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] [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] [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] 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] [the archive] [RSS feed of the archives] [caml-list] [Alan Schmitt]