Guide: Self-Host Matrix Synapse (with Element Client)

Introduction

Looking to reclaim control over your communication? Matrix is a decentralized, secure, and open-source communication protocol—ideal for private messaging, team collaboration, or even full-stack alternatives to Slack or Discord. In this guide, you’ll learn how to self-host Matrix Synapse (the most widely used homeserver) and connect with Element, a powerful Matrix client.

Who is this for?

  • Privacy-conscious individuals or teams
  • Self-hosting enthusiasts
  • Anyone seeking open-source, federated alternatives to centralized chat apps

What you’ll get:

  • A working Synapse Matrix server
  • Integrated Element web client
  • Optional federation to other Matrix servers

Why Choose Matrix?

FeatureMatrix (Synapse + Element)
Privacy & ControlFull data ownership, E2EE supported
FederationYes (connect to other servers)
Client SupportWeb, Desktop, Mobile
Group Chats & DMsYes
Bridges to Other ToolsYes (Slack, IRC, Discord, etc.)

Matrix offers open, secure communication without the surveillance or vendor lock-in of big tech.

Requirements

  • A VPS or local server (1–2 vCPU, 2–4 GB RAM recommended)
  • Docker and Docker Compose installed
  • A domain (e.g. matrix.example.com)
  • Basic Linux and Docker familiarity

Step-by-Step Setup Using Docker

1. Prepare Directory

mkdir -p ~/matrix/synapse
cd ~/matrix

2. Create docker-compose.yml

version: '3'
services:
  synapse:
    image: matrixdotorg/synapse:latest
    container_name: synapse
    volumes:
      - ./synapse:/data
    environment:
      - SYNAPSE_SERVER_NAME=matrix.example.com
      - SYNAPSE_REPORT_STATS=no
    ports:
      - 8008:8008
    restart: unless-stopped

  element:
    image: vectorim/element-web
    container_name: element
    ports:
      - 8080:80
    restart: unless-stopped

Replace matrix.example.com with your domain.

3. Generate Configuration

On first run, Synapse will create configuration files.

docker-compose up -d synapse

Then generate an admin user (after container starts):

docker exec -it synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008

Follow prompts to set up your first admin account.

Configure Reverse Proxy & HTTPS

Use a reverse proxy like Nginx or Caddy to serve Synapse and Element with HTTPS. Example Nginx config for Synapse:

server {
    listen 443 ssl;
    server_name matrix.example.com;

    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
    }

    ssl_certificate /etc/letsencrypt/live/matrix.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/matrix.example.com/privkey.pem;
}

Add a similar block for element.example.com if served separately.

Optional Configuration

Federation

To connect with other Matrix servers:

E2EE Backup & Verification

Enable encrypted message backup and device verification from within the Element client settings.

Bridges

Install Matrix bridges to link with:

  • Slack
  • Telegram
  • Discord
  • IRC

Bridges require additional containers or bots; check https://matrix.org/bridges.

Access and Use

  • Matrix Synapse Web UI: N/A (server only)
  • Element client (on port 8080): http://yourdomain.com:8080
  • Mobile: Download Element app, set homeserver to your domain

FAQs

Q: Can I use my own domain?
A: Yes, and it’s recommended for federation.

Q: Is Matrix secure?
A: Yes, with end-to-end encryption supported for DMs and group chats.

Q: How does Matrix compare to Signal or Telegram?
A: Matrix is federated and self-hosted, giving you full control; Signal and Telegram are centralized.

Final Thoughts

Matrix is one of the most powerful self-hosted communication platforms. With Element, it offers a modern, privacy-respecting alternative to Slack, Discord, and WhatsApp.

Build your own communication hub—open, private, and under your control.

Support SelfhostHero: If this guide helped you, share the link, or use our affiliate recommendations to help us grow—privacy-first.