Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Very lightweight HTTP server using Lwt or Async
OCaml JavaScript Other

Merge pull request #344 from rgrinberg/async_callv

[RDY] Quick n dirty attempt at async callv
latest commit 92f6d17f3b
@rgrinberg rgrinberg authored
Failed to load latest commit information.
async Async's callv now handles body more correctly
bin Fix indentation in async curl
docs Add documentation improvements
examples/async typo
js Fix type in post_form
lib Fix buffer allocation
lib_test test async callv
lwt Follow response_sequence change in backends
scripts Remove unnecessary test in
.gitignore add test out dir to gitignore
.merlin Test the Link header support and adopt alcotest
.ocp-indent ocp-indent config file for lwt Travis: simplify and just test on OPAM 1.2 now
.travis.yml Put in a gitter webhook
CHANGES update CHANGES Add a very skeletal `` document to explain the library struc…
LICENSE Replace LICENSE with the ISC, which has been true of the individual
Makefile Add documentation improvements tweak gitter icon position remove Async SSL todo
_oasis Add oasis flag "all"
_opam Add several fields and versions constraints in _oasis
_tags Convert request tests to alcotest
cohttp.install Actually installs binaries fixing regression in bd626e for #252 regenerate oasis
opam Test for incorrect URI decoding in URI user/pass, update minimum uri … regenerate oasis

Join the chat at

CoHTTP is an OCaml library for creating HTTP daemons. It has a portable HTTP parser, and implementations using various asynchronous programming libraries:

  • Cohttp_lwt_unix uses the Lwt library, and specifically the UNIX bindings.
  • Cohttp_async uses the Async library.
  • Cohttp_lwt exposes an OS-independent Lwt interface, which is used by the the Mirage interface to generate standalone microkernels (see the mirage-http repository).
  • Cohttp_lwt_xhr compiles to a JavaScript module that maps the Cohttp calls to XMLHTTPRequests. This is used to compile OCaml libraries like the GitHub bindings to JavaScript and still run efficiently.

You can implement other targets using the parser very easily. Look at the lib/IO.mli signature and implement that in the desired backend.

You can activate some runtime debugging by setting COHTTP_DEBUG to any value, and all requests and responses will be written to stderr. Further debugging of the connection layer can be obtained by setting CONDUIT_DEBUG to any value.


Latest stable version should be obtained from opam. Make sure to install the specific backends you want as well. E.g.

$ opam install cohttp lwt js_of_ocaml

You can also obtain the development release:

$ opam pin add cohttp --dev-repo

Simple HTTP server

If you install the Async dependency, then a cohttp-server-async binary will also be built and installed that acts in a similar fashion to the Python SimpleHTTPServer. Just run cohttp-server-async in a directory and it will open up a local port and serve the files over HTTP.

There is also an Lwt version of the SimpleHTTPServer installed as the cohttp-server-lwt binary. The source code for both is in the bin/ subdirectory and is a good starting point for how to write servers using the library.

Something went wrong with that request. Please try again.