Instabug (Luciq) → Mushi Mushi
Hours Low riskWhy switch
- Open source and price. Mushi Mushi SDKs are MIT and the server is AGPLv3. Self-hosting is free; the cloud is free for one app and 100 diagnoses a month. Compare with your Luciq contract.
- AI triage. Mushi Mushi ships a built-in two-stage classifier (fast-filter + classify-report) that turns raw user reports into triaged tickets without manual review.
- Self-host. Mushi Mushi can run on your own Supabase / Postgres.
API mapping
The calls on the right are on the instance from useMushi()
(@mushi-mushi/react-native).
| Instabug / Luciq (React Native) | Mushi Mushi |
|---|---|
Luciq.init({ token, invocationEvents }) (older Instabug SDKs: Instabug.init / Instabug.start) | <MushiProvider projectId apiKey config={...}> at the app root |
Luciq.show() | mushi.open() |
Luciq.identifyUser(email, name, id) | mushi.setUser({ id, email, name }) |
Luciq.setUserAttribute(k, v) | mushi.setMetadata(k, v) |
| Custom logs | Console, network and navigation are captured automatically; add your own with mushi.addBreadcrumb({ category: 'custom', level: 'info', message }) |
invocationEvents: [InvocationEvent.shake] | config.widget.trigger: 'shake' (needs expo-sensors) |
invocationEvents: [InvocationEvent.floatingButton] | config.widget.trigger: 'button' (the default) |
invocationEvents: [shake, floatingButton] | config.widget.trigger: 'both' |
| Repro steps | Captured automatically (console + network + navigation) |
| Crash reporting | Stays where it is. Mushi Mushi works next to Sentry / Crashlytics; it doesn’t replace them. |
Before / After (React Native)
// BEFORE: Luciq React Native
import Luciq, { InvocationEvent } from '@luciq/react-native'
Luciq.init({
token: 'YOUR_TOKEN',
invocationEvents: [InvocationEvent.shake],
})
Luciq.identifyUser('user@example.com', 'Jane Doe', 'user-42')// AFTER: Mushi Mushi React Native
import { MushiProvider } from '@mushi-mushi/react-native'
export default function App() {
return (
<MushiProvider
projectId="YOUR_PROJECT_ID"
apiKey="YOUR_PUBLIC_KEY"
config={{ widget: { trigger: 'shake' } }}
>
<RootNavigator />
</MushiProvider>
)
}
// Inside any screen:
import { useEffect } from 'react'
import { useMushi } from '@mushi-mushi/react-native'
function ProfileScreen() {
const mushi = useMushi()
useEffect(() => {
mushi.setUser({ id: 'user-42', email: 'user@example.com', name: 'Jane Doe' })
}, [mushi])
// ...
}Migration checklist
Migration checklist
9 required steps
- Step 01Create a Mushi Mushi project (or pick an existing one)
- Step 02Install the Mushi Mushi React Native SDK
- Step 03Mount Mushi Mushi alongside Instabug/Luciq (do NOT remove yet)
- Step 04Wire setUser / setMetadata for parity
- Step 05Verify console + network + screenshot capture
- Step 06Run dual-SDK in beta for ≥ 3 days
- Step 07Update internal docs / runbooks
- Step 08Remove Instabug / Luciq SDK
- Step 09Revoke the Instabug/Luciq token in their dashboard
Feature parity at a glance
| Capability | Instabug / Luciq | Mushi Mushi |
|---|---|---|
| Shake to report | ✅ | ✅ (widget.trigger: 'shake', needs expo-sensors) |
| Floating button | ✅ | ✅ (widget.trigger: 'button') |
| Screenshot on report | ✅ | ✅ (capture.screenshot: true, needs react-native-view-shot) |
| Console + network capture | ✅ | ✅ (default on) |
| Repro steps timeline | ✅ | ✅ (auto from console + network + navigation) |
| Crash reporting | ✅ | ❌ (keep Sentry / Crashlytics for crashes) |
| Surveys / NPS | ✅ | ❌ (out of scope) |
Mushi Mushi can also be self-hosted, its SDKs and server are open source, and it runs AI triage on every report by default.
If you use Luciq’s surveys, keep them on Luciq after moving bug capture to Mushi Mushi.
Rollback
If Mushi Mushi doesn’t fit, remove the Mushi Mushi package and re-add the Luciq SDK. Because this guide has you dual-ship for at least 3 days before removing Luciq, you have both sets of reports to compare.
References
Last updated on