Real-time messaging with threads, search, attachments and entity references
Real-time messaging built into FreeMaint for maintenance teams
Team Chat lets your maintenance team communicate in real time inside FreeMaint — no more switching to Slack or WhatsApp to discuss a work order. Included on every plan, the free Core plan too.
Team Chat is included on every plan, the free Core plan too, since October 2026. File attachments count against your plan's storage quota.
When you first open Chat, the conversation list is empty. Click 'New DM' or 'New group' to start one.
Chat has its own entry in the left sidebar (speech-bubble icon). Click Chat to open the messaging page — the conversation list is on the left and the active conversation on the right.
Start a 1:1 conversation with anyone in your company
Direct messages are private 1:1 conversations between you and another team member. They are find-or-create — clicking 'New DM' with a user already in a DM with you reopens the existing conversation instead of creating a duplicate.
Pick yourself in the recipient list to create a 'Notes to self' conversation — a private space for reminders, snippets and quick references. Self-DMs behave exactly like normal DMs except no one else can read them.
DMs are idempotent: opening the same DM twice returns the same conversation, never a duplicate.
The "New direct message" and "New group" pickers search every colleague who can sign in, by name — requesters and read-only users included, and they can start conversations too. Your own entry, "Notes to self", sits at the top of the direct message picker; you are never listed when choosing group members, because you are added automatically.
Multi-person conversations with up to 50 members
Group chats let multiple team members discuss together. Cap is 50 members including the creator (49 + you).
In the mobile app, open Chat, tap the pen button, then "New group": pick at least one colleague (up to 49 besides you), name the group and tap Create. "New direct message" starts a one-to-one conversation.
Keep focused discussions out of the main timeline
When a message generates a long discussion, reply in a thread instead of stretching the main conversation. Replies stay attached to their parent message and appear nested underneath it, so nothing you are notified about is ever missing from the timeline. Threads are depth-1 (Slack-style) — you can't reply to a reply.
Use threads for any discussion that lasts more than 3-4 messages — keeps the main timeline scannable. On a narrow window the focused view opens as a side sheet.
Find any message across all conversations you belong to
Search lets you find messages by content across every conversation you're a member of. Results are case-insensitive, support unicode (accents, non-Latin scripts), and exclude soft-deleted messages.
Search runs across every conversation you're a member of. You can also pass a conversationId to scope the search to a single conversation (useful for very long histories).
Search is case-insensitive and unicode-aware — you can search 'café', 'résumé' or '会議' just like English words.
Share photos, PDFs and files in conversations
Attach any file up to 10 MB to a message. Images render as inline previews; other files appear as clickable download links with the original filename and size.
In the mobile app, the paperclip left of the message field attaches photos (camera or library) and files (PDF, Word, Excel), up to 10 per message and 10 MB each. Send waits until every file has uploaded, and you can send files without text. Received photos open full screen and files open in the phone's viewer. Attachments need a connection.
On macOS, use Cmd+Shift+Ctrl+4 to copy a screenshot region, then paste it directly into the chat composer — fastest way to share what you're seeing.
See who's writing in real time
While someone is typing in a conversation you're viewing, their name appears below the message list with three bouncing dots — like in WhatsApp or Telegram.
The frontend emits a 'typing' WebSocket event throttled to once every 2 seconds while you write. Other clients in the conversation receive the event and show the indicator. After 5 seconds without a new event, the indicator disappears automatically.
Typing indicators are pure WebSocket relay — no data is stored. The indicator only shows to other members of the conversation; you never see your own indicator.
Link Work Orders, Assets, Parts directly in messages
Entity references turn FreeMaint Chat into a CMMS-aware messenger. Mention a Work Order, Asset, Part or any of 8 supported entity types and the message renders an inline card with status, title and a clickable link.
If a recipient does not have permission to see the referenced entity (cross-company, deleted, or scope-restricted), the card renders as 'Restricted' with only the type and ID — no leaking title or status.
Messages appear instantly without refresh
FreeMaint Chat uses a Socket.IO WebSocket connection to deliver messages, edits, deletes and typing events instantly. No page refresh needed.
If your WebSocket connection drops (network blip, lock screen), the frontend keeps a 30-second polling resync as a safety net. Once the WebSocket reconnects, polling becomes silent again.
Each conversation is its own Socket.IO room (chat:companyId:conversationId). When you open a conversation, the client subscribes; when you switch, it unsubscribes. Membership is verified server-side at subscribe time — non-members can't eavesdrop.
FreeMaint CMMS
© 2026 FreeMaint. All rights reserved.