Channels
Channels are the ordered top-level structure of a server. They live in channels.json and are loaded into memory at startup. Text, forum, and voice channels are exposed only when the requester can view them; separators are always retained in channels_get for layout.
Channel types
Section titled “Channel types”| Type | Purpose | Type-specific state |
|---|---|---|
text |
Linear conversation | Last message, current user’s last message, slow mode |
forum |
Container for named threads | Visible thread list |
voice |
Peer-state coordination | Connected users and mute state |
separator |
Visual organization | size controls the UI spacing/padding rendered around it; retained even though it has no messages |
Every channel has an internal name and can have display_name, description, permissions, max_message_age, and slow-mode cooldown. Names are unique and validated by channelNameError. A separator’s size is a presentation hint: clients use it as the amount of padding or empty space around the separator. max_message_age is stored metadata only in the current server; no cleanup path reads or enforces it.
Permissions and visibility
Section titled “Permissions and visibility”The public channel serializer overlays the complete default permission set onto any channel overrides. view determines whether a channel is included and whether its live events can be broadcast to a connection. Other actions include send, delete, delete_own, edit, edit_own, react, pin, and create_thread.
Mutations and client refresh
Section titled “Mutations and client refresh”Create, update, move, and delete require manage_channels, persist through src/db/channels/management.osl, record an audit event, then call refreshChannels. Clients advertising channel_get can receive a focused refresh when one unchanged-name channel changes; otherwise the server sends a full channels_get list.
See the channel command pages and manage channels guide.
