Bootstrapwarebootstrapware

Features

What Bootstrapware Chat includes

A narrow embeddable messenger: 1:1 and groups, rename, unread, drafts, host-asserted identity, BYO or Hosted storage, and app config, without public chat pages.
Chat conversation list with unread badges and an idle thread.Group thread Launch checklist with member add, Leave, and messages from Kai and Ada.

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.

Group title rename

When member management is on, group members can rename the title with setTitle. A blank create still stores Group. Direct threads have no title editor.

Read and unread

Per-member unread counts. markRead is part of the adapter contract. markUnread moves this viewer's read cursor to just before the latest message from someone else. Other members stay unchanged.

Unread filter and New messages

An Unread toggle hides read conversations in the loaded list. The open thread stays visible after it is marked read. Opening a thread shows one New messages divider where unread started.

Composer drafts

Unsent composer text is kept in this browser per conversation. The inbox shows Draft: plus that text instead of the last message while a draft exists. Pending attachments stay in memory for the session.

Per-conversation notification mute

After Notify is on, Mute stores a per-conversation browser-notification mute in this browser. Other conversations still notify. Mute does not request Notification permission.

Section, launcher, or window

presentation is section, launcher, or window, with optional defaultOpen. theme is light or dark. Omit theme and the inbox stays the light default. Hosts skin with --bsw-ch-* tokens.

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.