# Element / Synapse

A messenger you host. Element is AGPL-3.0; Synapse is AGPL-3.0 — WhatsApp and Telegram without the vendor graph. Signal-server is not a self-host product for users.

**Replaces:** WhatsApp / Telegram

**Tier:** Medium

## Problem

WhatsApp and Telegram are vendor messengers. You wanted rooms and E2EE-capable clients on a homeserver you run. Element Web is AGPL-3.0 (element-hq/element-web). Synapse is AGPL-3.0 (element-hq/synapse — the maintained homeserver; matrix-org/synapse is archived). SimpleX Chat is already in the catalog if you want a messenger without user IDs. Rocket.Chat stays Slack-shaped (/replace/slack). This is not the WhatsApp or Telegram protocol, not every bridge, and not Signal. Do not deploy Signal-server and call it Signal — it is not a self-host product for users. Video rooms stay on /replace/skype (Jitsi).

## Stack

- [Element](https://element.io) — AGPL-3.0 Matrix client for the web
- [Synapse](https://element-hq.github.io/synapse) — AGPL-3.0 Matrix homeserver (element-hq/synapse)
- [SimpleX Chat](https://simplex.chat) — Private messenger without user IDs if Matrix is not the shape

## Estimated SaaS cost saved

| You stop paying | Typical / year | Self-host instead |
|---|---:|---|
| WhatsApp / Telegram (household / small team) | $1,200 | Synapse + Element |

**About $1,200 / year** on a small team, before you count lock-in.

## Deploy on Railway

Placeholder: Synapse + Postgres + a volume, Element as the client. Federation, TURN, and signing keys are real work. A single Railway service is often the wrong size. No one-click template in this repo yet — Start on Railway. Slack-shaped chat stays on /stacks/rocket-chat. Video stays on /stacks/meeting-pipeline.

[Start on Railway](https://c17.io/go/railway/matrix-messenger?from=%2Fstacks%2Fmatrix-messenger.md)

[Rocket.Chat if this is Slack-shaped team chat, not a personal messenger](https://c17.io/stacks/rocket-chat)

## AGENT_PROMPT

```
Replace WhatsApp or Telegram with Matrix: Synapse (homeserver) + Element (client).

- Follow Element HQ Synapse docs. Persist Postgres and media. Create one room, talk from two clients. Do not promise WhatsApp/Telegram bridges on day one.
- Do not deploy Signal-server and call it Signal. SimpleX if you want no user IDs. Write AGENT_PROMPT.md.
```

## FAQ

### Why not Signal?

Signal-server is not a self-host product for users. This page does not claim it. Matrix/Element is the messenger you can actually run.

### Is this WhatsApp's protocol?

No. You get Matrix rooms and Element clients. Bridges exist and are a separate, fragile job — do not promise them on day one.

### Element or Rocket.Chat?

Element/Synapse if you are leaving WhatsApp/Telegram. Rocket.Chat if you are leaving Slack (/replace/slack).

### Where is Skype?

Video rooms are Jitsi — /replace/skype and /stacks/meeting-pipeline.

Source: https://c17.io/stacks/matrix-messenger
