@fogg/bug-reporter
v1.2.6
Published
Production-ready React bug reporting SDK with screenshot, recording, diagnostics, and pluggable storage backends.
Maintainers
Readme
bug-reporter
@fogg/bug-reporter is a React 16.8+ SDK for collecting production bug reports with screenshot capture, short screen recording, diagnostics, and pluggable storage backends.
Install
npm install @fogg/bug-reporterQuickstart
import { BugReporter } from "@fogg/bug-reporter";
import "@fogg/bug-reporter/styles.css";
export function App() {
return (
<BugReporter
config={{
apiEndpoint: "/api/bug-reports",
storage: {
mode: "local-public",
local: { uploadEndpoint: "/api/uploads" }
}
}}
/>
);
}UI Visibility
Use component props to control the screenshot button and screenshot upload drop zone independently.
<BugReporter
config={{
features: { screenshot: true, recording: true }
}}
showScreenshotButton={false}
showDragAndDrop={true}
/>Defaults:
showScreenshotButton:falseshowDragAndDrop:true
Controlled Submit (No SDK Endpoints)
If you prefer to handle uploads/submission yourself, pass onSubmit.onSubmit receives issue/context/reporter data and assets as data URLs (base64) for both screenshots and recordings.
import { BugReporter } from "@fogg/bug-reporter";
import type { BugReporterSubmitData } from "@fogg/bug-reporter";
async function handleSubmit(payload: BugReporterSubmitData) {
// Every asset includes a base64 data URL.
console.log("title", payload.issue.title);
console.log("assets", payload.assets);
payload.assets.forEach((asset) => {
console.log(asset.type, asset.base64.slice(0, 64));
});
}
export function App() {
return (
<BugReporter
config={{
features: { screenshot: true, recording: true }
}}
onSubmit={handleSubmit}
/>
);
}To prefer full-screen-only capture for recordings:
<BugReporter
config={{
features: {
recording: true,
recordingEntireScreenOnly: true
}
}}
/>If you need screenshots to include cross-origin iframe areas, enable picker fallback explicitly:
<BugReporter
config={{
features: {
screenshot: true,
screenshotCrossOriginFallback: true
}
}}
/>Capture Console Errors and Requests
Enable these flags in config to attach logs and request traces to each report:
<BugReporter
config={{
apiEndpoint: "/api/bug-reports",
storage: { mode: "proxy", proxy: { uploadEndpoint: "/api/bug-assets" } },
features: {
consoleLogs: true,
networkInfo: true
},
diagnostics: {
consoleBufferSize: 200,
requestBufferSize: 300
}
}}
/>S3 Storage Example
Use this when your backend returns presigned upload URLs.
import { BugReporter } from "@fogg/bug-reporter";
import "@fogg/bug-reporter/styles.css";
export function App() {
return (
<BugReporter
config={{
apiEndpoint: "https://api.example.com/bug-reports",
projectId: "web-app",
environment: "production",
storage: {
mode: "s3-presigned",
s3: {
presignEndpoint: "https://api.example.com/bug-assets/presign",
publicBaseUrl: "https://cdn.example.com"
}
}
}}
/>
);
}See docs/backend-s3.md for the backend request/response contract.
Docs
docs/quickstart.mddocs/framework-nextjs.mddocs/framework-vite.mddocs/framework-cra.mddocs/framework-remix.mddocs/backend-s3.mddocs/backend-local.mddocs/security.mddocs/browser-compatibility.mddocs/known-limitations.md
Development
npm install
npm run lint
npm run typecheck
npm test
npm run buildLocal Sandbox (Vite)
npm run sandbox:viteSandbox app path: examples/sandbox-vite.
Publish To npm
- Login to npm:
npm login- Verify quality/build locally:
npm run release:verify- Verify package contents before publishing:
npm run publish:dry-run- Publish
@fogg/bug-reporter:
npm run publish:npmChangesets workflow
For versioned releases with Changesets:
npm run changeset
npm run version:packages
npm run releaseLicense
MIT
