SymorvaDocs
Modules

Chat & communities

Conversations, groups and tribes, with members, roles and join approvals. The foundation every Symorva community is built on.

Available· Runs today in the reference deployment

Chat is the foundation module. It provides direct and group conversations, community structure, roles and approvals, and the media every conversation carries. It is always enabled and runs entirely inside the operator's deployment, on the messaging-service component.

The messaging capabilities below run today in the reference deployment. The end-to-end encryption profile, tribes and channels, and the moderator and guest roles are part of the module design and are in developer preview.

Capabilities

CapabilityStatusNotes
Direct and group messagingAvailableText, images, video, voice, files, albums, replies, forwarding, reactions, polls
Groups up to 10,000 membersAvailableLarge-group mode above 500 members (see below)
Roles: owner, admin, memberAvailableOwner and admins manage members, settings and policy
Roles: moderator, guestPreviewAccepted by the schema today
Join approvals, invite links, QR invitationsAvailableControlled per group and by joinApproval
Official sticker packsAvailablePublished and ordered from the admin console, downloaded at runtime
Server-side policy before deliveryAvailableMutes, bans and send policy enforced before a message is delivered
Long-message splittingAvailableText over 4,096 UTF-16 code units is sent as several messages
Tribes and channelsPreviewCommunity sub-spaces above groups
End-to-end encryptionPreviewDefault true in the manifest; see Encryption

Configuration

symorva.config.json (excerpt)
{
  "modules": {
    "chat": {
      "e2ee": true,
      "tribes": true,
      "roles": ["owner", "admin", "moderator", "member"],
      "joinApproval": true,
      "maxGroupSize": 2000
    }
  }
}

Prop

Type

Roles

RoleIntended permissions
ownerFull control of the community or group, including transferring ownership and changing roles
adminManage members, approvals, settings and content policy; cannot remove the owner
moderatorAct on reports, mute members and approve join requests; no settings access
memberParticipate in the conversations they belong to
guestRead and post in explicitly shared conversations only; not listed in the member directory

The validator does not require owner to be present in roles; include it unless ownership is managed outside the app.

Groups and large groups

maxGroupSize accepts up to 10,000, the same ceiling the reference deployment enforces — clients cannot sync a group above it. Groups above 500 members run in large-group mode in the reference deployment: group read receipts, typing indicators and per-join notices are turned off, and offline push is sent only for mentions. A group leaves large-group mode when it falls to 10% below the threshold, so a group hovering around the line does not switch modes with every join and leave. The threshold is an operator setting (default 500, range 2 to 10,000).

Encryption

With e2ee: true, message content is encrypted on the sender's device and decrypted only on authorised recipient devices. The messaging service stores and routes ciphertext; attachment keys travel inside the encrypted message, so object storage holds ciphertext as well.

This profile is in developer preview. The reference deployment's messaging runs without end-to-end encryption and applies server-side content policy before delivery. With encryption on, server-side filters cannot inspect message bodies; moderation relies on member reports — which carry the reported content from the reporter's device — and on metadata-level controls.

Encryption does not cover metadata (sender, recipients, conversation, timestamps, sizes, group membership), operator system messages, meetings, AI inference or partner apps. See Data ownership & boundaries.

Events

Preview webhook events. Payloads carry identifiers and metadata only — never message content.

EventFired whenKey fields
chat.member.joinedA member joins the community or a groupmemberId, groupId
chat.member.leftA member leaves or is removedmemberId, groupId, reason
chat.join_request.createdA join request needs approvalrequestId, memberId, groupId
chat.join_request.resolvedA request is approved or rejectedrequestId, decision, resolvedBy
chat.role.changedA member's role changesmemberId, groupId, from, to
chat.group.createdA group is createdgroupId, ownerId, memberCount
chat.message.createdA message is accepted for deliverymessageId, conversationId, senderId, type, sentAt
chat.report.createdA member reports contentreportId, reporterId, targetType

Privacy scope

Message content is encrypted on the sender's device and decrypted only on authorised recipient devices.

That is the module's protection statement, as returned in the deployment plan. Until the encryption profile reaches general availability, operators who deploy with e2ee: false should tell members that message content is readable by the community server.

Shared services and metering

Chat uses no shared services and has no metered units. All messaging traffic stays inside the operator's deployment.

Limits

FieldBound
maxGroupSize2 to 10,000
rolesAt least one of owner, admin, moderator, member, guest
Single text message4,096 UTF-16 code units; longer input is split into several messages

On this page