Dendrite, a communication server with the implementation of the Matrix protocol

Dendrite is a communications server being developed by the Matrix team and is positioned as a second-generation implementation of Matrix server components.

Unlike the Synapse reference server written in Python, the Dendrite code is developed in Go. Both official implementations are distributed under the Apache 2.0 license.

As part of the Ruma project, a separate version of the Matrix server is being developed in the Rust language, which is distributed under the MIT license.

The new server aims to achieve high efficiency, reliability, and scalability.

About Dendrite

Dendrite is ahead of Synapse in terms of performance, requires much less memory to operate, and can scale by load balancing across multiple nodes.

The Dendrite architecture supports horizontal scaling and is based on the separation of controllers in the form of microservices, where each instance of a microservice has its own tables in the database.

The load balancer is responsible for sending calls to microservices. Threads (go routines) are used to parallelize operations in the code, which allow the resources of all CPU cores to be used without dividing them into separate processes.

Dendrite supports working in two modes: monolithic and multi-component (polylith).

  • In monolithic mode, All microservices are linked in an executable file, run in a process, and interact directly with each other.
  • In multi-component mode (cluster), microservices can be launched separately, even with diversity on different nodes. Component interaction in multi-component mode is carried out using the internal HTTP API and the Apache Kafka platform.

The development is carried out based on the specifications of the Matrix protocol and using two sets of tests: the common sytest tests with Synapse and the new Complement suite.

At the current stage of development, Dendrite successfully passes 56% of client-server API tests and 77% of federation API tests, while actual functionality coverage is estimated at 70% for the client-server API and 95% for the federation API.

The beta stage indicates that Dendrite is ready for initial deployment and transition to development with regular new releases. Between releases, the database storage scheme will now be updated (unlike installing fragments from the repository, after the update, the database content will not be lost).

Changes that break backward compatibility, change the database structure, or require configuration changes will only be offered in major releases.

Currently, using Dendrite in monolithic mode with PostgreSQL DBMS is recommended for creating small home servers and P2P nodes. SQLite is not yet recommended due to unresolved issues with handling concurrent operations.

Features not yet implemented in Dendrite include : message acknowledgments, read receipts, push notifications, OpenID, email linking, server-side search, user directory, user ignore lists, group and community creation, evaluation of a user's online presence, guest input, and interaction with third-party networks.

Basic functionality for the operation of chat rooms (creation, invitations, authentication rules), means of federation of participants in rooms, synchronization of events after returning from offline, accounts, profiles, dial indication, download and upload of Editing files (Media API) are available for use messages, ACLs, tagging and end-to-end encryption device and key lists.

Recall that the Matrix platform for organizing decentralized communications uses HTTPS + JSON as its transport protocol, with the ability to utilize WebSockets or a protocol based on CoAP + Noise. The system is structured as a community of servers that can interact with each other and combine into a common decentralized network.

Messages are replicated across all servers to which the messaging participants are connected. Messages propagate between servers in a manner similar to how commits propagate between Git repositories.

Source: https://matrix.org


Add as preferred source in Google