Uwt provides OCaml bindings
for libuv - on top
of lwt.

  • Requests are translated to lwt-threads.

  • Callbacks that are called continually are most of the time not
    translated to the usual lwt semantic.

  • naming conventions mirror the conventions of libuv, so you can easily
    consult the official libuv manual.
    Only the differences are explained inside uwt.mli

  • Uwt is not compatible with lwt.unix. It's not a further
    Lwt_engine in addition to select and libev. However, the
    findlib package uwt.ext provides alternatives to the higher level
    modules of lwt.unix with a nearly identic interface (Uwt_io,
    Uwt_process, Uwt_log). You can also open the module Uwt_compat
    (package uwt.compat) that provides aliases with module names as
    found in lwt (e.g. Lwt_main instead of Uwt.Main). This is
    necessary, if you want to use the camlp4 syntax extension of lwt.

  • Uwt is not thread safe. All uwt functions should be called from your
    main thread.


Quick install guide

$ opam install uwt
# or for the latest development version
$ opam pin add uwt --dev-repo

Manual install


  • OCaml 4.02.1 or later

  • lwt 2.6.0 or later

  • libuv 1.8 or later

Build dependencies:

  • pkg-config / pkgconf

  • findlib

  • omake

  • cppo

  • ppx_deriving (test only)

  • ppx_import (test only)

  • ounit (test only)

  • autoconf (repo pinning only)

$ omake all
$ omake install

libuv will be compiled locally, if is not already installed on your system.
You can also explicity enforce one option:

$ omake all BUILD_LIBUV=true
# or
$ omake all BUILD_LIBUV=false