Skip to Content
v0.8.0 · shippedNative iOS / Android / Flutter / Capacitor SDKs, A2A discovery, SOC 2 readiness, residency, BYO storage, BYOK. Read the changelog →
Migration guidesShake → Mushi

Shake → Mushi

Hours Low risk

Shake (shakebugs.com) is a closed-source bug reporting SDK with strong shake-to-report ergonomics. This guide swaps it for Mushi while preserving the same trigger UX.

Shake’s shake-to-report defaults are the closest of any competitor to Mushi’s, so the user-facing UX after migration looks nearly identical. Most apps cut over in a single afternoon.

Why switch

  • Open source. Mushi’s SDK + admin console are MIT-licensed; Shake is closed.
  • Self-host. Mushi runs on your own Supabase / Postgres; Shake is SaaS-only.
  • AI triage. Mushi’s two-stage classifier and judge loop ship in the box.
  • Pricing predictability. Mushi is free at the SDK + community-cloud tier; commercial cloud has flat per-project pricing.

API mapping

ShakeMushi
Shake.start(apiKey) (web)Mushi.init({ projectId, apiKey })
Shake.show()Mushi.openWidget()
Shake.setUser(id, email, name)Mushi.setUser({ id, email, name })
Shake.addEventKey(key, value)Mushi.setMetadata({ [key]: value })
allowToReportBugByShakingMobile(true)widget: { trigger: 'shake' }
allowToReportBugByScreenCapture(true)widget: { trigger: 'button' } (or 'both')
setEnableBlackBox(true)Console + network capture is default-on
setMetadata(meta)Mushi.setMetadata(meta)
addPrivateView(view)capture: { redactSelectors: [...] } (web)

Before / After

React Native

// BEFORE — Shake import Shake from '@shakebugs/react-native-shake' Shake.start('YOUR_API_KEY') Shake.setEnableBlackBox(true) Shake.setUserMetadata({ tier: 'pro' })
// AFTER — Mushi 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' }, capture: { console: true, network: true }, }} > <RootNavigator /> </MushiProvider> ) } // Inside any screen: import { useMushi } from '@mushi-mushi/react-native' const mushi = useMushi() mushi.setMetadata({ tier: 'pro' })

Web

// BEFORE — Shake JS import Shake from '@softnoesis/shakebug-js' Shake.start('YOUR_API_KEY') Shake.setUser('user-42', 'jane@example.com', 'Jane Doe')
// AFTER — Mushi web import { Mushi } from '@mushi-mushi/web' Mushi.init({ projectId: 'YOUR_PROJECT_ID', apiKey: 'YOUR_PUBLIC_KEY', widget: { trigger: 'both' }, }) Mushi.setUser({ id: 'user-42', email: 'jane@example.com', name: 'Jane Doe' })

Migration checklist

Migration checklist
8 required steps
  1. Step 01
    Create a Mushi project, mint an API key
  2. Step 02
    Install the right Mushi SDK
  3. Step 03
    Mount Mushi alongside Shake (do NOT remove Shake yet)
  4. Step 04
    Replicate Shake.setUser / addEventKey calls in Mushi
  5. Step 05
    Verify Mushi captures the same context Shake did
  6. Step 06
    Run dual-SDK in beta for ≥ 2 days
  7. Step 07
    Uninstall the Shake SDK
  8. Step 08
    Revoke your Shake API key

Feature parity

CapabilityShakeMushi
Shake-to-report
Floating button
Screenshot on report✅ (web)
Black-box (console + network)✅ (setEnableBlackBox)✅ (default on)
Activity history / repro steps✅ (auto from captured streams)
Crash reporting❌ (keep Sentry/Crashlytics)
Self-host
Open source
AI triage
MCP server for IDE agents

References

Last updated on