Channels protocol v7, self-hosted

Realtime messaging you run yourself.

Arc holds the WebSocket connections, groups them into channels, tracks who is present, and gives your backend a signed HTTP API to publish to them. Existing client and server SDKs work against it by changing the host and credentials.

docker run -p 4000:4000 kryptonhq/arc:latest

Every channel type on day one

Public, private, presence, end-to-end encrypted and cache channels, plus a channel per signed-in user.

Presence that doesn't drift

Members are counted per user, not per connection, and converge across nodes after a partition.

Webhooks that don't flap

Occupancy events are held briefly, so a reconnecting client produces no traffic at all.

Channels by prefix

A channel is a name. Its prefix decides what it allows.

  • publicanyone may subscribe
  • private-your backend authorises
  • presence-who is here, by user
  • private-encrypted-the server relays ciphertext
  • cache-last event replayed on subscribe
How channels work