Instabug (Luciq) → Mushi
Hours Low riskInstabug rebranded to Luciq in 2026. The legacy instabug-reactnative
package is archived and points users at luciq-reactnative-sdk. This guide
maps both names — pick whichever your app currently uses.
This is a low-risk swap because both products solve the same shape of problem (in-app bug capture) and use very similar config. Most apps land the cutover in an afternoon, including a beta validation pass.
Why switch
- Pricing. Mushi is open source; Luciq is per-seat enterprise.
- AI triage. Mushi ships a built-in two-stage classifier (fast-filter + classify-report) that turns raw user reports into triaged tickets without manual review. Luciq’s “Agentic AI” is a recent add-on.
- Self-host. Mushi can self-host on Supabase / your own Postgres; Luciq is SaaS-only.
- No vendor rebrand whiplash. You own the bug-capture surface.
API mapping
| Instabug / Luciq | Mushi |
|---|---|
Instabug.start(token, [...invocationEvents]) | Mushi.init({ projectId, apiKey, ... }) |
Luciq.init({ token }) | Mushi.init({ projectId, apiKey }) |
Instabug.show() / Luciq.show() | Mushi.openWidget() |
Instabug.identifyUser(email, name) | Mushi.setUser({ id, email, name }) |
Instabug.setUserAttribute(k, v) | Mushi.setMetadata({ [k]: v }) |
Instabug.addCustomLog(log) | Captured automatically; or Mushi.captureLog(log) |
invocationEvents: [InvocationEvent.shake] | widget: { trigger: 'shake' } |
invocationEvents: [InvocationEvent.floatingButton] | widget: { trigger: 'button' } |
setReproStepsConfig(...) | Captured automatically (console + network + navigation) |
| Crash reporting | Stays where it is. Mushi composes with Sentry/Crashlytics; we don’t replace them. |
Before / After
Web
// BEFORE — Instabug Web
import * as Instabug from 'instabug'
Instabug.start('YOUR_TOKEN', { invocationEvents: ['shake', 'floatingButton'] })
Instabug.identifyUser('user@example.com', 'Jane Doe')// AFTER — Mushi
import { Mushi } from '@mushi-mushi/web'
Mushi.init({
projectId: 'YOUR_PROJECT_ID',
apiKey: 'YOUR_PUBLIC_KEY',
widget: { trigger: 'both' }, // shake + button
})
Mushi.setUser({ id: 'user-42', email: 'user@example.com', name: 'Jane Doe' })React Native
// BEFORE — Luciq React Native
import Luciq, { LogLevel } from 'luciq-reactnative-sdk'
Luciq.init({
token: 'YOUR_TOKEN',
invocationEvents: [Luciq.invocationEvent.shake],
debugLogsLevel: LogLevel.Verbose,
})
Luciq.identifyUser('user@example.com', 'Jane Doe', 'user-42')// AFTER — 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 { 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
- Step 01Create a Mushi project (or pick an existing one)
- Step 02Install the right Mushi SDK
- Step 03Mount 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 |
|---|---|---|
| Shake to report | ✅ | ✅ (widget.trigger: 'shake') |
| Floating button | ✅ | ✅ (widget.trigger: 'button') |
| Screenshot on report (web) | ✅ | ✅ (capture.screenshot: 'on-report') |
| 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 |
| In-app chat | ✅ (Luciq Chats) | ❌ — out of scope |
| Self-hosted option | ❌ | ✅ |
| AI triage built-in | Add-on | ✅ (default) |
| Open source | ❌ | ✅ |
If you actively use Luciq’s surveys or in-app chat, you’d keep those surfaces on Luciq even after migrating bug capture to Mushi — they’re unrelated products in the same SDK.
Rollback
If Mushi doesn’t fit, the rollback is just removing the Mushi package and re-adding Instabug/Luciq. Your Luciq backend doesn’t lose data. Because we recommend ≥ 3 days of dual-ship before removing Luciq, you have a clean snapshot to compare against.