Evgeny @ SimpleX Chat 388b13d417 docs
2026-03-13 22:16:49 +00:00
2026-01-28 22:52:33 +00:00
2023-10-31 22:44:46 +00:00
2026-03-09 12:27:02 +00:00
2026-03-13 22:16:49 +00:00
2022-11-26 14:29:59 +00:00
2026-03-10 19:18:34 +00:00
2026-03-09 12:27:02 +00:00
2026-03-10 19:18:34 +00:00
2026-03-13 21:45:24 +00:00
2026-03-13 07:35:15 +00:00
2023-10-22 10:50:36 +01:00
2025-08-23 20:05:10 +01:00
2025-01-30 09:22:13 +00:00
2023-10-22 09:20:14 +01:00
2020-10-13 18:48:41 +01:00
2026-03-13 22:16:49 +00:00
2020-10-11 11:00:25 +01:00

SimpleXMQ

GitHub build GitHub release

SimpleX Network software

SimpleXMQ provides the software for SimpleX Network — a general-purpose packet routing network where endpoints exchange data through independently operated routers using resource-based addressing. Unlike IP networks, SimpleX addresses identify resources on routers (queues, data packets), not endpoint devices. Participants do not need globally unique identifiers to communicate.

The software is organized in three layers:

  Application (e.g. SimpleX Chat)
+----------------------------------+
|         SimpleX Agent            |  Layer 3 — bidirectional connections, e2e encryption
+----------------------------------+
|      SimpleX Client Libraries    |  Layer 2 — protocol clients for SMP, XFTP
+----------------------------------+
|        SimpleX Routers           |  Layer 1 — network infrastructure (SMP, XFTP, NTF)
+----------------------------------+

SimpleX Chat is one application built on Layer 3. IoT devices, AI services, monitoring systems, and automated services are other applications that can use Layers 2 or 3 directly.

SimpleXMQ is implemented in Haskell, benefiting from robust software transactional memory (STM) and concurrency primitives.

See the SimpleX Network overview for the full protocol architecture, trust model, and security analysis.

Architecture

SimpleX Routers

Routers are the network infrastructure — they accept, buffer, and deliver packets. Three router types serve different purposes:

  • SMP routers provide messaging queues — unidirectional, ordered sequences of fixed-size packets (16,384 bytes). Protocol: SMP.
  • XFTP routers provide data packet storage — individually addressed blocks in fixed sizes (64KB4MB) for larger payloads. Protocol: XFTP.
  • NTF routers bridge to platform push services (APNS) for mobile notification delivery. Protocol: Push Notifications.

Running an SMP router

SMP server runs on any Linux distribution. OpenSSL is required for initialization.

Initialize: smp-server init -n <fqdn> (or --ip <ip>). This generates TLS certificates. The CA certificate fingerprint becomes part of the server address: smp://<fingerprint>@<hostname>[:5223].

The server uses in-memory persistence with an optional append-only store log for queue persistence across restarts. Enable with smp-server init -l or in smp-server.ini. The log is compacted on every restart.

When store log is enabled, undelivered messages are saved on exit (SIGINT only, not SIGTERM) and restored on start. Control this independently with the restore_messages setting.

Please note: On initialization, SMP server creates a certificate chain: a self-signed CA certificate ("offline") and a server certificate for TLS ("online"). Store the CA private key securely and delete it from the server. If the server TLS credential is compromised, this key can sign a new one while keeping the same server identity. Default location: /etc/opt/simplex/ca.key.

See docs/ROUTERS.md for XFTP/NTF router setup, advanced configuration, MacOS notes, and all deployment options (Docker, installation script, building from source, Linode, DigitalOcean).

SimpleX Client Libraries

Client libraries provide low-level protocol access to SimpleX routers. They implement the wire protocols (SMP, XFTP) and handle connection lifecycle, command authentication, and keep-alive.

The SMP client offers a functional Haskell API with STM queues for asynchronous event delivery. The XFTP client handles data packet upload/download with per-download forward secrecy.

Applications that manage their own encryption and connection logic — IoT devices, sensors, simple data pipelines — can use this layer directly. See docs/CLIENT.md.

SimpleX Agent

The Agent builds bidirectional encrypted connections on top of the client libraries. It manages:

  • Duplex connections from unidirectional queue pairs
  • End-to-end encryption with double ratchet and post-quantum extensions
  • File transfer with chunking, encryption, and multi-router distribution
  • Queue rotation for metadata privacy
  • Push notification subscriptions

The Agent library communicates via STM queues using the ACommand type — no serialization needed.

See docs/AGENT.md.

Quick start

Public SMP routers for testing:

smp://u2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU=@smp4.simplex.im

smp://hpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg=@smp5.simplex.im

smp://PQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo=@smp6.simplex.im

Deploy routers

You can run SMP/XFTP routers on any Linux distribution. OpenSSL is required:

# Ubuntu
apt update && apt install openssl

See docs/ROUTERS.md for Docker, binary installation, building from source, and cloud deployment (Linode, DigitalOcean).

License

AGPL v3

Description
No description provided
Readme AGPL-3.0 35 MiB
Languages
Haskell 90.7%
HTML 3.4%
Shell 2.5%
CSS 1.7%
C 0.8%
Other 0.8%