Conduit vs Synapse: Matrix Homeservers Compared

Quick Verdict

Want a Matrix homeserver without dedicating gigabytes of RAM to it? Conduit runs a fully functional homeserver in 70-200 MB of memory — a fraction of Synapse’s 1-2 GB baseline. The trade-off: Conduit is beta software that doesn’t implement the full Matrix spec. For personal use and small groups, Conduit is excellent. For anything production-grade or federation-heavy, Synapse remains the only complete option.

Updated March 2026: Verified with latest Docker images and configurations.

Overview

Both Conduit and Synapse are Matrix homeservers — they implement the Matrix protocol for decentralized, encrypted messaging. Clients like Element, FluffyChat, and SchildiChat connect to either server identically. The difference is in implementation philosophy and maturity.

Synapse is the reference Matrix homeserver, written in Python by the Matrix.org Foundation. It implements the complete Matrix specification including all room versions, push notifications, application services (bridges), and server-side search. Every Matrix feature was first built and tested against Synapse. The downside: Python’s memory footprint means Synapse consumes 1-2 GB RAM even idle.

Conduit is a community-developed Matrix homeserver written in Rust. It uses an embedded RocksDB database instead of requiring PostgreSQL, and its compiled Rust binary eliminates Python’s runtime overhead. A single Docker container handles everything. The project is in beta (v0.10.x) and doesn’t implement every Matrix feature — but for basic messaging, calls, and federation, it works.

Feature Comparison

FeatureConduit v0.10.12Synapse v1.147.1
Matrix spec compliancePartial (beta, v0.10.x)Full (reference implementation)
E2E encryptionYesYes
FederationYes (configurable)Yes (full support)
Voice/video callsYes (via TURN)Yes (via TURN)
Push notificationsBasicFull (Firebase, APNs, Sygnal)
Application services / bridgesLimitedFull (IRC, Telegram, Signal, WhatsApp, etc.)
Server-side searchBasicFull (with full-text indexing)
Spaces (room groups)PartialFull
Room versionsUp to v10All versions (v1-v11)
ThreadsBasicFull
SSO / OIDCNoYes (SAML, CAS, OIDC)
Admin APIBasicComprehensive
Worker mode (horizontal scaling)NoYes (split across multiple processes)
DatabaseRocksDB embedded (or SQLite)PostgreSQL required (production)
Backend languageRustPython 3
Docker containers12 (Synapse + PostgreSQL)
LicenseApache-2.0AGPL-3.0

Installation Complexity

Conduit deploys as a single container with no external dependencies. All configuration happens through environment variables:

services:
  conduit:
    image: matrixconduit/matrix-conduit:v0.10.12
    environment:
      CONDUIT_SERVER_NAME: "matrix.example.com"
      CONDUIT_DATABASE_BACKEND: "rocksdb"
      CONDUIT_DATABASE_PATH: "/var/lib/matrix-conduit/"
      CONDUIT_PORT: "6167"
      CONDUIT_ADDRESS: "0.0.0.0"
      CONDUIT_MAX_REQUEST_SIZE: "20000000"  # 20 MB
      CONDUIT_ALLOW_REGISTRATION: "false"
      CONDUIT_ALLOW_FEDERATION: "true"
      CONDUIT_ALLOW_ENCRYPTION: "true"
      CONDUIT_TRUSTED_SERVERS: '["matrix.org"]'
      CONDUIT_MAX_CONCURRENT_REQUESTS: "100"
      CONDUIT_DB_CACHE_CAPACITY_MB: "300"
      CONDUIT_LOG: "warn"
    volumes:
      - conduit_data:/var/lib/matrix-conduit/
    ports:
      - "6167:6167"
    restart: unless-stopped

volumes:
  conduit_data:

Set CONDUIT_SERVER_NAME, run docker compose up -d, configure your reverse proxy and .well-known delegation, and you have a working homeserver. Total setup: 5-10 minutes.

Important: CONDUIT_SERVER_NAME cannot be changed after first run — it’s baked into the database. CONDUIT_ADDRESS must be 0.0.0.0 in Docker (defaults to 127.0.0.1, which would make the server unreachable from outside the container).

Synapse requires PostgreSQL, a YAML configuration file, and secret generation:

services:
  synapse:
    image: matrixdotorg/synapse:v1.149.1
    volumes:
      - ./synapse-data:/data
    depends_on:
      postgres:
        condition: service_healthy
    ports:
      - "8008:8008"
    restart: unless-stopped

  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: synapse
      POSTGRES_USER: synapse
      POSTGRES_PASSWORD: CHANGE_ME_STRONG_PASSWORD
      POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=C"
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U synapse"]
      interval: 10s
      timeout: 5s
      retries: 5
    restart: unless-stopped

volumes:
  pgdata:

Before starting, generate the config:

docker run --rm \
  -v ./synapse-data:/data \
  -e SYNAPSE_SERVER_NAME=example.com \
  -e SYNAPSE_REPORT_STATS=no \
  matrixdotorg/synapse:v1.149.1 generate

Then edit synapse-data/homeserver.yaml to configure PostgreSQL (replacing the default SQLite), set registration_shared_secret, macaroon_secret_key, and form_secret (each generated with openssl rand -hex 32). The database section needs:

database:
  name: psycopg2
  args:
    user: synapse
    password: CHANGE_ME_STRONG_PASSWORD
    database: synapse
    host: postgres
    cp_min: 5
    cp_max: 10

You also need .well-known/matrix/server and .well-known/matrix/client JSON files served from your domain, plus a reverse proxy with TLS. Create users via CLI: docker compose exec synapse register_new_matrix_user -c /data/homeserver.yaml. Setup time: 20-40 minutes.

Performance and Resource Usage

ResourceConduit v0.10.12Synapse v1.147.1
RAM (idle, no users)70-100 MB800 MB - 1 GB
RAM (1-5 users)100-200 MB1-1.5 GB
RAM (10-50 users)200-500 MB2-4 GB
RAM (100+ users)500 MB - 1 GB4-8 GB (with workers)
CPU (small instance)Minimal (<1% idle)Low-medium
Disk growth~500 MB/week active~1 GB per 100K messages + media
DatabaseEmbedded (no separate service)PostgreSQL (separate container)
Horizontal scalingNot supportedWorker mode (split federation, media, sync)

The performance gap is dramatic. Conduit uses 5-10x less RAM than Synapse for equivalent user counts. On a Raspberry Pi 4 with 4 GB RAM, Conduit leaves room for other services while Synapse would consume most available memory.

However, Synapse’s worker mode enables horizontal scaling for large deployments — splitting federation, media handling, and client sync across multiple processes. Conduit has no equivalent; performance is limited to what a single process can handle.

Community and Support

Synapse is developed by the Matrix.org Foundation with full-time engineers and corporate sponsors (Element). It has 12,000+ GitHub stars, comprehensive documentation at matrix-org.github.io/synapse, and a large operator community. Every Matrix feature is tested against Synapse first. Breaking changes are rare and well-documented.

Conduit has 2,200+ GitHub stars and an active Matrix room for community support. Documentation is sparser — the README and a few wiki pages cover basics, but advanced configuration often requires reading source code or asking in the Matrix room. Note that Conduit’s ecosystem is evolving: conduwuit (a performance fork) and Tuwunel (Swiss government-sponsored successor) share the same data format, so migration between forks is possible.

Use Cases

Choose Conduit If…

  • You’re running a personal or small-group homeserver (under 50 users)
  • RAM is constrained (Raspberry Pi, small VPS, shared server)
  • You want the simplest possible Matrix setup (one container, no PostgreSQL)
  • You don’t need bridges to other platforms (IRC, Telegram, Signal)
  • You’re comfortable with beta software and occasional missing features
  • You want to experiment with Matrix without committing significant resources

Choose Synapse If…

  • You need full Matrix spec compliance (all room versions, all features)
  • You use or plan to use bridges (mautrix-telegram, mautrix-signal, matrix-appservice-irc)
  • SSO/OIDC integration is required
  • Your deployment will serve 50+ users
  • You need horizontal scaling via worker mode
  • Production reliability and comprehensive documentation matter

Final Verdict

For personal Matrix hosting — messaging friends, family, or a small team — Conduit delivers 90% of the experience at 10% of the resource cost. Its single-container deployment and embedded database make it the easiest Matrix server to run.

For anything beyond personal use, Synapse is the only production-grade option. Bridges, SSO, full spec compliance, worker scaling, and comprehensive admin APIs all require Synapse. The resource cost is real but justified for the feature set.

The practical recommendation: start with Conduit if you’re exploring Matrix. Migrate to Synapse when you hit Conduit’s limitations — you’ll know when you need bridges or when spec gaps cause client compatibility issues.

FAQ

Can Conduit and Synapse homeservers federate with each other?

Yes. Both implement the Matrix federation protocol. Users on a Conduit homeserver can join rooms on Synapse homeservers and vice versa. The federation layer is protocol-defined, not implementation-specific.

Can I migrate from Conduit to Synapse later?

No direct migration tool exists. You would need to create new accounts on Synapse and rejoin rooms. Message history in federated rooms would be available (the room state is distributed), but DMs and local room history would not transfer. Plan your choice carefully if you have significant local data.

Does Conduit support Element Web as a client?

Yes. Element Web, Element Desktop, Element mobile, FluffyChat, SchildiChat, and other Matrix clients work with Conduit. Some advanced features (threads, spaces) may have partial support depending on the client and Conduit’s current spec coverage.

Why does Synapse use so much RAM?

Synapse is written in Python with Twisted (async networking framework). Python’s memory overhead for objects, combined with caching of room state and user presence data, creates a high baseline. The Matrix.org team has worked on reducing this, but Python’s runtime characteristics set a floor. Worker mode helps by distributing load across processes.

What is conduwuit / Tuwunel?

conduwuit is a performance-focused fork of Conduit. Tuwunel is its official successor, sponsored by the Swiss government. Both share Conduit’s data format and can use the same database. If Conduit’s development slows, these forks provide a migration path without data loss.

Comments