Application monitoring · Replay · Verification

Understand the failure.
Put the fix to the test.

Monitor crashes, releases and performance. Reproduce supported failures against your real code, check the fix, and keep the scenario in CI. One platform for developers and QA.

Explore the demo without signup or SDK installation.

Now in beta. Create a workspace with Google or GitHub. Get beta support ·

Capsule illustration · sample failure

BUILT FOR YOUR STACK
  • Flutter
  • Android
  • iOS
  • Web
Explore SDKs
  • Auto-captured on the device
  • Redacted before upload
  • Replays the real app code
  • Replay and verification in your CI

The problem

“Cannot reproduce” is where hours go.

QA sees a bug. The developer gets a screen recording and a description, then spends the afternoon guessing. The bugs that resist are the ones that depend on what the server returned, how long it took, or state left on the device from an earlier version.

A capsule carries exactly that context, so the failure comes back on the developer's simulator instead of in a meeting.

Works on my machine ≠ fixed

The BugCapsule platform

From the first alert to the next release.

Bring production signals, reproducible context, repair evidence and recovery controls into the same workflow.

01 / MONITOR

See what needs attention.

Group crashes, errors, ANRs and app hangs into issues. Track crash-free sessions, release adoption, traces and web or mobile vitals. Route alerts to email, Slack or webhooks.

  • Release health
  • Performance
  • Alerts
Explore monitoring
02 / INVESTIGATE

Keep the context together.

Connect stack traces, breadcrumbs, user feedback and linked capsules. Assign issues, discuss findings and follow the work through GitHub or Jira.

  • Issue triage
  • Team collaboration
  • Integrations
See the capsule workspace
03 / REPLAY & VERIFY

Test the fix against the failure.

Replay recorded actions, responses and state against your app. Inspect verification results and add supported scenarios to your regression suite.

  • Local replay
  • Verification
  • CI regression
Follow the workflow
04 / RECOVER

Contain a bad release.

Switch a broken feature off in apps already on your users' phones, enforce it on your server too, then restore it in stages with approvals and an audit trail.

  • Signed feature guards
  • Two-person approval
  • Staged restoration
Explore Emergency Recovery

Flutter, Android, iOS and web. Replay coverage depends on the runtime, instrumentation and recorded dependencies. Emergency Recovery needs the next Flutter, Android and iOS SDK releases. Signed patches for logic and layouts your app has already registered are in early access.

How it works

Capture. Replay. Verify.

One capsule, from the failing build to your CI.

  1. 01

    Capture

    When your app fails, the SDK saves a capsule: the actions, HTTP responses with their timing, state and storage that led there. It is redacted on the device before upload.

    Actions + network + state
  2. 02

    Replay

    The CLI checks out the exact commit and re-runs your real app on a simulator, an emulator or Chromium, feeding it the recorded inputs until the failure fires again.

    bugcapsule run <id> -n 3
  3. 03

    Verify the fix

    Replay against your working tree and inspect each attempt’s verdict and evidence. Keep the recorded scenario as a regression test in your CI. Results apply to that scenario and its supported dependencies.

    bugcapsule verify <id> -n 5

Dashboard · design preview

The whole failure. In focus.

Inspect the timeline, state, events and network of a capsule, copy the replay and verify commands, and share it with your team.

Capsule e73f5ad0

× Crash · 2 hours ago · qa · v1.4.0 (52)

Event 284 / 612

› onTap()
  lib/screens/cart.dart:87
⌄ CartState (expanded)
  {
    "items": [ … ],
    "price": null,
    "subtotal": 84.0
  }

Actions

Design preview with sample data from the shop demo app. Replays run locally with the CLI; the dashboard copies the command.

For developers and QA

Give your team—and your agent—the context.

Connect what the app should do with what actually happened. Keep the brief, the bug and the repair attempt linked.

Set up your workspace
QA CONTEXT

A shared definition of expected behavior.

Import a Markdown brief, review structured context and test scenarios, and publish an approved version. Repair tasks pin that version so everyone works from the same expectations.

YOUR CODING AGENT · MCP

Hand off evidence, not a vague bug report.

Prepare a repair task from an issue or capsule. Connect Codex, Claude Code or another MCP client with scoped access, then review the task timeline, agent-reported results and checks.

QA and agent features require an enabled workspace and access permissions. Your agent runs in your own tools; preparing a task does not automatically start a repair.

Platforms

Flutter, Android, iOS and web.

One capsule format, one bugcapsule CLI and one dashboard for all four. A capsule replays on the runtime that captured it.

  • Flutter

    bug_capsule 0.4.1-beta.7

    Replays on iOS simulators and Android emulators

    • BLoC, Riverpod, Provider, GetX and MobX state
    • Dio and package:http (Retrofit, Chopper)
    • GoRouter navigation
    • SharedPreferences checkpoints

    REPRODUCED 3/3 FIXED 2/2

  • Android

    Kotlin · Java · beta

    Replays on an emulator through instrumentation

    • Views and Jetpack Compose
    • OkHttp (and Retrofit on top)
    • Jetpack Navigation, ViewModels
    • SharedPreferences and DataStore checkpoints

    REPRODUCED 3/3 FIXED 3/3

  • iOS

    Swift · SwiftPM · beta

    Replays on a simulator through XCUITest

    • UIKit and SwiftUI, iOS 15+
    • URLSession
    • UINavigationController and SwiftUI routes
    • UserDefaults checkpoints

    REPRODUCED 3/3 FIXED 3/3

  • Web

    TypeScript · beta

    Replays in Chromium through Playwright

    • Any framework, with React helpers
    • fetch and XMLHttpRequest
    • History API and React Router
    • localStorage and sessionStorage checkpoints

    REPRODUCED 3/3 FIXED 3/3

Results from each SDK's demo shop app against a local backend: Flutter on an iPhone 18 Pro simulator (iOS 27), Android on a Pixel 6 emulator (API 35), iOS on an iPhone 18 Pro simulator (iOS 27), web in Chromium 153.

Compare platform support

Integrate

Start with your stack.

Add the SDK for your platform, start it first thing, attach your HTTP client and router, and pin the commit at build time.

# pubspec.yaml: one package, every integration
dependencies:
  bug_capsule: 0.4.1-beta.7

// main.dart
import 'package:bug_capsule/bug_capsule.dart';

final bugCapsuleDio = BugCapsuleDio(rules: [
  // Fields that differ on every run must not affect request matching.
  EndpointRule('POST', '/api/checkout', ignoreBodyFields: {'timestamp', 'nonce'}),
]);
final bugCapsuleRouter = BugCapsuleGoRouter();

void main() => BugCapsule.init(            // first line of main
      config: const BugCapsuleConfig(
        appVersion: '1.4.0',
        appBuild: '52',
        mode: CaptureMode.qa,
        backend: BugCapsuleBackendConfig(url: 'https://bugcapsule.example.com', ingestKey: 'bci_...'),
      ),
      integrations: [
        BugCapsuleBloc(states: [            // or BugCapsuleRiverpod, BugCapsuleNotifiers, BugCapsuleGetx, BugCapsuleMobx
          BugCapsuleState<CartBloc, CartState>(toJson: (s) => s.toJson(), fromJson: CartState.fromJson),
        ]),
        bugCapsuleDio,                      // or BugCapsuleHttp for package:http and Chopper
        bugCapsuleRouter,
        BugCapsuleSharedPreferences(),
      ],
      appRunner: () => runApp(const MyApp()),
    );

// where you build Dio and GoRouter:
bugCapsuleDio.attach(dio);
final router = GoRouter(initialLocation: bugCapsuleRouter.initialLocation('/'), routes: [...]);
bugCapsuleRouter.attach(router);

// QA capture button:
MaterialApp.router(builder: (context, child) => BugCapsuleOverlay(child: child!), ...);

# Build with the commit pinned so replay can check out the same code
flutter build ipa --dart-define=BUGCAPSULE_GIT_SHA=$(git rev-parse HEAD) --dart-define=BUGCAPSULE_MODE=qa

Safety and security

Built to be switched off.

Capture runs inside your users' app, so the SDK is designed to fail quietly and stop on command.

Redacted on the device

Tokens, JWTs, keys, card numbers and sensitive headers are scrubbed before anything is stored or uploaded. Passwords and fields you mark sensitive never leave the device.

Remote kill switch

One command stops capture everywhere. Devices stop recording and delete queued captures, even offline. Sampling and size limits keep overhead bounded.

Isolated from your app

If capture fails, your app starts without it, and SDK errors never reach your handlers. Release builds can't enter replay mode.

Scoped ingest keys, expiring share links and per-project retention. Read how data is handled.

FAQ

Questions teams ask first.

Something missing? Ask us directly.

What is BugCapsule?

An application monitoring, reproduction and verification platform for mobile and web teams. BugCapsule groups issues, tracks release health and performance, and captures supported actions, network responses and state that led to a failure. QA context and MCP repair tasks connect that evidence to your team’s coding agents. The bugcapsule CLI replays supported recordings against your real app code so you can reproduce the bug, verify a fix and keep it as a regression test.

Which platforms are supported?

Flutter, native Android (Kotlin or Java), native iOS (Swift, iOS 15+) and the web, with React helpers. Replay runs on iOS simulators, Android emulators and Chromium, using the runtime that captured the capsule. See the feature matrix for coverage by platform.

How do I get started, and do I need Flutter to use the CLI?

Create a workspace, generate an SDK token in Project settings and add the SDK and capture integrations to your app. Install the CLI with npm on Node.js 20+, or download a standalone binary, then run bugcapsule login to sign in through your browser. The CLI runs on macOS, Linux and Windows without Dart or Flutter; replay needs the build tools for your app, including Xcode on macOS for iOS. Follow the quickstart and CLI setup.

Is replay a video of the session?

Replay re-runs your actual app with recorded inputs and responses, so you can debug the failure against your code. The dashboard lets you inspect the capsule and copy replay commands; execution happens locally with the CLI or in CI. The interactive demo illustrates this workflow with sample data.

Can it replay WebSockets, platform channels and native SDKs?

Yes, through supported integrations: WebSocket adapters across all four runtimes, allowlisted Flutter platform channels, and native SDK adapter APIs for Flutter, Android and iOS. Flutter pilot adapters cover selected Firebase, location, Google Maps and Stripe operations; their coverage is partial and tested against fakes or scripted platforms. Replay uses recorded interactions offline and requires compatible adapters in the build. See the coverage details before integrating.

Does Flutter capture native crashes too?

Add the optional bug_capsule_native plugin to report native crashes, Android ANRs and iOS app hangs alongside Dart errors. On iOS it requires Flutter Swift Package Manager; CocoaPods alone does not enable native crash reporting. Upload release symbols for readable native stack traces. See the native crash setup.

Can I move from Sentry?

BugCapsule supports crash and error reporting, release health, performance, alerts and user feedback. Point a supported Sentry SDK at your project’s Sentry-compatible DSN to send events to BugCapsule, then add the BugCapsule SDK for replay capture. It does not replace profiling, session-replay video or cron monitoring. On the web it can also run alongside Sentry and link events to capsules. See the migration guide.

What does FIXED actually guarantee?

Every requested verify attempt completed faithfully and the original failure did not fire. Missing adapters, unavailable payloads or mismatched interactions cannot count as a clean verification. One clean attempt and one error is INCONCLUSIVE, never FIXED. The result applies to that recorded scenario, not every possible path through your app. See verification verdicts.

Can I keep a bug as a regression test in CI?

Yes. Add a capsule with bugcapsule regress add, then run bugcapsule regress run against your working tree locally or in CI. The suite checks whether recorded failures return and reports invalid or incompatible runs separately from passing tests. See the CI guide.

How is sensitive data handled?

Redaction runs on the device before upload. You can exclude endpoints, control network body capture and add your own redaction rules. Interaction payload controls vary by platform and adapter; missing or redacted values may prevent faithful replay. Inspect real capsules before widening a rollout and follow the capture privacy guide.

Can I switch off a broken feature without a store release?

Yes, with Emergency Recovery, once your app is built with a supported SDK. It needs the next Flutter, Android and iOS SDK releases. A signed policy can block a feature, make it read-only, show a message or ask for an update. Guards don't run new code, and a modified app can skip them, so anything that moves money or data should also be refused by your server. Read the guide.

Can BugCapsule patch an app without a store release?

In early access, and only for logic and layouts your app registered as patchable when it was built. Native code, plugins, permissions and anything unregistered still need a store release. The patch runtime isn't in the public SDKs yet, and no app store has reviewed this feature, so check the rules of your distribution channel. Ask us about access.

What are the current replay limits?

Replay runs on simulators, emulators and Chromium, not physical devices. Database snapshots such as SQLite and Core Data, uninstrumented dependencies and unsupported native operations are not covered. WebSocket and native integrations have their own limits; a missing adapter or a connection that cannot be restored can make a capsule incompatible. Check the known limitations and inspect a capsule’s dependency coverage before replaying it.

Your next release starts with understanding this one.

Create a workspace, connect your app and bring monitoring, replay and verification into your team’s workflow.

Beta support from the people who wrote the code: contact@bugcapsule.com. We reply within one business day.

Replay · capsule e73f5ad0

  1. Restoring checkpoint
  2. Replaying recorded events
  3. Serving HTTP responses with recorded latency
  4. ● Failure reproduced

Ready.

Animated walkthrough with sample data. Real replays run with bugcapsule run on a simulator.