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

Trigger Modes

Mushi ships a default bug-report launcher, but production apps should be able to decide exactly where that launcher lives. The SDK now follows the same posture as Sentry, Intercom, and Drift: the built-in trigger is a good default, and manual / attach modes let you wire Mushi into your own navigation, help menu, beta banner, or contextual “Report this section” action.

Choosing a Mode

ModeBest forBehavior
autoQuick installs, prototypes, internal toolsShows the editorial stamp trigger in the configured corner.
edge-tabApps with bottom nav, chat bubbles, or dense CTAsPins a slim paper-tab trigger to the edge so it stays discoverable without covering content.
attachProduction apps with a help menu or existing feedback linkHides the default trigger and binds Mushi to attachToSelector.
manual / hiddenWhite-label apps, mobile flows, or regulated screensRenders no launcher; call Mushi.open(), Mushi.openWith(category), or Mushi.captureEvent() yourself.

Bring Your Own Button

import { Mushi } from '@mushi-mushi/web' const mushi = Mushi.init({ projectId: 'proj_xxx', apiKey: 'mushi_xxx', widget: { trigger: 'attach', attachToSelector: '[data-mushi-feedback]', }, }) // You can also bind later, which is useful in SPAs. mushi.attachTo('#support-menu-feedback')

Smart Hide

Mushi.init({ projectId: 'proj_xxx', apiKey: 'mushi_xxx', widget: { trigger: 'auto', smartHide: { onMobile: 'edge-tab', onScroll: 'shrink', onIdleMs: 900, }, inset: { bottom: 96, right: 20 }, }, })

Use hideOnSelector for screens with known collisions:

Mushi.init({ projectId: 'proj_xxx', apiKey: 'mushi_xxx', widget: { hideOnSelector: '[data-fullscreen-player]', hideOnRoutes: ['/checkout/payment', '/immersive'], }, })

Native SDKs

iOS, Android, React Native, Flutter, and Capacitor expose the same idea:

  • button / both shows the native trigger.
  • shake installs the gesture without a visible trigger.
  • none / manual gives you a programmatic-only integration.
  • Native trigger insets are configurable so the launcher can clear tab bars, player controls, and host-app CTAs.

For production installs, prefer a host-owned help menu or contextual action and keep Mushi as the capture layer behind it.

Last updated on