LogRocket Feedback → Mushi
Hours Low riskLogRocket bundles session replay and bug feedback in one SDK. This guide moves the feedback widget to Mushi while you keep LogRocket for session replay (or migrate replay separately later — that’s not Mushi’s job).
You can run both SDKs side by side indefinitely. LogRocket records the session; Mushi captures the user’s report. Mushi can attach a LogRocket session URL to every report via metadata, so triagers get one-click access to the replay.
Why switch (the feedback piece)
- Replay-coexistence by design. LogRocket’s strength is session replay; its bug-feedback widget is a thin add-on. Mushi is feedback-first with a Shadow-DOM widget that doesn’t interfere with replay.
- AI triage. Mushi’s two-stage classifier and judge loop turn raw reports into triaged tickets without a human pass.
- Self-host. Mushi runs on Supabase / your own Postgres; LogRocket is SaaS-only.
- Privacy. Mushi’s capture is localized (one report at a time, on user trigger). LogRocket records continuously by default — even after switching the feedback widget, you’ll still want LogRocket’s privacy controls.
API mapping
| LogRocket | Mushi |
|---|---|
LogRocket.init('app/id') | Mushi.init({ projectId, apiKey }) (mounted separately) |
LogRocket.identify(uid, traits) | Mushi.setUser({ id: uid, ...traits }) |
LogRocket.captureMessage(msg) | Submit a report via the widget OR Mushi.report({ description: msg }) |
LogRocket.captureException(err) | Mushi.report({ description: err.message }) (or hook into your error boundary) |
LogRocket.track(name, props) | Mushi.setMetadata({ lastEvent: name, ...props }) |
<FeedbackButton /> (React) | <MushiProvider> widget OR your own button calling mushi.openWidget() |
LogRocket.sessionURL | Attach as metadata on Mushi reports — see below |
Linking LogRocket session URLs into Mushi reports
This is the killer recipe — every Mushi report includes a one-click “Open session in LogRocket” link, so triagers can watch the replay without leaving the Mushi dashboard.
import LogRocket from 'logrocket'
import { Mushi } from '@mushi-mushi/web'
LogRocket.init('your-app/id')
Mushi.init({ projectId: 'YOUR_PROJECT_ID', apiKey: 'YOUR_PUBLIC_KEY' })
LogRocket.getSessionURL((sessionUrl) => {
Mushi.setMetadata({ logrocketSession: sessionUrl })
})
LogRocket.identify('user-42', { email: 'jane@example.com' })
Mushi.setUser({ id: 'user-42', email: 'jane@example.com' })Now every Mushi report carries the LogRocket session URL in its metadata. In the admin console, the metadata viewer renders it as a clickable link.
Migration checklist
- Step 01Create a Mushi project
- Step 02Install Mushi alongside LogRocket
- Step 03Mount Mushi (LogRocket stays as-is)
- Step 04Wire LogRocket session URL into Mushi metadata
- Step 05Mirror LogRocket.identify into Mushi.setUser
- Step 06Disable the LogRocket feedback widget
- Step 07Update internal runbooks
- Step 08Submit a test report and verify the LogRocket link works
Feature parity (feedback only — replay is its own product)
| Capability | LogRocket Feedback | Mushi |
|---|---|---|
| User-triggered report widget | ✅ | ✅ |
| Screenshot capture | ✅ | ✅ (web) |
| Console + network capture | ✅ (also covers replay) | ✅ |
| AI triage | ❌ | ✅ |
| Self-host | ❌ | ✅ |
| Open source | ❌ | ✅ |
| Session replay | ✅ | ❌ — keep LogRocket |
| Heatmaps | ✅ | ❌ |
| Funnels / analytics | ✅ | ❌ |
The takeaway: Mushi replaces the feedback widget, not the replay. Keep LogRocket for what it’s best at; use Mushi where bug capture benefits from AI triage + open source + self-host.