Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

libomemo 0.7.1

Implements OMEMO (XEP-0384) in C.

Input and output are XML strings, so it does not force you to use a certain XML lib. While the actual protocol functions do not depend on any kind of storage, it comes with a basic implementation in SQLite.

It deals with devicelists and bundles as well as encrypting the payload, but does not handle the double ratchet sessions for encrypting the key to the payload. However, you can use my axc lib for that and easily combine it with this one (or write all the libsignal client code yourself if that is better suited to your needs).


  • Mini-XML (libmxml-dev)
  • gcrypt (libgcrypt20-dev)
  • glib (libglib2.0-dev)
  • SQLite (libsqlite3-dev)


  • For testing: cmocka (make test)
  • For the coverage report: gcovr (make coverage)

I recommend to simply link it statically - the standard target is a is a static lib (containing PIC) which uses the compatible namespace (i.e. not the one in the XEP).


Basically, there are three data types: messages, devicelists, and bundles. You can import received the received XML data to work with it, or create them empty. When done with them, they can be exported back to XML for displaying or sending.

The test cases should demonstrate the general usage.

If a different namespace than the one specified in the XEP is to be used, you can use specify it at compile time. See the makefile for an example.