React component reference
Package: @bootstrapware/feedback
Styles: @bootstrapware/feedback/styles.css
Import styles once near the feature. Use a Client Component in Next.js App Router. Bootstrapware does not authenticate board end users, pass user from your session.
Props
| Prop | Type | Required | Notes |
|---|---|---|---|
| user | FeedbackAuthor | null | recommended | Opaque stable id. Optional name, email, avatarUrl for display. |
| adapter | FeedbackAdapter | BYO / local | If set, wins over Hosted. Use createLocalAdapter or your own API. |
| boardId | string | Hosted / BYO config | With publishableKey for Hosted. Defaults to brd_local for local adapter. |
| publishableKey | string | Hosted | Browser-safe. Never put secret keys in the client. |
| apiBaseUrl | string | no | Defaults to https://feedback.bootstrapware.co |
| posts | FeedbackPost[] | no | Seed posts for createLocalAdapter / demos. |
| config | Partial<FeedbackBoardConfig> | no | Overrides toggles / empty state until Hosted config loads. |
| authorToken | string | no | Short-lived host-signed assertion from POST /api/v1/author-tokens (secret key). Required when the board sets requireAuthorToken. |
| className | string | no | Wrapper class for layout. |
Resolve order
- If
adapteris passed, use it (BYO orcreateLocalAdapter). - Else if both
boardIdandpublishableKeyare set, use Hosted (createHostedAdapterinternally). - Else fall back to
createLocalAdapter(demo / free).
Local / demo
import { Feedback, createLocalAdapter } from "@bootstrapware/feedback";
import "@bootstrapware/feedback/styles.css";
<Feedback
user={{ id: "user_1", name: "Ada" }}
adapter={createLocalAdapter({ storageKey: "demo-feedback" })}
/>Hosted
<Feedback
boardId="brd_..."
publishableKey="bsw_live_pub_..."
user={currentUser}
/>Live config fetch needs BYO ($9.99) or Hosted ($19.99). Live Hosted writes need Hosted ($19.99). Test publishable keys work unpaid.
Limits in the UI
Title max 200 characters. Body max 5000. Statuses: open | planned | in_progress | shipped | declined. See limits.
Similar requests
When the compose title is at least 4 characters, the widget looks for similar posts. Hosted and BYO debounce listPosts({ q }) so matches are not limited to the currently loaded page. Local mode uses in-memory substring/token overlap (no network search). Up to 3 clickable results jump to the existing post and focus Vote. Not embeddings or fuzzy NLP.
Related: Modes · Adapter · Identity · Quickstart · Limits