MCPSERV.CLUB
Jami

Jami

Self-Hosted

Peer‑to‑peer encrypted communication for all devices

Stale(40)
0stars
0views
Jami screenshot 1
1 / 5

Overview

Discover what makes Jami powerful

Jami is a peer‑to‑peer communication platform that bundles instant messaging, audio/video calls, group chats, and media streaming into a single self‑hosted stack. From a developer’s standpoint it is an end‑to‑end encrypted, distributed system that eliminates the need for centralized servers. The core of Jami is written in C++ with a Qt‑based UI, while the networking layer leverages libjami, an open‑source library that exposes a clean API for building custom clients or integrating Jami’s communication primitives into other applications. All protocols are compliant with X.509 and provide perfect forward secrecy, making it attractive for privacy‑centric projects.

Core Library

Protocol Stack

Data Persistence

Extension System

Overview

Jami is a peer‑to‑peer communication platform that bundles instant messaging, audio/video calls, group chats, and media streaming into a single self‑hosted stack. From a developer’s standpoint it is an end‑to‑end encrypted, distributed system that eliminates the need for centralized servers. The core of Jami is written in C++ with a Qt‑based UI, while the networking layer leverages libjami, an open‑source library that exposes a clean API for building custom clients or integrating Jami’s communication primitives into other applications. All protocols are compliant with X.509 and provide perfect forward secrecy, making it attractive for privacy‑centric projects.

Architecture

  • Core Library: libjami (C++/Qt) implements the signaling, transport, and media handling. It is built on top of libjami‑core, which in turn uses the PJSIP stack for SIP and WebRTC for media streams.
  • Protocol Stack: Jami uses its own distributed identity system based on X.509 certificates, with a bootstrap mechanism that relies on the “Rendezvous” protocol to discover peers without centralized servers.
  • Data Persistence: SQLite is used for local storage of contacts, chat history, and media metadata. No external database server is required.
  • Extension System: The application ships with a plugin architecture that allows developers to write extensions in C++ or JavaScript (via the Qt QML engine). Extensions can hook into events, add UI elements, or expose new protocols.
  • Cross‑Platform: The same codebase compiles for Linux, macOS, Windows, Android, and iOS. For mobile devices, the native UI is written in Kotlin/Swift while reusing libjami for networking.

Core Capabilities

  • Messaging API: Send and receive encrypted text, files, audio/video blobs. The jami::core API exposes methods like sendMessage, receiveMessage, and event callbacks for delivery status.
  • Call API: Initiate and manage SIP/WebRTC calls via jami::call. Developers can control codecs, media streams, and implement custom UI widgets.
  • Group Management: Create multi‑party chats with group chat rooms that are distributed and self‑contained. The API provides createGroup, addParticipant, and broadcastMessage.
  • Rendezvous & Discovery: A bootstrap service that can be run on a dedicated machine or embedded into an existing infrastructure. It uses a DHT‑like mechanism to resolve peer addresses.
  • Webhooks & REST: A minimal HTTP server can be enabled for external automation, exposing endpoints such as /contacts, /messages, and /calls. This is ideal for integrating Jami into larger orchestration workflows.

Deployment & Infrastructure

Because the system is peer‑to‑peer, there is no need for a central server; however, for large deployments you may run one or more Bootstrap Nodes to accelerate peer discovery. These nodes can be containerized with Docker:

services:
  bootstrap:
    image: jami/boostrap:latest

Jami can also be deployed behind a reverse proxy if you wish to expose the REST API over HTTPS. The application is lightweight (under 200 MB for binaries) and can run on low‑resource devices, making it suitable for edge deployments or IoT gateways.

Integration & Extensibility

  • Plugin SDK: The C++ API allows developers to write plugins that are loaded at runtime. Plugins can expose new UI components, integrate with external databases, or implement custom signaling protocols.
  • JavaScript Bridge: Using Qt’s QML engine, extensions can be written in JavaScript, enabling rapid prototyping and web‑style UI changes without recompiling the core.
  • External SIP Integration: Jami can act as a SIP client; developers can connect it to PBX systems or VoIP gateways by configuring the SIP transport layer in jami.conf.
  • Webhooks: The built‑in webhook system can trigger external services on events such as onMessageReceived or onCallEnded, facilitating automation and monitoring.

Developer Experience

The documentation is hosted on the official website and includes a comprehensive API reference, sample code snippets, and tutorials for building extensions. The community is active on GitHub and the Jami mailing list, where contributors discuss protocol improvements and bug fixes. The license (GNU GPLv3+) ensures that any derivative work must remain open source, which aligns with many privacy‑focused projects. Tooling support is strong: the project uses CMake for cross‑platform builds, and continuous integration runs on GitHub Actions.

Use Cases

  • Enterprise Private Chat: Companies can deploy Jami on their intranet to provide a fully encrypted messaging and calling solution without relying on cloud providers.
  • IoT Device Communication: Edge devices can embed libjami to exchange telemetry securely and trigger actions via webhooks.
  • Educational Platforms: Universities can host Jami servers to offer video‑conferencing and collaborative chat for students, ensuring compliance with data‑protection regulations.
  • Open‑Source Collaboration: Open‑source projects can use Jami’s group chat and file‑sharing features to coordinate developers worldwide while keeping communication private.

Advantages

  • Zero‑Trust Architecture: No central server means no single point of failure or data collection.
  • Performance & Scalability: Peer‑to‑peer routing keeps latency low; adding more peers only increases redundancy.

Open SourceReady to get started?

Join the community and start self-hosting Jami today