Introduction ============ 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. {doc}`apis-of-jami` 2. Basic features 1. {doc}`account-management` 2. {doc}`contact-management` 3. {doc}`swarm` 3. {doc}`calls` 5. {doc}`file-transfer` (deprecated; see {doc}`swarm`) 6. {doc}`message-displayed-status` 3. Advanced features 1. Manage audio/videos 2. Call recording 3. [The push notifications system](https://github.com/savoirfairelinux/opendht/wiki/Push-notifications-support) 4. What is a DHTProxy 5. Supporting SIP 6. {doc}`setting-up-your-own-turn-server` 8. {doc}`synchronizing-profiles` 4. {doc}`../contribute` 1. {doc}`Build instructions <../build/building>` 2. {doc}`submitting-your-first-patch` 3. {doc}`feature-requests` 5. Group chats in details 1. Description 2. {doc}`connection-manager` 3. DRT 4. {doc}`calls-in-swarm` 6. Drafts 1. {doc}`conference-protocol` 2. {doc}`synchronization-protocol` ## Description 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](https://opendht.net), 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](https://github.com/savoirfairelinux/opendht/wiki/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.