Cohttp Packaging Breakage Ahead¶

As a follow up to my previous post regarding optional dependencies, I’d like to expand on how my advice will be followed in practice in the context of the cohttp library.

the tl;dr is as follows:

The majority users will likely need to update their opam dependencies.

cohttp.js (xhr) users will be forced to upgrade to jsoo 3.0

There will be a 1 to 1 mapping between cohttp opam packages and top level modules

Opam packaging changes¶ In the next verion of cohttp (0.22.0), the library will split into the following opam packages: cohttp - Contains types for various HTTP entities and IO independent code. Usually not useful on its own.

cohttp-lwt - Shared code between the various Lwt backends. Unix, mirage, jsoo

cohttp-lwt-unix - Cohttp backend for Lwt + Unix users. Confusingly, Unix alludes to OCaml’s Unix module rather than any operating system. So this will work on windows as well.

cohttp-lwt-jsoo - In browser Cohttp/Lwt client for jsoo users

cohttp-async - Backend for Async users If you’re using cohttp, chances that your opam file will need to include more than one of the opam packages above. Previous reliance on a lwt or async package in the depopts section will no longer work. Please be advised.

Findlib changes¶ Every single one of the packages above will now install a findlib package with the same name as the opam package. These are now the recommended findlib packages to use. I still recommend to upgrade the build systems gradually, so that a package supports building against both old and new versions of cohttp. Here’s a full list of the “old” findlib sub-packages that will be removed eventually: cohttp.js

cohttp.lwt

cohttp.lwt-core

cohttp.async Again, these will all continue to work in the foreseeable future provided that the corresponding opam packages are installed.

Future changes¶ One exciting ability that jbuilder enables is the use of module aliases instead of module packs. What this means for cohttp is that we’ll consistently provide a single top level module for every cohttp sub package. This could have been done previously with packs, but a combination of ocamlbuild’s inability to hide a packed module’s constituents, and the slow down of builds caused by packs discouraged this from being done. With these restrictions out of the way, the situation will finally be harmonized. Practically, this means that the following top level packages will be deprecated and eventually removed: String_io_lwt

Cohttp_lwt_s

Cohttp_lwt_unix_debug

Cohttp_lwt_unix_body

Cohttp_lwt_body

Cohttp_lwt_unix_net

Cohttp_lwt_unix_io

Cohttp_async_io Most of these are already private and are of little use to most users. But the others will be available under their respective top level module name. E.g. Cohttp_lwt_unix.Body