2025-12-23

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

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of December 16 to 23, 2025.

Camp, the Caml Amp

Andreas Rossberg announced

Happy to share "Camp", the Caml Amp — an old-school music player heavily inspired by good old Winamp, with a focus on decent music library and playlist handling.

I was fed up with Winamp being dead and lacking features I wanted, so I went into full-on nerd mode and implemented my own opinionated replacement, all in OCaml using the Raylib library:

https://mpi-sws.org/~rossberg/camp/

If you have not yet been sucked in by the streaming cartels, you might find it useful.

  • Runs on Windows, Mac, and Linux
  • Support for WAV, FLAC, MP3, OGG, QOA, MOD, and XM
  • Advanced music library management with many browse and search features
  • Elaborate playlist manipulation and query-based "smart" playlists
  • Animated user interface styled after hifi when it still looked good (no corners were rounded in the making of this app)

Enjoy, /Andreas

Ahrefs Grant Program for OCaml

Louis Roché announced

Ahrefs is excited to announce a new Ahrefs Grant Program for OCaml to support projects in the OCaml ecosystem. This effort comes in addition to the other sponsorships we do (such as the OCSF, the ICFP and Fun OCaml conferences, github sponsoring, and various other projects) We are allocating money to fund one or multiple initiatives that help advance OCaml and its tooling.

You can learn more about our engineering culture and opensource support work at https://ahrefs.com/tech

Call for Applications

We invite individuals, teams, and organizations working with OCaml to submit proposals for funding. Our goal is to support meaningful, practical improvements to the ecosystem, whether through new tools, libraries, infrastructure, education, or long‑term maintenance of existing projects.

Applications should be submitted through this google form.

The deadline for submissions is January 20th 2026.

What We Are Looking For

We welcome proposals that:

  • Strengthen the OCaml compiler or core libraries
  • Improve developer experience (tooling, documentation, debugging, profiling, packaging, …)
  • Expand the OCaml ecosystem through new libraries or modernization of key dependencies
  • Enhance reliability, performance, or safety of OCaml‑based systems
  • Support education, community infrastructure, or long‑term maintenance

Both small and large initiatives are welcome. We will prioritize projects that will have lasting impact and will be maintained.

The selection of proposal will necessarily be subjective and depend on our priorities and interests.

Funding

Applicants may request up to USD 50,000 in support per project. We may award a single project or distribute among several proposals.

How to Apply

Your application should follow the format below and be sent through this google form.

Please be short and to the point in your answers; focus primarily on the what and how, not so much on the why. If English isn't your first language, don't worry — our reviewers don't care about spelling errors, only about great ideas. You can be as technical as you need to be. Do stay specific.

  • 1. Contact Information
    • Name
    • Organization (if applicable)
    • Email address
    • Country
  • 2. General Project Information
    • Title
    • Abstract (up to 1200 characters) Explain the whole project and its expected outcome(s).
    • Yourself or the team (2500 characters) Who is participating? Have you been involved with similar or related projects? Please provide background information and describe your past contributions.
    • Website (if any)
    • License Under which license will the project be distributed? It must be an open source license.
  • 3. Requested Support
    • Requested Amount (up to USD 50,000)
    • Budget and Breakdown (up to 2500 characters) Explain what the budget will be used for. Are there other funding sources? Include a breakdown of tasks, estimated effort, and explicit rates.
    • Describe your project and its technical challenges (up to 5000 characters) What are significant technical challenges you expect to solve during the project, if any? Compare your own project with existing or historical efforts. E.g. what is new, more thorough or otherwise different.
    • Ecosystem and Outreach (up to 1200 characters) Describe the project ecosystem and how you will engage with relevant actors or promote the adoption.

Questions

If you have questions prior to submitting an application, feel free to reach out at grants@ahrefs.com.

We look forward to support the work that will move the OCaml ecosystem forward.

Call for Contributions: Caml in the Capital (Feb 26)

"Alistair O'Brien announced

Hey all 👋,

A quick follow-up on Caml in the Capital: the first meetup is now confirmed 🎉.

When: Thursday 26th February 2026, 6:30-8:30pm

Where: Imperial College London, Flowers Building

Thanks to everyone who helped settle on a date!

Call for contributions

We're still looking for presenters! Talks are workshop-style: anything from an accessible introduction of your work or research, a deep dive into your library, a live demo, or a tutorial.

If you'd like to give a talk, please message me or @giltho directly with:

  • A title
  • Short abstract
  • Expected time slot

Deadline: 1st February 2026

We've set a deadline so we have enough time to finalize the programme and handle the practical organisation (room setup, schedule, announcements, etc.).

Call for participation

You're very welcome to attend even if you're not presenting. If you plan to attend, please register here.

Many thanks to Imperial College for hosting us and OCaml Software Foundation for funding us!! :raised_hands:

Alistair & Sacha

Sacha Ayoun later added

If there are any additional questions on registration, organisation, logistics, feel free to ask questions in this thread, or in the [dedicated Zulip channel]( https://ocaml.zulipchat.com/#narrow/channel/553375-Caml-In-The-Capital) 🙂

Dream – looking for maintainers to take ownership

Anton Bachin announced

Dream, the Web framework, is looking for a maintenance team!

I originally wrote Dream in 2021, and actively maintained it for several years. It has gotten many great contributions from other authors since its first release, for which I am very grateful!

At the present time, I am no longer in a position to sustainably maintain Dream. I'd like to yield it to one or several maintainers, who would have the ability to pursue their vision, bring their ideas, credibly seek funding for work that substantially affects it, and cite it on their resume or elsewhere. In other words, to take ownership of it. I would stay on in an advisory role, to transfer knowledge, help negotiate, and assist in various ways, as a volunteer.

We've already been having Dream community development meetings over on Discord since August, which have been very helpful. Last month, I transferred Dream to an org on GitHub. It's ready for the next step :slight_smile:

Dream has a very large amount of interesting work to do. The original motivation was not only to create a modern, highly ergonomic Web framework in a minimal sense, but to do a whole tour through the OCaml Web development ecosystem and address every other place where a major library is missing, or where quality of life can be improved. See the roadmap for some of the many ideas.

In fact, we had started working on this back in 2022 with a small team of people, and created an OAuth library. That enterprise was unfortunately terminated by events outside our control, and the logical step now is for me to yield control of Dream itself to a differently structured team, for its natural development :slight_smile:

If you're interested, please DM me here on Discuss! If you have such, please link your projects related to Web development, or where you have been a maintainer. Let me know if you're a user of Dream, and what you'd like to see in Web development in OCaml.

Thank you!

QCheck 0.90: The Great Renaming

Jan Midtgaard announced

It is my pleasure to announce release 0.90 of the QCheck packages. QCheck is an OCaml library for randomized property-based testing in the style of Haskell's QuickCheck.

https://github.com/c-cube/qcheck/releases/tag/v0.90

It has been over 12 years and 40 releases since @c-cube released version 0.1 back in October 2013. Over this period QCheck has grown organically

  • with new combinators on a "by-need" basis and
  • with a separate QCheck2 module offering generators with integrated shrinking.

This has unfortunately resulted in a bit of a naming mess with inconsistent generator names. For example, the (now deprecated) small_int combinator will generate only small non-negative numbers, and a combinator for generating positive integers uniformly is named either pint or pos_int across different QCheck modules.

The 0.90 release thus takes on a cleanup under the heading "The Great Renaming". To guide the renaming process, we have assembled a list of hard-learned naming principles:

  • Generator names should align with type names (bool, char, … list, option) to be as predictable as possible
  • We should have short, unparameterized generators (int, string, …) to lower the barrier to entry
  • Specialized generators also start with the type name, but use a consistent suffix (_pos, _neg, _size, _of, …) to help find them, e.g., with tab-completion
  • We may include a few shorthand names for convenience (e.g., nat)
  • Overall we aim to be as consistent as possible, e.g., offering similar signatures across generator interfaces (QCheck.Gen, QCheck.arbitrary, and QCheck2.Gen)

The 0.90 release thus both

  • introduces a range of new (and hopefully more consistent) combinator names and
  • deprecates a sizable number of old, inconsistent combinator names

The deprecated combinators have been annotated with @@deprecated attributes.

Rather than let a couple more years pass with an even bigger and more confusing name pool, we are using this opportunity to prepare a long overdue 1.0.0 release, where we will remove the old, deprecated combinator names.

We understand that updating existing tests to the new names takes some effort, but appeal to users that this should be a one-time investment to

  • offer more consistent and easier to recall combinator names and simultaneously
  • let us clean up QCheck tech debt and address a long-time pain point.

The changes are summarized in a record-long CHANGELOG section for the release:

https://github.com/c-cube/qcheck/blob/v0.90/CHANGELOG.md

and c-cube/qcheck#366 provides a run down of the renaming process.

For more details, see the following list of PRs:

Finally, on behalf of the maintainers I would like to thank

  • the various folks contributing to QCheck over the past 12 years and
  • the OCaml Software Foundation for financially supporting the work on these past three releases.

Merry Christmas and happy testing! :evergreen_tree: :wrapped_gift:

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.

2025-12-16

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

OCaml Weekly News

Previous Week Up Next Week

Hello

Here is the latest OCaml Weekly News, for the week of December 09 to 16, 2025.

Software Engineer (OCaml) – LexiFi, Paris

Alain Frisch announced

Hi all,

LexiFi is looking for a Software Engineer to join our development team in Paris. The work is primarily in OCaml, contributing to our codebase across core components, tooling, and product features.

If you're interested in working on a large, long-lived OCaml system used in production by financial institutions, you can find the full job description here: https://www.lexifi.com/careers/software_engineer/

Happy to answer any questions!

Opam repository archival, next run (scheduled 2026-01-01)

Hannes Mehnert announced

Dear everyone,

we did another run of the archival based on the x-maintenance-intent of opam packages. The run was using opam-repository at commit d684c896eb6f7e6030d6ee65338d9db22a612f01 (Dec 9th, 20:00:00 CET).

The tool used is maintenance-intent-filter with opam 2.5 and OCaml 5.4. It took around 1GB of memory and around 100h of CPU time (donations welcome).

In total, 4510 packages were candidates, out of which 3361 are scheduled for archival.

Testing

To test whether your CI / lock / environment will be affected by the removal of packages, you can create a fresh opam switch and use the opam-repository from the branch:

  $ opam repository add archival-20260101 https://github.com/hannesm/opam-repository.git#archival-20260101  $ opam switch create archival-20260101  --repositories archival-20260101  $ eval `opam env`  

Alternatively, in CI systems you can do temporarily for testing:

  $ opam repo set-url default https://github.com/hannesm/opam-repository.git#archival-20260101  

Reverting archival

If you want to preserve a package, please don't hesitate to comment on the issue https://github.com/ocaml/opam-repository/pull/29058

It is important that you include the package name and its version, as well as where it is used (preferably a URL), and a contact (email address).

Editor's note: please follow the archive link for the list of packages to be archived.

blame, a simple webapp as an unikernel

Calascibetta Romain announced

I am pleased to announce the development of blame, a unikernel that provides a search engine in the form of a web interface based on an email archive.

This work is sponsored by NLnet as part of our PTT project. For more details on the unikernel, our archive system, and our search engine, we recommend reading our article available here. This project is the synthesis of several projects on the subject:

  • mrmime to parse/encode emails
  • carton to archive emails
  • stem to search emails
  • blaze like a Swiss Army knife for manipulating emails and archives
  • and of course some of our projects like miou, utcp or vif

If you like our work, you can sponsor us via GitHub or by following the instructions available here. Thank you to everyone who has participated in the development of these projects, whether directly or indirectly.

So, happy hacking "discriminating hackers" :) !

A new kind of knowledge-base for OCaml's doc

Mostafa Touny announced

Hello,

I have been following @sabine's post, https://discuss.ocaml.org/t/looking-for-maintainers-moderators-for-the-ocaml-cookbook/16497.

I really want to contribute but like any engineer, I am pressured on deadlines, which incentivizes me to ask here or in Discord. There are even wonderful books like Type Theory and Formal Proof, but I cannot allocate good time to read them.

That motivated me to think of a new mechanism, where documentations and question-answers are bridged, through Snippet project.

Someone asks a question like this. Instead of answering the question, you must contribute a self-contained paragraph, called "snippet", then cite it in the question. For example the question cites:

If some snippet gets a high number of citations, then that would be a signal to contribute it to OCaml's documentations or OCamlverse. In other words, OCaml's cookbooks will be naturally contributed as more people's questions get answered, and will be naturally certified as more people cite it!

The project is built on Dream, open-source, and CC 4.0 licensed. I'd be happy to see OCaml's maintainers self-host an instance of it in OCaml's official website. We could even design a voting mechanism to elect snippets for the official documentation.

For now, I am happy to listen to your feedback.

Serialport - new serial communication library

Mikhail announced

Hi there!

I'm happy to announce the first release of the serialport library. The library is planned to be a cross-platform library for serial port communication in OCaml, which supports both POSIX and Windows systems. It provides synchronous and asynchronous interfaces using various I/O libraries (like Lwt and other).

The library currently only supports POSIX systems.

serialport.svg

The main motivation behind creating this project is to address the lack of a comprehensive library for managing serial port communication in different environments, as well as the lack of an intuitive API for this task. The existing OSerial library has significant limitations in terms of functionality and future development, making it unsuitable for use in modern environments.

The serial port library is most inspired by similar implementations in other languages, such as Rust's serialport and Golang's bugst/go-serial.

Usage

Typically, an example of usage is communication between a PC and an Arduino board or other devices via an old-school serial port.

# #require "serialport.unix";;   (* #require "serialport.lwt";; *)    # let port_opts = Serialport.Port_options.make ~baud_rate:9600 ()    and port_name = "/dev/ttyUSB0" in      Serialport_unix.with_open_communication ~opts:port_opts port_name      begin fun ser_port ->        (* Get channels abstractions for high-level working with I/O without buffering. *)        let ic, oc = Serialport_unix.to_channels ser_port in        (* Wait until Arduino has been initialized. *)        Unix.sleep 2;        (* Send the message to the Arduino via the serial port. *)        Out_channel.output_string oc "Hello from PC!\n";        (* Read the response from the serial port. *)        In_channel.input_line ic      end  

Enjoy it!

Windows supports

I will be implementing Windows support in the next version (coming soon).

P.S.

I would be delighted to discuss your ideas and suggestion!

Lwt.6.0.0~beta (direct-style, multi-domain parallelism)

Raphaël Proust announced

lwt.6.0.0-beta01 has been released!

With this release comes a change in the title of this thread:

- [ANN] Lwt.6.0.0~beta (direct-style, multi-domain parallelism)  + [ANN] Lwt.6.0.0~beta (direct-style, runtime-event tracing)  

This is likely the last beta before the release of Lwt.6.0.0, please test and share your feedback. The highlights are

  • (compared to previous beta) no more multidomain-multischeduler parallelism
    • it was too buggy,
    • you can still use Lwt_domain
  • (compared to previous beta) runtime-events produce a trace of execution of your lwt program for better debugging
  • (compared to Lwt.5.9) direct-style with Lwt_direct
    • you can write direct-style lwt (within a given scope)
    • e.g., you can interact with libraries that only provide iter : ('a -> unit) -> 'a -> unit such as

      let iter_s f h =    Lwt_direct.spawn @@ fun () ->      Hashtbl.iter (fun k v -> Lwt_direct.await (f k v)) h  

Once again, thanks to @c-cube for the direct-style feature which makes it possible to use Lwt in conjunction with libraries even if they don't include special amenities for it.

Thanks again for @edwin for the bug report on multi-scheduler-related failures.

Call for Participation: BOB 2026 (Berlin, Mar 13)

Michael Sperber announced

Finally, lots of OCaml content at BOB!

"What happens when we use what's best for a change?"

BOB conference is a place for developers, architects, and decision-makers to explore technologies beyond the mainstream in software development and to find the best tools available to software developers today. Our goal is for all participants of BOB to return home with new insights that enable them to improve their own software development experience.

Program

The program features 16 talks and 8 tutorials on current topics.

Talk subjects includes functional programming, software architecture, formal methods, accessibility, UI programming, reactive systems, and domain-driven design.

BOB tutorial include sessions on TypeScript, OCaml, Haskell, Agda, accessibility, and reactive systems.

Stefan Kaufmann will give the keynote talk on digital sovereignty.

Registration

Registration is open - many discount options - including limited early-bird discounts - are available, as are grants for members of groups underrepresented in tech.

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.

2025-12-08

[Caml-list] POPL 2026 Second Call for Participation - Early registration: 12 December

=======================================

               Call for Participation
ACM SIGPLAN Symposium on Principles of Programming Languages (POPL 2026)
   January 11-17, 2026, Rennes, France.
            https://popl26.sigplan.org/

=======================================

- Early registration deadline: ** 12 December 2025 **

- Register here: https://popl26.sigplan.org/attending/registration

- The POPL program: https://popl26.sigplan.org/track/POPL-2026-popl-research-papers

=======================================

The 53rd ACM SIGPLAN Symposium on Principles of Programming Languages (POPL
2026) is a forum for the discussion of all aspects of programming languages and
programming systems.

Location: le Couvent des Jacobins, 20 place Saint-Anne, 35000 Rennes, France

Dates:
- Main conference: Wed 14 - Fri 16 January
- Workshops, tutorials, co-located events: Sun 11, Mon 12, Tue 13 and Sat 17 January

Keynote Speakers:
- Damien Pous, CNRS, Medium-scale automation for proof assistants
- Caroline Trippel, Stanford University, Hardware-Software Contracts for High
       Assurance with Applications to Side-Channel Security

Organizers:
- General Chair: Sandrine Blazy, University of Rennes
- PC Chair: Suresh Jagannathan, Purdue University

Full details of the conference and co-located events: https://popl26.sigplan.org/