package obus

  1. Overview
  2. Docs
Pure Ocaml implementation of the D-Bus protocol


Dune Dependency






Published: 23 Aug 2020



OBus is a pure OCaml implementation of the D-Bus protocol. It aims to provide a clean and easy way for ocaml programmers to access and provide D-Bus services.

OBus is using the cooperative threading library Lwt, which make it very simple to fully exploit the asynchronous nature of D-Bus.


Make sure you have dune installed, and install all the missing dependencies listed in the output of this command:

$ dune external-lib-deps @install --missing


The recommended way to install obus and its dependencies is via opam: opam install obus.

Manual installation from sources

To build and install obus:

$ dune build @install

Tests (optionnal)

To build and execute tests:

$ dune runtest

Using the library

OBus install the following packages:

  • obus: the core library, implementing the D-Bus protocol,

  • obus.ppx: syntax extensions to aid registering OBus exceptions.

  • obus.notification: interface to the freedesktop Notification service,

  • obus.hal: interface to the freedesktop Hal service,

  • obus.upower: interface to the freedesktop UPower service,

  • obus.udisks: interface to the freedesktop UDisks service,

  • obus.policykit: interface to the freedesktop PolicyKit servie.

Using the tools

There are several tools provided in the obus distribution:

  • obus-dump, to execute a command and dump all messages that goes throug the session and/or system message bus,

  • obus-introspect which can recursively introspect a D-Bus service,

  • obus-gen-interface, to convert D-Bus introspection files into ocaml definition modules,

  • obus-gen-client and obus-gen-server which can generate template for using or implementing D-Bus servies,

  • obus-xml2idl and obus-idl2xml to convert xml introspection documents to the obus idl format, and vice versa.

There are manual pages for all this tools.

The caml files generated by obus-gen-client and obus-gen-server are meant to be edited and adapted. In practice introspections files contains only marshaling informations so it is often not sufficient for creating a usable binding.

Here is a simple example of use of the tools:

$ obus-introspect org.freedesktop.Notifications /org/freedesktop/Notifications > notif.xml
$ obus-gen-interface notif.xml
$ obus-gen-client notif.xml

Dependencies (9)

  1. ppxlib >= "0.9.0" & < "0.26.0"
  2. lwt_react
  3. lwt_log
  4. lwt_ppx
  5. lwt >= "4.3.0"
  6. xmlm
  7. menhir build & >= "20180528"
  8. dune >= "1.4"
  9. ocaml < "5.0"

Dev Dependencies





Innovation. Community. Security.