eltrix

MIT licensed // open source

A Matrix homeserver
on the BEAM.

Eltrix is a Matrix homeserver written in Elixir. A room is a process, a sync is a parked one, and the whole thing runs on the virtual machine built for millions of concurrent connections.

  • 11 capabilities done
  • 10, 11, 12 room versions
  • OTP supervision, not cron

What it does

A homeserver people can actually be given accounts on — encrypted rooms, media that does not live on a disk, moderation tools, and more than one machine.

Private by default

End-to-end encryption

Private rooms are encrypted when they are created, not when somebody remembers to. Device keys, one-time and fallback keys, cross-signing and device verification, and server-side key backup with restore — encrypted with a key this server never holds.

Built to grow

Horizontal scale

Run more than one node. A room is a single process across the whole cluster rather than one per machine, and so is every outbound sender — an event written on one node reaches a client waiting on another in well under a millisecond.

Current spec

Room versions 10, 11 and 12

The auth rules, state resolution and redaction algorithms each version requires, checked against real events from a production server rather than against ourselves.

No shared disk

Media in object storage

Uploads, downloads and thumbnails go to any S3-compatible bucket. Nothing lands on the pod filesystem, so a second node needs no shared volume and a restart loses nothing.

Runnable

Administration and moderation

A console for the day-to-day and an API for everything else, mirrored at the Synapse admin paths so tooling you already run keeps working. Every look at a user's data is logged.

Real-time

Sync that stays awake

A waiting client is a parked process, not a poll. Typing, receipts, read markers, account data and filters, on a sync token that tracks four streams independently.

The clients

One design language across the web and Apple platforms — the same restrained paper-and-ink the server's own console uses. The web client is live and works against any homeserver, not just this one. The Apple app is in development, and these are placeholders rather than mockups of something that does not exist yet.

screenshot pending
Web client Live at app-beta.eltrix.org
screenshot pending
iOS In development
screenshot pending
iPadOS In development

Why Elixir

Elixir runs on the Erlang virtual machine, built for telephone exchanges and the reason a chat server can hold a very large number of idle connections without thinking about it. Here that is not an analogy. Every room is a supervised process. Every waiting /sync is a process parked on a message rather than a query running on a timer.

It also means failure is bounded. A room that crashes takes its own state with it and nothing else, and comes back. There is no queue to drain by hand and no cron job holding the system together.

Configuration is environment variables — the values an operator actually sets, with defaults that are safe rather than convenient. Anything that lets strangers in is closed unless somebody writes it down.

Federation works in both directions today, behind an allowlist that is closed by default. Opening it to the whole network is deliberate work still ahead, and this page says so rather than hiding it.

Running it

Registration is by invitation. Before there is an account on this server that is not the operator's, the terms, the privacy policy and a working way to report abuse have to exist — which is why they are published rather than written when first needed.

What this server can and cannot do is tracked in the open, in the project's own issues, rather than summarised here where it would go stale.