matrix.org/content/blog/2020/12/2020-12-15-dendrite-2020-pr...

147 lines
8.0 KiB
Markdown

+++
title = "Dendrite 2020 Progress Update"
path = "/blog/2020/12/15/dendrite-2020-progress-update"
[taxonomies]
author = ["Neil Alexander"]
category = ["General"]
+++
It's been a year since Dendrite development picked up again and it's certainly
been a busy one at that! We started off 2020 by sprinting to complete the FOSDEM P2P
demo and, since then, we have continued to develop Dendrite into a more featureful
and stable homeserver.
In October, we [moved Dendrite into beta](https://matrix.org/blog/2020/10/08/dendrite-is-entering-beta),
and have since released a number of releases. We've also seen quite a lot of interest
from the community, so I'm here today to write about some of the fun things that have
been going on in Dendrite-land.
## Announcing dendrite.matrix.org
I'm happy to announce that we've finally deployed our own public Dendrite instance at
**dendrite.matrix.org**! It's running the latest Dendrite code and is open for
registration, so if you have been looking for an opportunity to play with Dendrite
without hosting your own deployment, here's your chance!
There are still bugs and missing features, but overall the server is quite usable, so
please feel free to register and try it and [let us know how you get on](https://matrix.to/#/#dendrite:matrix.org).
This is the first deployment that we've built for any kind of scale, so we are cautious
of the fact that there may be performance bottlenecks still. That said, over the last
few weeks, a number of performance-improving changes have been merged, including:
* Around 20x performance improvement on the State Resolution v2 algorithm, which is used
in room versions 2 and above
* Significantly reducing the amount of time spent recalculating event reference hashes
and event IDs in the roomserver and sync API, reducing CPU usage
* Optimised memory usage and reduced database hits in the federation sender, which helps
particularly in large rooms with lots of resident servers
We're optimistic that running this deployment will help us to identify scaling pain
points and to make Dendrite leaner in the long run. Feel free to sign up and give it
a spin! :-)
## Features
Since the beginning of the year, we've added a number of new features, including but
not limited to:
* Room versions support for all currently specced versions (v1-v6), including support
for State Resolution v2
* SQLite storage support in addition to PostgreSQL, largely useful for the P2P demos
* Support for database schema upgrades, making updating Dendrite significantly easier
* Early end-to-end encryption support, including device list syncing and send-to-device
messages, although with key backup and cross-signing still to come
* A number of federation features, including invites, retries and backing off unreachable
homeservers
* User-interactive authentication (UIA), which is used in password changes and deleting
devices from your device list
* Support for local pagination, backfilling over federation and fetching missing events
* Redaction of events both locally and over federation
* Entirely new microservices for managing server signing keys, E2E keys, user and device
management
* Lots of great contributions from the community - including all of Read Receipts (thanks to [S7evinK](https://github.com/S7evinK)) and Read Markers (thanks to [Lesterpig](https://github.com/Lesterpig))!
...and of course [entered Beta](https://matrix.org/blog/2020/10/08/dendrite-is-entering-beta) in October!
## Spec compliance
Of course, Dendrite also needs to be able to fulfill the promise of being a usable
next-generation Matrix homeserver at the same time as being a sci-fi development
platform. We have spent much of the last year working specifically on this. Today,
Dendrite's [Sytest](https://github.com/matrix-org/sytest) compliance sits at:
* **59%** compliance for Client-Server APIs, up from 33% in May 2020
* **83%** compliance for Server-Server APIs, up from 26% in May 2020
As you can see, these are significant leaps in the numbers of tests passing against
Dendrite.
## Experimental MSCs
We have been increasingly trying to use Dendrite for the development and testing of
some new Matrix feature proposals. Recently we've seen early support added for
[Peeking (MSC2753)](https://github.com/matrix-org/matrix-doc/pull/2753) and there
is work in progress on [Peeking over Federation (MSC2444)](https://github.com/matrix-org/matrix-doc/pull/2444).
Peeking enables temporarily subscribing to a room for real-time events without joining
the room. This will only be possible with rooms that are world-readable, but it reduces
the overhead of looking into a room significantly as there is no need to update the room
state for each peeking user/device.
In addition to that, we've also been working on [Threading (MSC2836)](https://github.com/matrix-org/matrix-doc/pull/2836)
support, which is the gateway to building some pretty new and interesting Matrix
experiences. Twitter-like or Reddit-like social prototypes like this have traditionally
been difficult to build on top of Matrix as the `m.reference` relation type from [MSC1849](https://github.com/matrix-org/matrix-doc/pull/1849)
had never really been fleshed out.
Threading adds `m.relationship` fields for embedding these relationships, and also
specifies an additional `/event_relationships` API endpoint for finding other events
related to a given event in either direction. This makes it possible to build threads.
## P2P Matrix
Dendrite has also been our primary development platform for P2P Matrix. This year we
have released multiple P2P Matrix demos, including:
* [p2p.riot.im](https://p2p.riot.im), which uses libp2p rendezvous and embeds a full
Dendrite homeserver into an in-browser Service Worker
* [Element iOS P2P](http://testflight.apple.com/join/Tgh2MEk6), available on TestFlight,
which embeds a full Dendrite homeserver into the Element iOS app, initially using
QUIC over [Yggdrasil](https://yggdrasil-network.github.io) as a transport for federation
traffic, but with more recent versions using QUIC over the experimental Pinecone protocol
* [dendrite-demo-libp2p](https://github.com/matrix-org/dendrite/tree/master/cmd/dendrite-demo-libp2p),
a standalone binary which formed the basis of the FOSDEM 2020 P2P demo, using libp2p and
local multicast discovery as a transport for federation traffic
* [dendrite-demo-yggdrasil](https://github.com/matrix-org/dendrite/tree/master/cmd/dendrite-demo-yggdrasil),
another standalone binary like above, but using QUIC over Yggdrasil connectivity instead
of libp2p as the transport for federation traffic
Each experiment teaches us more about potential issues that need to be resolved in order
to bring P2P Matrix closer to being reality, and we are continuing to use Dendrite for
this work. We'll be announcing more information in the New Year about our latest efforts
and the Pinecone routing scheme that we are developing.
It's also worth highlighting that all of the other experimental work taking place right
now, including Threading and Peeking, also work over P2P!
## What's next
We'll be taking a short break for Christmas, but will then be continuing work on
Dendrite in 2021, with the main aims being to add new features, improve spec compliance
further, fix bugs and eventually exit beta. We'll also be continuing further experimental work in the
P2P and Threading areas, as well as supporting the development of new MSCs such as
[Portable Identities (MSC2787)](https://github.com/matrix-org/matrix-doc/pull/2787).
We'd like to say thank you for the community support and interest, and also to send
out a special thanks to our community contributors who have contributed a number of
fixes and features in recent months! We always welcome code contributions via
[GitHub](https://github.com/matrix-org/dendrite) if you are an interested developer.
As always, stay tuned for more Dendrite updates either by joining us in
[#dendrite:matrix.org](https://matrix.to/#/#dendrite:matrix.org) or by getting your
regular dose of [This Week in Matrix](https://matrix.org/blog/category/this-week-in-matrix)!
— Neil Alexander and Kegan