Features
What Bootstrapware Chat includes


1:1 conversations
Direct threads unique per pair of host-asserted ids. No invite links.
Groups up to 20
Optional title, add, remove, and leave when allowMemberManage is on.
Read and unread
Per-member unread counts. markRead is part of the adapter contract.
Plain-text messages
4,000 character cap. Sender edit and delete. Deleted messages stay as a tombstone.
Attachments
jpeg, png, webp, gif, PDF. 10 MB each, 4 per message. Hosted freeze cap at 1 GB or 10 GB.
Conversation search
Hosted search is conversation-scoped. BYO can implement searchMessages.
Live updates
Hosted SSE plus a 4 second poll fallback. BYO optional subscribe.
Opt-in browser notifications
Notify in the widget header is default off. Load never prompts. After the user opts in, hidden-tab messages from others can show a system notification. Visible-tab, self, opted-out, and denied permission do not. No email, SMS, or server push.
BYO adapter
Implement conversations, messages, members, and files on your API. We host app config only.
Hosted messages
Omit the adapter; pass appId + publishable key. Messages and files store on Bootstrapware.
Host-asserted identity
Pass user={{ id }}. Opaque stable ids. Optional name, email, avatarUrl for display only.
Embed-only chat
No public chat URLs. The widget is for authenticated product embeds.
App configuration
allowDirect, allowGroups, allowAttachments, allowMemberManage, empty state, branding, origins.
Configuration revisions
Draft without changing what live clients load until you publish.
Test and live environments
bsw_test_* and bsw_live_* keys. Live config needs BYO or Hosted entitlement.
Operational sessions
Dashboard usage metadata and Hosted attachment bytes vs cap. Never message bodies.
Webhooks
Conversation, message, and member events with HMAC signing. Identifiers only.
Moderation tools (Hosted)
Dashboard inbox for Team send, delete, archive, and JSON export.
MCP for app config
Create, draft, and publish apps from Cursor. Never message bodies or file bytes.