Attn: Development Editor, Latest OCaml Weekly News

Alan Schmitt <[email protected]> Tue, 03 Feb 2026 11:04:52 +0100
Newsgroups gmane.comp.lang.caml.inria
Message-ID <[email protected]>
--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello

Here is the latest OCaml Weekly News, for the week of January 27 to
February 03, 2026.

Table of Contents
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80

Ofortune!
OUPS meetup february 2026
shakuhachi v0.2.0
OCaml security grants
New release of Menhir (20260122)
OCaml for Industry
Mset 0.2.0 - new library for small multisets
Lwt.6.1.0, Lwt_ppx.6.1.0
Other OCaml News
Old CWN


Ofortune!
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90

  Archive: <https://discuss.ocaml.org/t/ann-ofortune/17744/1>


Tim ats announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80

  Hi everyone,

  I'm very glad to announce the release of [Ofortune]! Ofortune is a
  fortune-teller written in OCaml. For those who didn't know, `fortune'
  is a small NetBSD utility which, according to its [man page], "prints
  a random, hopefully interesting, adage".

  <https://us1.discourse-cdn.com/flex020/uploads/ocaml/original/2X/c/ced911=
b15beffb91c8d906e073eef707bb722f2b.gif>

  Even though the goal of Ofortune is not to behave exactly like the
  legacy implementation, it shares most of the same command-line
  flags. By default, Ofortune searches fortune files in the directory
  `/usr/share/games/fortune', but you may directly set the files used to
  pick a random fortune (with eventually an associated probability) by
  doing the following `ofortune 60% quotations 40% funny-quotations'.

  I think that ofortune is one of those software programs that is
  moderately interesting unless you give it an excellent database to
  work with, so feel free to write your own cookie files. Your can for
  you can place it in your bashrc file to display a random quote each
  time you open a terminal.

  Ofortune is written in dependance free OCaml > 5.4. To install it,
  type (this will install an executable named `ofortune' in your path):
  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 git clone https://git.sr.ht/~tim-ats-d/ofortune && cd ofortune =
&& make native && install -T ofortune_unix.native /bin/ofortune
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  An online version compiled with js_of_ocaml is available at this
  address: <https://site.condor-du-plateau.fr/ofortune-web.html>.

  Ofortune is distributed under the LGPL-3.0 license, and the source
  code is available [here].


[Ofortune] <https://git.sr.ht/~tim-ats-d/ofortune>

[man page] <https://man.freebsd.org/cgi/man.cgi?query=3Dfortune>

[here] <https://git.sr.ht/~tim-ats-d/ofortune>


OUPS meetup february 2026
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/oups-meetup-february-2026/17748/1>


ancolie announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80

  The next OUPS meetup will take place on *Wednesday, 25th of February*
  2026. It will start at *6:30pm* at the *4 place Jussieu* in Paris. It
  will be in the in the *Esclangon building* (amphi Astier).

  Please, *[register on meetup ]* as soon as possible to let us know how
  many pizza we should order.

  For more details, you may check the [OUPS=E2=80=99 website ].

  Moreover, we=E2=80=99d like to announce that the organizing team moved to=
 the
  [OCaml Zulip]. Feel free to contact us there if you=E2=80=99d like to sug=
gest
  talks.

  =E2=80=94

  This time we=E2=80=99ll have the following talks:

  *Coccinelle, for C and for Rust =E2=80=93 Julia Lawall*

        Coccinelle is a tool for automating complex repetitive
        searches and transformations in source code. It was
        originally developed for the C language, targetting the
        Linux kernel, but we have recently started working on
        Rust. This talk will give an overview of Coccinelle
        targeting C, present the main design decisions and how
        they translate to Rust, and present some practical
        examples involving Rust. Both versions of Coccinelle are
        available in open source.

        =E2=80=A2 <https://coccinelle.gitlabpages.inria.fr/website/>
        =E2=80=A2 <https://rust-for-linux.com/coccinelle-for-rust>

  *OCaml and the MOPSA static analysis platform =E2=80=93 Marco Milanese*

        In this talk we present MOPSA, a static analysis platform
        built in OCaml: MOPSA implements a sound analysis (based
        on the theory of abstract interpretation), with an
        emphasis on reusability and modularity of abstractions.

        To this end each domain performs a simple, targeted,
        simplification of the program and it can be swapped or
        combined with other domains to tune the
        precision/performance tradeoff of the analysis.  OCaml and
        its type and module systems play a crucial role to achieve
        this goal.. we will see how monads, modules and abstract
        data types (and more!) naturally describe the components
        of a static analysis tool.

  =E2=80=94

  After the talks there will be some pizzas offered by the [OCaml
  Software Foundation] and later on we=E2=80=99ll move to a pub nearby as u=
sual.


[register on meetup ]
<https://www.meetup.com/fr-FR/ocaml-paris/events/313097450>

[OUPS=E2=80=99 website ] <https://oups.frama.io>

[OCaml Zulip] <https://ocaml.zulipchat.com>

[OCaml Software Foundation] <https://ocaml-sf.org>


shakuhachi v0.2.0
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90

  Archive: <https://discuss.ocaml.org/t/ann-shakuhachi-v0-2-0/17751/1>


EruEri announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  I'm happy to announce the release [shakuhachi v0.2.0].  Shakuhachi is
  a music collection manager. It aims to be a rather simple collection
  manager extensible by plugins.

  This release is mostly a bug-fix release, but some new functions are
  exposed through its API.

  Sincerely yours.


[shakuhachi v0.2.0]
<https://codeberg.org/EruEri/shakuhachi/releases/tag/0.2.0>


OCaml security grants
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  Archive: <https://discuss.ocaml.org/t/ocaml-security-grants/17754/1>


Hannes Mehnert announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  Dear OCaml hackers,

  we're pleased to announce that there are grants (up to 100_000 EUR)
  available for the broad topic of OCaml and security. The main idea is
  to strengthen the OCaml ecosystem in terms of security - being it
  tooling, documentation, guides, =E2=80=A6.

  Your submitted proposal (until March 1st) will be reviewed by the
  OCaml security team (<https://ocaml.org/security>). This wouldn't be
  possible with the OCSF (<https://ocaml-sf.org/>) and their sponsors.

  If you have an idea, please go to
  <https://cryptpad.fr/form/#/2/form/view/ozl80ZB3ndLhMcGeu0buygGOIwZWL6+dx=
bPuXgT+Wxs/>
  and submit your proposal.


  Thanks,

  Hannes (in the name of the OCaml security team)


New release of Menhir (20260122)
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/ann-new-release-of-menhir-20260122/17764/1>


Fran=C3=A7ois Pottier announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80

  I am pleased to announce a new version of Menhir.

  =E2=94=8C=E2=94=80=E2=94=80=E2=94=80=E2=94=80
  =E2=94=82 opam update && opam install menhir.20260122
  =E2=94=94=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  The main new feature is a brand new GLR back-end. This back-end is
  selected by the command line switch `--GLR'. GLR is a
  non-deterministic parsing algorithm; it is useful when the grammar
  lies outside the class LR(1), either because the grammar is
  unambiguous but requires more than one token of lookahead, or because
  the grammar is truly ambiguous. For more information on GLR, please
  [read the manual].

  There are also many minor changes in this release; please see [the
  change log] for details.

  Happy parsing,

  Fran=C3=A7ois.


[read the manual]
<https://cambium.inria.fr/~fpottier/menhir/manual.html#sec92>

[the change log]
<https://gitlab.inria.fr/fpottier/menhir/-/blob/master/CHANGES.md?ref_type=
=3Dheads>


OCaml for Industry
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90

  Archive: <https://discuss.ocaml.org/t/ann-ocaml-for-industry/17766/1>


Nicolas Ojeda Bar announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80=E2=94=80

  Dear community,

  This Friday, Feb 6 at 15:00-17:00 CET the OCSF is organizing a video
  call in collaboration with Tarides and OCamlPro to discuss all aspects
  of OCaml relevant to __industrial__ users. We have invited all OCSF
  sponsors to participate, but would be very happy to welcome other
  industrial users (who are not currently OCSF sponsors) if they want to
  participate.

  So, if you are an industrial user of OCaml and would like to
  participate, please get in touch and I will forward the meeting
  details.

  Thanks!

  Cheers, Nicolas


Mset 0.2.0 - new library for small multisets
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/mset-0-2-0-new-library-for-small-multisets/1=
7769/1>


Jean Christophe Filliatre announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80

  Dear OCaml community,

  I=E2=80=99m pleased to announce the first release of `mset', a library th=
at
  implements multisets as soon as they are small enough to fit inside a
  single `int' (as a bitset).

  It is available via `opam' and here at GitHub:

  =E2=80=A2 [https://github.com/backtracking/mset]
  =E2=80=A2 [documentation]

  I implemented this library as part of a project to [count anagrams]
  but I anticipate it might be useful for other purposes.

  Happy hacking,

  Jean-Christophe


[https://github.com/backtracking/mset]
<https://github.com/backtracking/mset>

[documentation]
<https://backtracking.github.io/mset/mset/Mset/index.html>

[count anagrams]
<https://github.com/backtracking/ocaml-bazaar/blob/main/count_anagrams.ml>


Lwt.6.1.0, Lwt_ppx.6.1.0
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=
=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

  Archive:
  <https://discuss.ocaml.org/t/ann-lwt-6-1-0-lwt-ppx-6-1-0/17770/1>


Rapha=C3=ABl Proust announced
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

  *Lwt.6.1.0* has been release. It contains some fixes (see full
   [changelog], special thanks to @kit-ty-kate and @otini) as well as
   the following notable addition:

  =E2=80=A2 New `Lwt_engine.engine_id' to know what underlying engine Lwt is
    currently using.

  *Lwt_ppx.6.1.0* (also *Lwt_ppx.5.9.3*) has been released. It contains
   a fix to correctly carry type annotations: `let%lwt x : t =3D =E2=80=A6 =
in =E2=80=A6'
   now produces code that correctly place the `t' annotation. (This was
   caused by a change in ppxlib which was not accounted for previously.)

  Versions 6.0.0 and 5.9.2 or lwt_ppx are marked as `avoid-version' in
  opam-repository. They are fine to use as long as you don't use type
  annotations but you should update to 6.1.0 or 5.9.3.

  Special thanks to @Halbaroth for the bug report.


[changelog]
<https://github.com/ocsigen/lwt/blob/661646e40639298dde11834cfd3575b6ead2ca=
dc/CHANGES#L1>


Other OCaml News
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=
=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

>From the ocaml.org blog
=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=
=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=
=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80=E2=94=80

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

  =E2=80=A2 [My (very) fast zero-allocation webserver using OxCaml]
  =E2=80=A2 [Weeknotes for weeks 4-5]
  =E2=80=A2 [What Happened in January 2026?]
  =E2=80=A2 [ OCaml.org Now Uses `odoc' 3: What=E2=80=99s New?]
  =E2=80=A2 [Getting Claude to complete the spec]


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

[My (very) fast zero-allocation webserver using OxCaml]
<https://anil.recoil.org/notes/oxcaml-httpz>

[Weeknotes for weeks 4-5]
<https://jon.recoil.org/blog/2026/01/weeknotes-2026-04-05.html>

[What Happened in January 2026?]
<https://soap.coffee/~lthms/posts/january-2026.html>

[ OCaml.org Now Uses `odoc' 3: What=E2=80=99s New?]
<https://tarides.com/blog/2026-01-29-ocaml-org-now-uses-odoc-3-what-s-new>

[Getting Claude to complete the spec]
<https://www.tunbury.org/2026/01/28/claude-spec/>


Old CWN
=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90=E2=95=90

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


--=-=-=
Content-Type: text/html; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

<?xml version=3D"1.0" encoding=3D"utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns=3D"http://www.w3.org/1999/xhtml" lang=3D"en" xml:lang=3D"en">
<head>
<!-- 2026-02-03 Tue 11:04 -->
<meta http-equiv=3D"Content-Type" content=3D"text/html;charset=3Dutf-8" />
<meta name=3D"viewport" content=3D"width=3Ddevice-width, initial-scale=3D1"=
 />
<title>OCaml Weekly News</title>
<meta name=3D"generator" content=3D"Org Mode" />
<style type=3D"text/css">
  #content { max-width: 60em; margin: auto; }
  .title  { text-align: center;
             margin-bottom: .2em; }
  .subtitle { text-align: center;
              font-size: medium;
              font-weight: bold;
              margin-top:0; }
  .todo   { font-family: monospace; color: red; }
  .done   { font-family: monospace; color: green; }
  .priority { font-family: monospace; color: orange; }
  .tag    { background-color: #eee; font-family: monospace;
            padding: 2px; font-size: 80%; font-weight: normal; }
  .timestamp { color: #bebebe; }
  .timestamp-kwd { color: #5f9ea0; }
  .org-right  { margin-left: auto; margin-right: 0px;  text-align: right; }
  .org-left   { margin-left: 0px;  margin-right: auto; text-align: left; }
  .org-center { margin-left: auto; margin-right: auto; text-align: center; }
  .underline { text-decoration: underline; }
  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
  p.verse { margin-left: 3%; }
  pre {
    border: 1px solid #e6e6e6;
    border-radius: 3px;
    background-color: #f2f2f2;
    padding: 8pt;
    font-family: monospace;
    overflow: auto;
    margin: 1.2em;
  }
  pre.src {
    position: relative;
    overflow: auto;
  }
  pre.src:before {
    display: none;
    position: absolute;
    top: -8px;
    right: 12px;
    padding: 3px;
    color: #555;
    background-color: #f2f2f299;
  }
  pre.src:hover:before { display: inline; margin-top: 14px;}
  /* Languages per Org manual */
  pre.src-asymptote:before { content: 'Asymptote'; }
  pre.src-awk:before { content: 'Awk'; }
  pre.src-authinfo::before { content: 'Authinfo'; }
  pre.src-c:before { content: 'C'; }
  pre.src-C:before { content: 'C'; }
  /* pre.src-C++ doesn't work in CSS */
  pre.src-clojure:before { content: 'Clojure'; }
  pre.src-css:before { content: 'CSS'; }
  pre.src-D:before { content: 'D'; }
  pre.src-ditaa:before { content: 'ditaa'; }
  pre.src-dot:before { content: 'Graphviz'; }
  pre.src-calc:before { content: 'Emacs Calc'; }
  pre.src-emacs-lisp:before { content: 'Emacs Lisp'; }
  pre.src-fortran:before { content: 'Fortran'; }
  pre.src-gnuplot:before { content: 'gnuplot'; }
  pre.src-haskell:before { content: 'Haskell'; }
  pre.src-hledger:before { content: 'hledger'; }
  pre.src-java:before { content: 'Java'; }
  pre.src-js:before { content: 'JavaScript'; }
  pre.src-latex:before { content: 'LaTeX'; }
  pre.src-ledger:before { content: 'Ledger'; }
  pre.src-lisp:before { content: 'Lisp'; }
  pre.src-lilypond:before { content: 'Lilypond'; }
  pre.src-lua:before { content: 'Lua'; }
  pre.src-matlab:before { content: 'MATLAB'; }
  pre.src-mscgen:before { content: 'Mscgen'; }
  pre.src-ocaml:before { content: 'Objective Caml'; }
  pre.src-octave:before { content: 'Octave'; }
  pre.src-org:before { content: 'Org mode'; }
  pre.src-oz:before { content: 'OZ'; }
  pre.src-plantuml:before { content: 'Plantuml'; }
  pre.src-processing:before { content: 'Processing.js'; }
  pre.src-python:before { content: 'Python'; }
  pre.src-R:before { content: 'R'; }
  pre.src-ruby:before { content: 'Ruby'; }
  pre.src-sass:before { content: 'Sass'; }
  pre.src-scheme:before { content: 'Scheme'; }
  pre.src-screen:before { content: 'Gnu Screen'; }
  pre.src-sed:before { content: 'Sed'; }
  pre.src-sh:before { content: 'shell'; }
  pre.src-sql:before { content: 'SQL'; }
  pre.src-sqlite:before { content: 'SQLite'; }
  /* additional languages in org.el's org-babel-load-languages alist */
  pre.src-forth:before { content: 'Forth'; }
  pre.src-io:before { content: 'IO'; }
  pre.src-J:before { content: 'J'; }
  pre.src-makefile:before { content: 'Makefile'; }
  pre.src-maxima:before { content: 'Maxima'; }
  pre.src-perl:before { content: 'Perl'; }
  pre.src-picolisp:before { content: 'Pico Lisp'; }
  pre.src-scala:before { content: 'Scala'; }
  pre.src-shell:before { content: 'Shell Script'; }
  pre.src-ebnf2ps:before { content: 'ebfn2ps'; }
  /* additional language identifiers per "defun org-babel-execute"
       in ob-*.el */
  pre.src-cpp:before  { content: 'C++'; }
  pre.src-abc:before  { content: 'ABC'; }
  pre.src-coq:before  { content: 'Coq'; }
  pre.src-groovy:before  { content: 'Groovy'; }
  /* additional language identifiers from org-babel-shell-names in
     ob-shell.el: ob-shell is the only babel language using a lambda to put
     the execution function name together. */
  pre.src-bash:before  { content: 'bash'; }
  pre.src-csh:before  { content: 'csh'; }
  pre.src-ash:before  { content: 'ash'; }
  pre.src-dash:before  { content: 'dash'; }
  pre.src-ksh:before  { content: 'ksh'; }
  pre.src-mksh:before  { content: 'mksh'; }
  pre.src-posh:before  { content: 'posh'; }
  /* Additional Emacs modes also supported by the LaTeX listings package */
  pre.src-ada:before { content: 'Ada'; }
  pre.src-asm:before { content: 'Assembler'; }
  pre.src-caml:before { content: 'Caml'; }
  pre.src-delphi:before { content: 'Delphi'; }
  pre.src-html:before { content: 'HTML'; }
  pre.src-idl:before { content: 'IDL'; }
  pre.src-mercury:before { content: 'Mercury'; }
  pre.src-metapost:before { content: 'MetaPost'; }
  pre.src-modula-2:before { content: 'Modula-2'; }
  pre.src-pascal:before { content: 'Pascal'; }
  pre.src-ps:before { content: 'PostScript'; }
  pre.src-prolog:before { content: 'Prolog'; }
  pre.src-simula:before { content: 'Simula'; }
  pre.src-tcl:before { content: 'tcl'; }
  pre.src-tex:before { content: 'TeX'; }
  pre.src-plain-tex:before { content: 'Plain TeX'; }
  pre.src-verilog:before { content: 'Verilog'; }
  pre.src-vhdl:before { content: 'VHDL'; }
  pre.src-xml:before { content: 'XML'; }
  pre.src-nxml:before { content: 'XML'; }
  /* add a generic configuration mode; LaTeX export needs an additional
     (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */
  pre.src-conf:before { content: 'Configuration File'; }

  table { border-collapse:collapse; }
  caption.t-above { caption-side: top; }
  caption.t-bottom { caption-side: bottom; }
  td, th { vertical-align:top;  }
  th.org-right  { text-align: center;  }
  th.org-left   { text-align: center;   }
  th.org-center { text-align: center; }
  td.org-right  { text-align: right;  }
  td.org-left   { text-align: left;   }
  td.org-center { text-align: center; }
  dt { font-weight: bold; }
  .footpara { display: inline; }
  .footdef  { margin-bottom: 1em; }
  .figure { padding: 1em; }
  .figure p { text-align: center; }
  .equation-container {
    display: table;
    text-align: center;
    width: 100%;
  }
  .equation {
    vertical-align: middle;
  }
  .equation-label {
    display: table-cell;
    text-align: right;
    vertical-align: middle;
  }
  .inlinetask {
    padding: 10px;
    border: 2px solid gray;
    margin: 10px;
    background: #ffffcc;
  }
  #org-div-home-and-up
   { text-align: right; font-size: 70%; white-space: nowrap; }
  textarea { overflow-x: auto; }
  .linenr { font-size: smaller }
  .code-highlighted { background-color: #ffff00; }
  .org-info-js_info-navigation { border-style: none; }
  #org-info-js_console-label
    { font-size: 10px; font-weight: bold; white-space: nowrap; }
  .org-info-js_search-highlight
    { background-color: #ffff00; color: #000000; font-weight: bold; }
  .org-svg { }
</style>
<style type=3D"text/css">#table-of-contents h2 { display: none } .title { d=
isplay: none } .authorname { text-align: right }</style>
<style type=3D"text/css">.outline-2 {border-top: 1px solid black;}</style>
</head>
<body>
<div id=3D"content" class=3D"content">
<h1 class=3D"title">OCaml Weekly News</h1>
<p>
<a href=3D"https://alan.petitepomme.net/cwn/2026.01.27.html">Previous Week<=
/a> <a href=3D"https://alan.petitepomme.net/cwn/index.html">Up</a> <a href=
=3D"https://alan.petitepomme.net/cwn/2026.02.10.html">Next Week</a>
</p>

<p>
Hello
</p>

<p>
Here is the latest OCaml Weekly News, for the week of January 27 to Februar=
y 03, 2026.
</p>

<div id=3D"table-of-contents" role=3D"doc-toc">
<h2>Table of Contents</h2>
<div id=3D"text-table-of-contents" role=3D"doc-toc">
<ul>
<li><a href=3D"#1">Ofortune!</a></li>
<li><a href=3D"#2">OUPS meetup february 2026</a></li>
<li><a href=3D"#3">shakuhachi v0.2.0</a></li>
<li><a href=3D"#4">OCaml security grants</a></li>
<li><a href=3D"#5">New release of Menhir (20260122)</a></li>
<li><a href=3D"#6">OCaml for Industry</a></li>
<li><a href=3D"#7">Mset 0.2.0 - new library for small multisets</a></li>
<li><a href=3D"#8">Lwt.6.1.0, Lwt_ppx.6.1.0</a></li>
<li><a href=3D"#9">Other OCaml News</a></li>
<li><a href=3D"#org6fee936">Old CWN</a></li>
</ul>
</div>
</div>
<div id=3D"outline-container-1" class=3D"outline-2">
<h2 id=3D"1">Ofortune!</h2>
<div class=3D"outline-text-2" id=3D"text-1">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-ofortune/17744/1">https=
://discuss.ocaml.org/t/ann-ofortune/17744/1</a>
</p>
</div>
<div id=3D"outline-container-org67cdee1" class=3D"outline-3">
<h3 id=3D"org67cdee1">Tim ats announced</h3>
<div class=3D"outline-text-3" id=3D"text-org67cdee1">
<p>
Hi everyone,
</p>

<p>
I'm very glad to announce the release of <a href=3D"https://git.sr.ht/~tim-=
ats-d/ofortune">Ofortune</a>! Ofortune is a fortune-teller written in OCaml=
. For those who didn't know, <code>fortune</code> is a small NetBSD utility=
 which, according to its <a href=3D"https://man.freebsd.org/cgi/man.cgi?que=
ry=3Dfortune">man page</a>, "prints a random, hopefully interesting, adage".
</p>


<div id=3D"org71d4d48" class=3D"figure">
<p><img src=3D"https://us1.discourse-cdn.com/flex020/uploads/ocaml/original=
/2X/c/ced911b15beffb91c8d906e073eef707bb722f2b.gif" alt=3D"ced911b15beffb91=
c8d906e073eef707bb722f2b.gif" width=3D"80%" />
</p>
</div>

<p>
Even though the goal of Ofortune is not to behave exactly like the legacy i=
mplementation, it shares most of the same command-line flags. By default, O=
fortune searches fortune files in the directory <code>/usr/share/games/fort=
une</code>, but you may directly set the files used to pick a random fortun=
e (with eventually an associated probability) by doing the following <code>=
ofortune 60% quotations 40% funny-quotations</code>.
</p>

<p>
I think that ofortune is one of those software programs that is moderately =
interesting unless you give it an excellent database to work with, so feel =
free to write your own cookie files. Your can for you can place it in your =
bashrc file to display a random quote each time you open a terminal.
</p>

<p>
Ofortune is written in dependance free OCaml &gt; 5.4. To install it, type =
(this will install an executable named <code>ofortune</code>  in your path):
</p>
<pre class=3D"example" id=3D"org0877a72">
git clone https://git.sr.ht/~tim-ats-d/ofortune &amp;&amp; cd ofortune &amp=
;&amp; make native &amp;&amp; install -T ofortune_unix.native /bin/ofortune
</pre>

<p>
An online version compiled with js_of_ocaml is available at this address: <=
a href=3D"https://site.condor-du-plateau.fr/ofortune-web.html">https://site=
.condor-du-plateau.fr/ofortune-web.html</a>.
</p>

<p>
Ofortune is distributed under the LGPL-3.0 license, and the source code is =
available <a href=3D"https://git.sr.ht/~tim-ats-d/ofortune">here</a>.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-2" class=3D"outline-2">
<h2 id=3D"2">OUPS meetup february 2026</h2>
<div class=3D"outline-text-2" id=3D"text-2">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/oups-meetup-february-2026/1=
7748/1">https://discuss.ocaml.org/t/oups-meetup-february-2026/17748/1</a>
</p>
</div>
<div id=3D"outline-container-orga3171fd" class=3D"outline-3">
<h3 id=3D"orga3171fd">ancolie announced</h3>
<div class=3D"outline-text-3" id=3D"text-orga3171fd">
<p>
The next OUPS meetup will take place on <b>Wednesday, 25th of February</b> =
2026. It will start at <b>6:30pm</b> at the <b>4 place Jussieu</b> in Paris=
. It will be in the in the <b>Esclangon building</b> (amphi Astier).
</p>

<p>
Please, <b><a href=3D"https://www.meetup.com/fr-FR/ocaml-paris/events/31309=
7450">register on meetup </a></b> as soon as possible to let us know how ma=
ny pizza we should order.
</p>

<p>
For more details, you may check the <a href=3D"https://oups.frama.io">OUPS=
=E2=80=99 website </a>.
</p>

<p>
Moreover, we=E2=80=99d like to announce that the organizing team moved to t=
he <a href=3D"https://ocaml.zulipchat.com">OCaml Zulip</a>. Feel free to co=
ntact us there if you=E2=80=99d like to suggest talks.
</p>

<p>
&mdash;
</p>

<p>
This time we=E2=80=99ll have the following talks:
</p>

<p>
<b>Coccinelle, for C and for Rust &ndash; Julia Lawall</b>
</p>

<blockquote>
<p>
Coccinelle is a tool for automating complex repetitive searches and transfo=
rmations in source code. It was originally developed for the C language, ta=
rgetting the Linux kernel, but we have recently started working on Rust. Th=
is talk will give an overview of Coccinelle targeting C, present the main d=
esign decisions and how they translate to Rust, and present some practical =
examples involving Rust. Both versions of Coccinelle are available in open =
source.
</p>

<ul class=3D"org-ul">
<li><a href=3D"https://coccinelle.gitlabpages.inria.fr/website/">https://co=
ccinelle.gitlabpages.inria.fr/website/</a></li>
<li><a href=3D"https://rust-for-linux.com/coccinelle-for-rust">https://rust=
-for-linux.com/coccinelle-for-rust</a></li>
</ul>
</blockquote>

<p>
<b>OCaml and the MOPSA static analysis platform &ndash; Marco Milanese</b>
</p>

<blockquote>
<p>
In this talk we present MOPSA, a static analysis platform built in OCaml: M=
OPSA implements a sound analysis (based on the theory of abstract interpret=
ation), with an emphasis on reusability and modularity of abstractions.
</p>

<p>
To this end each domain performs a simple, targeted, simplification of the =
program and it can be swapped or combined with other domains to tune the pr=
ecision/performance tradeoff of the analysis.
OCaml and its type and module systems play a crucial role to achieve this g=
oal.. we will see how monads, modules and abstract data types (and more!) n=
aturally describe the components of a static analysis tool.
</p>
</blockquote>

<p>
&mdash;
</p>

<p>
After the talks there will be some pizzas offered by the <a href=3D"https:/=
/ocaml-sf.org">OCaml Software Foundation</a> and later on we=E2=80=99ll mov=
e to a pub nearby as usual.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-3" class=3D"outline-2">
<h2 id=3D"3">shakuhachi v0.2.0</h2>
<div class=3D"outline-text-2" id=3D"text-3">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-shakuhachi-v0-2-0/17751=
/1">https://discuss.ocaml.org/t/ann-shakuhachi-v0-2-0/17751/1</a>
</p>
</div>
<div id=3D"outline-container-org0c63317" class=3D"outline-3">
<h3 id=3D"org0c63317">EruEri announced</h3>
<div class=3D"outline-text-3" id=3D"text-org0c63317">
<p>
I'm happy to announce the release <a href=3D"https://codeberg.org/EruEri/sh=
akuhachi/releases/tag/0.2.0">shakuhachi v0.2.0</a>.=20=20
Shakuhachi is a music collection manager. It aims to be a rather simple col=
lection manager extensible by plugins.
</p>

<p>
This release is mostly a bug-fix release, but some new functions are expose=
d through its API.
</p>

<p>
Sincerely yours.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-4" class=3D"outline-2">
<h2 id=3D"4">OCaml security grants</h2>
<div class=3D"outline-text-2" id=3D"text-4">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ocaml-security-grants/17754=
/1">https://discuss.ocaml.org/t/ocaml-security-grants/17754/1</a>
</p>
</div>
<div id=3D"outline-container-orgc9631bc" class=3D"outline-3">
<h3 id=3D"orgc9631bc">Hannes Mehnert announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgc9631bc">
<p>
Dear OCaml hackers,
</p>

<p>
we're pleased to announce that there are grants (up to 100_000 EUR) availab=
le for the broad topic of OCaml and security. The main idea is to strengthe=
n the OCaml ecosystem in terms of security - being it tooling, documentatio=
n, guides, &hellip;.
</p>

<p>
Your submitted proposal (until March 1st) will be reviewed by the OCaml sec=
urity team (<a href=3D"https://ocaml.org/security">https://ocaml.org/securi=
ty</a>). This wouldn't be possible with the OCSF (<a href=3D"https://ocaml-=
sf.org/">https://ocaml-sf.org/</a>) and their sponsors.
</p>

<p>
If you have an idea, please go to <a href=3D"https://cryptpad.fr/form/#/2/f=
orm/view/ozl80ZB3ndLhMcGeu0buygGOIwZWL6+dxbPuXgT+Wxs/">https://cryptpad.fr/=
form/#/2/form/view/ozl80ZB3ndLhMcGeu0buygGOIwZWL6+dxbPuXgT+Wxs/</a> and sub=
mit your proposal.
</p>


<p>
Thanks,
</p>

<p>
Hannes (in the name of the OCaml security team)
</p>
</div>
</div>
</div>
<div id=3D"outline-container-5" class=3D"outline-2">
<h2 id=3D"5">New release of Menhir (20260122)</h2>
<div class=3D"outline-text-2" id=3D"text-5">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-new-release-of-menhir-2=
0260122/17764/1">https://discuss.ocaml.org/t/ann-new-release-of-menhir-2026=
0122/17764/1</a>
</p>
</div>
<div id=3D"outline-container-orgc288eb4" class=3D"outline-3">
<h3 id=3D"orgc288eb4">Fran=C3=A7ois Pottier announced</h3>
<div class=3D"outline-text-3" id=3D"text-orgc288eb4">
<p>
I am pleased to announce a new version of Menhir.
</p>

<pre class=3D"example" id=3D"orgeecf32d">
opam update &amp;&amp; opam install menhir.20260122
</pre>

<p>
The main new feature is a brand new GLR back-end. This back-end is selected=
 by the command line switch <code>--GLR</code>. GLR is a non-deterministic =
parsing algorithm; it is useful when the grammar lies outside the class LR(=
1), either because the grammar is unambiguous but requires more than one to=
ken of lookahead, or because the grammar is truly ambiguous. For more infor=
mation on GLR, please <a href=3D"https://cambium.inria.fr/~fpottier/menhir/=
manual.html#sec92">read the manual</a>.
</p>

<p>
There are also many minor changes in this release; please see <a href=3D"ht=
tps://gitlab.inria.fr/fpottier/menhir/-/blob/master/CHANGES.md?ref_type=3Dh=
eads">the change log</a> for details.
</p>

<p>
Happy parsing,
</p>

<p>
Fran=C3=A7ois.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-6" class=3D"outline-2">
<h2 id=3D"6">OCaml for Industry</h2>
<div class=3D"outline-text-2" id=3D"text-6">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-ocaml-for-industry/1776=
6/1">https://discuss.ocaml.org/t/ann-ocaml-for-industry/17766/1</a>
</p>
</div>
<div id=3D"outline-container-org0b8592c" class=3D"outline-3">
<h3 id=3D"org0b8592c">Nicolas Ojeda Bar announced</h3>
<div class=3D"outline-text-3" id=3D"text-org0b8592c">
<p>
Dear community,
</p>

<p>
This Friday, Feb 6 at 15:00-17:00 CET the OCSF is organizing a video call i=
n collaboration with Tarides and OCamlPro to discuss all aspects of OCaml r=
elevant to <span class=3D"underline"><span class=3D"underline">industrial</=
span></span> users. We have invited all OCSF sponsors to participate, but w=
ould be very happy to welcome other industrial users (who are not currently=
 OCSF sponsors) if they want to participate.
</p>

<p>
So, if you are an industrial user of OCaml and would like to participate, p=
lease get in touch and I will forward the meeting details.
</p>

<p>
Thanks!
</p>

<p>
Cheers,
Nicolas
</p>
</div>
</div>
</div>
<div id=3D"outline-container-7" class=3D"outline-2">
<h2 id=3D"7">Mset 0.2.0 - new library for small multisets</h2>
<div class=3D"outline-text-2" id=3D"text-7">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/mset-0-2-0-new-library-for-=
small-multisets/17769/1">https://discuss.ocaml.org/t/mset-0-2-0-new-library=
-for-small-multisets/17769/1</a>
</p>
</div>
<div id=3D"outline-container-org630c89a" class=3D"outline-3">
<h3 id=3D"org630c89a">Jean Christophe Filliatre announced</h3>
<div class=3D"outline-text-3" id=3D"text-org630c89a">
<p>
Dear OCaml community,
</p>

<p>
I=E2=80=99m pleased to announce the first release of <code>mset</code>, a l=
ibrary that implements multisets as soon as they are small enough to fit in=
side a single <code>int</code> (as a bitset).
</p>

<p>
It is available via <code>opam</code> and here at GitHub:
</p>

<ul class=3D"org-ul">
<li><a href=3D"https://github.com/backtracking/mset">https://github.com/bac=
ktracking/mset</a></li>
<li><a href=3D"https://backtracking.github.io/mset/mset/Mset/index.html">do=
cumentation</a></li>
</ul>

<p>
I implemented this library as part of a project to <a href=3D"https://githu=
b.com/backtracking/ocaml-bazaar/blob/main/count_anagrams.ml">count anagrams=
</a> but I anticipate it might be useful for other purposes.
</p>

<p>
Happy hacking,
</p>

<p>
Jean-Christophe
</p>
</div>
</div>
</div>
<div id=3D"outline-container-8" class=3D"outline-2">
<h2 id=3D"8">Lwt.6.1.0, Lwt_ppx.6.1.0</h2>
<div class=3D"outline-text-2" id=3D"text-8">
<p>
Archive: <a href=3D"https://discuss.ocaml.org/t/ann-lwt-6-1-0-lwt-ppx-6-1-0=
/17770/1">https://discuss.ocaml.org/t/ann-lwt-6-1-0-lwt-ppx-6-1-0/17770/1</=
a>
</p>
</div>
<div id=3D"outline-container-org41ed26b" class=3D"outline-3">
<h3 id=3D"org41ed26b">Rapha=C3=ABl Proust announced</h3>
<div class=3D"outline-text-3" id=3D"text-org41ed26b">
<p>
<b>Lwt.6.1.0</b> has been release. It contains some fixes (see full <a href=
=3D"https://github.com/ocsigen/lwt/blob/661646e40639298dde11834cfd3575b6ead=
2cadc/CHANGES#L1">changelog</a>, special thanks to @kit-ty-kate and @otini)=
 as well as the following notable addition:
</p>

<ul class=3D"org-ul">
<li>New <code>Lwt_engine.engine_id</code> to know what underlying engine Lw=
t is currently using.</li>
</ul>

<p>
<b>Lwt_ppx.6.1.0</b> (also <b>Lwt_ppx.5.9.3</b>) has been released. It cont=
ains a fix to correctly carry type annotations: <code>let%lwt x : t =3D =E2=
=80=A6 in =E2=80=A6</code> now produces code that correctly place the <code=
>t</code> annotation. (This was caused by a change in ppxlib which was not =
accounted for previously.)
</p>

<p>
Versions 6.0.0 and 5.9.2 or lwt_ppx are marked as <code>avoid-version</code=
> in opam-repository. They are fine to use as long as you don't use type an=
notations but you should update to 6.1.0 or 5.9.3.
</p>

<p>
Special thanks to @Halbaroth for the bug report.
</p>
</div>
</div>
</div>
<div id=3D"outline-container-9" class=3D"outline-2">
<h2 id=3D"9">Other OCaml News</h2>
<div class=3D"outline-text-2" id=3D"text-9">
</div>
<div id=3D"outline-container-org800f9b8" class=3D"outline-3">
<h3 id=3D"org800f9b8">From the ocaml.org blog</h3>
<div class=3D"outline-text-3" id=3D"text-org800f9b8">
<p>
Here are links from many OCaml blogs aggregated at <a href=3D"https://ocaml=
.org/blog/">the ocaml.org blog</a>.
</p>

<ul class=3D"org-ul">
<li><a href=3D"https://anil.recoil.org/notes/oxcaml-httpz">My (very) fast z=
ero-allocation webserver using OxCaml</a></li>
<li><a href=3D"https://jon.recoil.org/blog/2026/01/weeknotes-2026-04-05.htm=
l">Weeknotes for weeks 4-5</a></li>
<li><a href=3D"https://soap.coffee/~lthms/posts/january-2026.html">What Hap=
pened in January 2026?</a></li>
<li><a href=3D"https://tarides.com/blog/2026-01-29-ocaml-org-now-uses-odoc-=
3-what-s-new"> OCaml.org Now Uses <code>odoc</code> 3: What=E2=80=99s New?<=
/a></li>
<li><a href=3D"https://www.tunbury.org/2026/01/28/claude-spec/">Getting Cla=
ude to complete the spec</a></li>
</ul>
</div>
</div>
</div>
<div id=3D"outline-container-org6fee936" class=3D"outline-2">
<h2 id=3D"org6fee936">Old CWN</h2>
<div class=3D"outline-text-2" id=3D"text-org6fee936">
<p>
If you happen to miss a CWN, you can <a href=3D"mailto:alan.schmitt@polytec=
hnique.org">send me a message</a> and I'll mail it to you, or go take a loo=
k at <a href=3D"https://alan.petitepomme.net/cwn/">the archive</a> or the <=
a href=3D"https://alan.petitepomme.net/cwn/cwn.rss">RSS feed of the archive=
s</a>.
</p>

<p>
If you also wish to receive it every week by mail, you may subscribe to the=
 <a href=3D"https://sympa.inria.fr/sympa/info/caml-list">caml-list</a>.
</p>

<div class=3D"authorname" id=3D"orgb020adb">
<p>
<a href=3D"https://alan.petitepomme.net/">Alan Schmitt</a>
</p>

</div>
</div>
</div>
</div>
</body>
</html>


--=-=-=--