Chat
The Chat module provides real-time messaging across your organization. It supports group channels, direct messages, project-linked chats, message threads, reactions, file sharing, pinned messages, typing indicators, and voice/video calls via external conferencing.
Overview
The Chat system is built on Socket.io for real-time communication with Postgres as the source of truth. Messages are persisted to tenant-scoped tables and delivered instantly via WebSockets. The chat supports three conversation types: channels (group chats), direct messages (1-on-1), and project chats (auto-created and synced with project members).
Getting Started
Navigate to Chat in the sidebar. Youʼll see a three-column layout: channel list (left), message area (center), and detail panel (right).
Starting a Conversation
- Direct Message: Click Direct Message, select a user, and start chatting
- Group Channel: Click New Channel, enter a name and description, select members, and create
- Project Chat: Automatically created when a project is created — members are synced from the project
Core Concepts
Channel Types
- Channels — Group conversations with a name, description, and member list. Only the creator and admins can add/remove members or delete the channel.
- Direct Messages — Private 1-on-1 conversations. DMs can be removed from your list without deleting the conversation for the other person.
- Project Chats — Linked to projects. Members are managed through the project (add/remove from project = add/remove from chat).
Message Features
Messages support rich text formatting (bold, italic, strikethrough, code), @mentions, emoji reactions, threaded replies, file attachments, editing, deletion, and pinning.
Features
Real-Time Messaging
Messages appear instantly for all channel members via Socket.io WebSocket connections. Typing indicators show who is currently composing a message.
Rich Text Formatting
Format messages with bold (**text**), italic (*text*), strikethrough (~~text~~), inline code (`code`), code blocks (```), links, and lists. A formatting toolbar is available in the message composer.
Emoji Reactions
React to any message with emojis. Quick reactions: thumbs up, heart, smile, celebration, eyes, rocket, laughing, fire. View who reacted by hovering over the reaction count.
Thread Replies
Start a thread on any message to keep conversations organized. Threads open in the right panel with the parent message and all replies. Reply counts are shown on the parent message.
File Sharing
Attach files to messages. Images are previewed inline. All file types are supported. Files are stored in the tenantʼs cloud storage.
Pinned Messages
Pin important messages to a channel. Pinned messages are accessible from the channel header and the right panel. Useful for announcements, links, or reference info.
Voice & Video Calls
Start audio or video calls directly from any channel or DM. Powered by external conferencing. Call participants see who is speaking, and calls support screen sharing.
Member Management
Channel creators and admins can add or remove members. Members can leave channels voluntarily. Changes are announced via system messages.
Unread Tracking
Channels show unread message counts. Messages are marked as read when you view the channel. Unread counts are batched efficiently to avoid N+1 queries.
Workflows
Creating a Team Channel
- Click New Channel in the sidebar
- Enter channel name (e.g., "engineering") and optional description
- Select members from the list
- Click Create
- The channel appears and members can start chatting immediately
Managing Channel Members
- Open the channel and click the members panel (right sidebar)
- To add: use the member dropdown at the top of the panel
- To remove: click the X next to a memberʼs name
- Changes are announced via system messages
Best Practices
- Use channels for team or topic-based discussions, DMs for 1-on-1 conversations
- Pin important announcements or reference messages
- Use threads to keep conversations organized rather than creating long linear discussions
- Add channel descriptions so new members understand the purpose
- Project chats are managed through projects — update project members, not chat members directly