Academy → Messaging ChannelsOfficial documentation · Arabic guidance

SimpleX Chat

قناة SimpleX Chat

Intermediate5 min readLesson 353 questions✓ 2026-08-18
Before you read

What this page is, and what it holds.

This page covers SimpleX Chat. You will use hermes send and hermes gateway setup here; about 5 minutes to read. Open the channel to yourself first with an allowlist. An open channel means anyone can message your agent.

12sections
8code examples
1tables
3commands
788source words
What you will be able to do

Outcomes taken from this page, not a template.

  • Understand what بوابة المراسلة is and when you need it.
  • Run hermes send and hermes gateway setup and understand what happens next.
  • Read the table and take only the row that applies to you.
  • Set SIMPLEX_WS_URL in the right place.
Identifiers you will meet

Exactly as they appear in Hermes.

Commands
  • hermes send
  • hermes gateway setup
  • hermes send simplex:
Environment variables
  • SIMPLEX_WS_URL
  • SIMPLEX_ALLOWED_USERS
  • SIMPLEX_HOME_CHANNEL
  • SIMPLEX_GROUP_ALLOWED
Page map

Jump to the part you need.

  1. 01Prerequisites
  2. 02Install simplex-chat
  3. 03Start the daemon
  4. 04Configure Hermes
  5. 05Find your contact ID or display name
  6. 06Authorization
  7. 07Group chats
  8. 08Sending with `hermes send`
  9. 09Attachments
  10. 10Using SimpleX with cron jobs
  11. 11Privacy notes
  12. 12Troubleshooting
The full official page

Nothing summarised away.

The documentation body below is reproduced from the official source so commands and identifiers stay exact. Each section carries a short note describing what it contains.

SimpleX Chat ↗ is a private, decentralised messaging platform where users own their contacts and groups. Unlike other platforms, SimpleX assigns no persistent user IDs — every contact is identified by an opaque internal ID generated at connection time, which makes it one of the most private messengers available.

Run hermes gateway setup and pick SimpleX for a guided walk-through.

Prerequisites

Explains the idea itself. Read it slowly; the later sections build on it.

  • The simplex-chat CLI installed and running as a daemon
  • Python package websockets (pip install websockets)

Install simplex-chat

Ordered, practical steps. Run one and confirm it worked before moving on.

Download the latest release from the simplex-chat GitHub releases ↗ page:

Shell3 lines
# Linux / macOS binary
curl -L https://github.com/simplex-chat/simplex-chat/releases/latest/download/simplex-chat-ubuntu-22_04-x86_64 -o simplex-chat
chmod +x simplex-chat

The SimpleX Chat project does not publish a prebuilt Docker image for the chat client; to run it under Docker, build from source from the simplex-chat repository ↗.

Start the daemon

Explains the idea itself. Read it slowly; the later sections build on it.

Shell1 line
simplex-chat -p 5225

The daemon listens on WebSocket at ws://127.0.0.1:5225 by default.

Configure Hermes

A lookup table. Do not read it all; find the row that applies to you. Commands here: hermes gateway setup.

Via setup wizard

Shell1 line
hermes gateway setup

Select SimpleX Chat and follow the prompts.

Via environment variables

Add these to ~/.hermes/.env:

Text3 lines
SIMPLEX_WS_URL=ws://127.0.0.1:5225
SIMPLEX_ALLOWED_USERS=<contact-id-1>,<contact-id-2>
SIMPLEX_HOME_CHANNEL=<contact-id>
VariableRequiredDescription
SIMPLEX_WS_URLYesWebSocket URL of the simplex-chat daemon
SIMPLEX_ALLOWED_USERSRecommendedComma-separated allowlist. Each entry can be a numeric contactId or a display name — both forms work.
SIMPLEX_ALLOW_ALL_USERSOptionalSet true to allow every contact (use carefully)
SIMPLEX_AUTO_ACCEPTOptionalAuto-accept incoming contact requests (default: true)
SIMPLEX_GROUP_ALLOWEDOptionalComma-separated group IDs the bot participates in, or * for any group. Omit to ignore group messages entirely
SIMPLEX_HOME_CHANNELOptionalDefault contact/group ID for cron job delivery
SIMPLEX_HOME_CHANNEL_NAMEOptionalHuman label for the home channel
HERMES_SIMPLEX_TEXT_BATCH_DELAYOptionalQuiet-period seconds (default: 0.8) used to concatenate rapid-fire inbound text messages into one event

Find your contact ID or display name

Settings you configure once. Change one at a time so you can see what each does. Set SIMPLEX_ALLOWED_USERS in your environment, not in the chat.

After starting the daemon, open a conversation with your agent contact. The numeric contactId appears in session logs. If you'd rather use the display name shown in the SimpleX UI, that works too — SIMPLEX_ALLOWED_USERS accepts either form.

Authorization

Settings you configure once. Change one at a time so you can see what each does. Set SIMPLEX_ALLOWED_USERS in your environment, not in the chat.

By default all contacts are denied. You must either:

  1. Set SIMPLEX_ALLOWED_USERS to a comma-separated list of contactIds and/or display names (e.g. SIMPLEX_ALLOWED_USERS=4,alice matches either contactId 4 or the contact whose display name is "alice"), or
  2. Use DM pairing — send any message to the bot and it will reply with a pairing code. Enter that code via hermes pairing approve simplex <CODE>.

Group chats

Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes send. Set SIMPLEX_GROUP_ALLOWED in your environment, not in the chat.

By default the adapter ignores group messages — a bot in a group otherwise processes every member's traffic. Opt-in explicitly:

Text3 lines
SIMPLEX_GROUP_ALLOWED=12,34          # specific group IDs
# or
SIMPLEX_GROUP_ALLOWED=*              # any group the bot is in

Address groups by prefixing the chat ID with group:, e.g. simplex:group:12 as a cron deliver= target or in a hermes send call.

Sending with `hermes send`

Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes send. Set SIMPLEX_HOME_CHANNEL in your environment, not in the chat.

SimpleX works as a standalone send target — the daemon must be running, but a live gateway is not required for plain text:

Shell3 lines
hermes send --to simplex:alice "hello"          # DM by contact display name
hermes send --to simplex:group:12 "hello"       # group by numeric ID
hermes send --to simplex "hello"                # SIMPLEX_HOME_CHANNEL

While the gateway is running, the adapter enumerates your contacts and allowed groups into the channel directory (refreshed every 5 minutes), so hermes send --list shows them by name. Before the first gateway run the platform still appears in --list with a "no channels discovered yet" hint — direct targets like the ones above work regardless.

Attachments

Explains the idea itself. Read it slowly; the later sections build on it.

The adapter supports native SimpleX attachments in both directions:

  • Inbound — incoming images, voice notes, and files are accepted via the daemon's XFTP flow (rcvFileDescrReady → /freceive → wait for rcvFileComplete) and surfaced as MessageEvent.media_urls with the appropriate MessageType (PHOTO, VOICE, TEXT + document).
  • Outbound — send_image_file, send_voice, send_document, and send_video all use the structured /_send form with filePath, so the receiving SimpleX client renders images inline and plays voice notes inline rather than offering them as downloads.

Agent replies can also embed MEDIA:/path/to/file tags in plain text — the adapter strips the tag from the body and sends the file as either a voice note (audio extensions) or a document.

Using SimpleX with cron jobs

Settings you configure once. Change one at a time so you can see what each does. Commands here: hermes send, hermes send simplex:. Set SIMPLEX_HOME_CHANNEL in your environment, not in the chat.

Python6 lines
cronjob(
    action="create",
    schedule="every 1h",
    deliver="simplex",          # uses SIMPLEX_HOME_CHANNEL
    prompt="Check for alerts and summarise."
)

Or target a specific contact via the cron job's deliver: field, or from a shell script with the hermes send CLI:

Shell1 line
hermes send simplex:<contact-id> "Done!"

Privacy notes

Explains the idea itself. Read it slowly; the later sections build on it.

  • SimpleX never reveals phone numbers or email addresses — contacts use opaque IDs
  • The connection between Hermes and the daemon is local WebSocket (ws://127.0.0.1:5225) — no data leaves your machine
  • Messages are end-to-end encrypted by the SimpleX protocol before reaching the daemon

Troubleshooting

A troubleshooting section. Find the symptom that matches yours rather than reading it end to end.

"Cannot reach daemon" — Ensure simplex-chat -p 5225 is running and the port matches SIMPLEX_WS_URL.

"websockets not installed" — Run pip install websockets.

Messages not received — Check that the contact's ID is in SIMPLEX_ALLOWED_USERS or approve them via DM pairing.

Knowledge check

3 questions answered by this page alone.

Every option is a real identifier from the Hermes documentation. The wrong ones are real too, just from other pages.

1. In this lesson's table, what is the “Required” for “SIMPLEXHOMECHANNEL”?
2. Which of these environment variables actually appears in this lesson?
3. Which of these headings does not appear in this lesson?