Bootstrapwarebootstrapware

Security

Bootstrapware Chat security

Narrow boundaries: publishable keys in the client, secret keys on the server, host-asserted user ids, webhooks that carry operational ids (not message payloads), and an explicit Hosted content exception.
Host asserts user id. BYO keeps messages on your systems. Hosted stores plain text and files you moderate.

Publishable vs secret keys

  • bsw_test_pub_ / bsw_live_pub_: browser-safe for config and Hosted widget calls.
  • bsw_test_sec_ / bsw_live_sec_: server only. Never ship in client bundles or NEXT_PUBLIC_ / VITE_ env vars.

Dashboard login uses a user session cookie, not a secret API key in the browser. Mint and revoke stay on the Keys page. Docs: API keys.

Host-asserted user.id

Bootstrapware does not authenticate chat end users. Your host asserts an opaque stable user.id. Publishable key + forged author.id can be abused if the key leaks. Mitigate with allowed origins and optional authorToken (mint with your secret key; enable requireAuthorToken on the app). Treat client validation as UX, not a trust boundary.

Guide: host-asserted identity.

Origins and CORS

Browser calls to the Chat API are subject to per-app allowedOrigins on published config. Production should list the exact origins that embed the widget. This is not a substitute for keeping secret keys off the client. See origins.

BYO vs Hosted data path

  • BYO: message bodies and files never touch Bootstrapware. Your adapter hits your API. Enforce authz from the signed-in session.
  • Hosted: messages and files are stored on Bootstrapware. You moderate; you own content decisions. Cancel Hosted: freeze writes immediately; JSON export for 30 days; then delete.

MCP boundary

MCP configures apps only (list_apps, draft, publish, get_install_snippet, …). Never send message body or file bytes through MCP tools. Prefer OAuth Connect over putting secret keys in mcp.json.

Webhook signing

Deliveries POST JSON and sign the raw body with HMAC-SHA256. Verify header X-Bootstrapware-Signature (hex digest) using your endpoint secret. Payloads carry identifiers, not bodies or file bytes. See webhooks guide.

Hosted files

Allowlist types, 10 MB each, workspace cap with upload freeze. No virus scanning. You moderate. Details: attachments.

What Bootstrapware cannot access (BYO / local)

  • Message body and file bytes on BYO or local adapter
  • Your database
  • Your application session cookies (unless you send them yourself)
  • End-user passwords or OAuth tokens for your product login