harmony

module
v0.0.0-...-96fb98d Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 18, 2025 License: Apache-2.0

README

Unmaintained

For a number of years I worked on Matrix and Dendrite, believing that the ecosystem would be enriched by a powerful and lightweight homeserver implementation to live alongside or eventually replace Synapse. I am proud of the huge progress that the Dendrite team made in transforming an abandoned codebase that barely compiled into a modernised and functional one. The Harmony fork came into existence with the thought that it's still possible to have a perfectly good core Matrix experience without much of the extra weight that had accumulated over time, hence the number of features and APIs that had been removed, and that a leaner codebase would be overall easier to maintain as an individual developer.

However, I have found myself increasingly disenfranchised. Matrix has become a perfect example of what happens when an endlessly scope-creeping monolithic specification is combined with a complete lack of interest in repaying technical debt or fixing fundamental protocol issues. The result over time is that the protocol has become extremely heavy, practically impossible to implement correctly (by whatever definition of the word), deeply flawed and, worst of all for a federated system, a complete interoperability and compatibility disaster.

It's practically impossible to "get Matrix right" today, given the difficulty in reproducing the many Synapse bugs and the sheer lack of precision in the spec (which some vocal community members use as an excuse to beat us endlessly with "Dendrite is unusable!"-style criticisms), and with the recent wave of illegal and frankly horrifying content that has been spammed throughout and eagerly replicated across the Matrix federation, I am no longer convinced that a Matrix homeserver is even safe to host, or indeed that anything remotely like this is even what "right" is supposed to look like.

I just no longer believe that Matrix is the right answer to the problems that it attempts to solve and with that I no longer have the energy or motivation to maintain this fork either. Perhaps Dendrite development will continue upstream or someone else will fork Harmony, but time has come for me to say goodbye to this project and to refocus my attention elsewhere.

Harmony

Harmony is a lighter-weight fork of Dendrite, a second-generation homeserver for the Matrix protocol.

As with Dendrite, supported features include:

  • Core room functionality (creating rooms, invites, auth rules)
  • Room versions 1 to 11 supported
  • Backfilling locally and via federation
  • Accounts, profiles and devices
  • Published room lists
  • Typing
  • Media APIs
  • Redaction
  • Tagging
  • Context
  • E2E keys and device lists
  • Receipts
  • Push
  • Guests
  • User Directory
  • Presence
  • Fulltext search

The primary goal of this fork is to make things simpler and easier to maintain. With that in mind, a number of features have been removed, including SQLite database support, the appservice API, support for 3PIDs, support for OpenID, all P2P and relay-related work, support for the WebAssembly target, phone-home stats and others.

Aside from that, Harmony can largely operate as a drop-in replacement for Dendrite.

Harmony is Apache-2.0 licensed and will remain so.

Documentation

For now, Dendrite's documentation is largely relevant. The configuration format and steps are practically unchanged.

Future

This project may or may not have a long-term future. Let's see how things go.

If it does, then future changes are likely to include refactoring various parts of the codebase, swapping out some parts of the backend storage to make better use of NATS in places where it makes sense, as well as potentially reintroducing the ability to run some components standalone for sharding.

Directories

Path Synopsis
api
auth
Package auth implements authentication checks and storage.
Package auth implements authentication checks and storage.
cmd
create-account command
dendrite command
furl command
generate-config command
generate-keys command
resolve-state command
api
hooks
Package hooks exposes places in Dendrite where custom code can be executed, useful for MSCs.
Package hooks exposes places in Dendrite where custom code can be executed, useful for MSCs.
api
Package api provides the types that are used to communicate with the roomserver.
Package api provides the types that are used to communicate with the roomserver.
internal/input
Package input contains the code processes new room events
Package input contains the code processes new room events
types
Package types provides the types that are used internally within the roomserver.
Package types provides the types that are used internally within the roomserver.
mscs
Package mscs implements Matrix Spec Changes from https://github.com/matrix-org/matrix-doc
Package mscs implements Matrix Spec Changes from https://github.com/matrix-org/matrix-doc
mscs/msc2836
Package msc2836 'Threading' implements https://github.com/matrix-org/matrix-doc/pull/2836
Package msc2836 'Threading' implements https://github.com/matrix-org/matrix-doc/pull/2836
api

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL