Greetings! In the developer manual of Jami, you will learn about how Jami works from the high level, to the low, with some examples.

Table of contents

  1. The APIs of Jami

  2. Basic features

    1. Account management

    2. Contact management

    3. Swarm

    4. Calls

    5. File transfer (deprecated; see Swarm)

    6. Message displayed status

  3. Advanced features

    1. Manage audio/videos

    2. Call recording

    3. The push notifications system

    4. What is a DHTProxy

    5. Supporting SIP

    6. Setting up your own TURN server

    7. Profile synchronization

  4. Contribute to Jami

    1. Build instructions

    2. Submitting your first patch

    3. Feature requests

  5. Group chats in details

    1. Description

    2. The connection manager

    3. DRT

    4. Calls in Swarm

  6. Drafts

    1. Conference protocol

    2. Synchronization protocol


If you are reading this, chances are you’d either like to contribute to one of Jami’s components/projects, or to implement your own client. There are three main layers in this project:

  1. OpenDHT, used for the p2p communication. You can interact with this library like any C++ library, or using the Python wrapper, or via its REST API.

  2. The daemon, which is the main part. It’s the part which does all the logic for Jami and interacts with OpenDHT, pjsip, FFmpeg, and the other libraries, and implements the whole protocol. If you’d like to do create a new Jami client, we recommend implementing it on top of this daemon, using one of its many APIs (REST, DBus, libwrap, or JNI).

  3. The client part, which is basically the frontend.

The developer manual of Jami will explain the different features from all of these layers.