In-app bug reporting for Flutter apps
Testers shake the phone or tap a button, mark up the screen, and the report lands on the same board as your website bugs.
The Flawsnap Flutter SDK, the flawsnap package, adds bug reporting to iOS and Android apps built with Flutter. Testers shake the device or tap a floating button, mark up a screenshot, and send it with recent logs, HTTP requests, device and app version details. Install it from pub.dev with flutter pub add flawsnap.
Where it stands
The SDK is the flawsnap package on pub.dev, version 0.4.0 (published 8 November 2026), MIT licensed. The full reference is in the Flutter docs. It supports iOS and Android only; there is no Flutter web or desktop support. It needs Dart 3.13 and Flutter 3.47 or newer.
Setup
- 1
Allow mobile reports
In the project's Security settings, turn on Accept reports from mobile apps and copy the
pk_key. Apps send no browser origin, so this switch is what lets them in. - 2
Add the package
Run
flutter pub add flawsnap, or addflawsnap: ^0.4.0topubspec.yaml. - 3
Initialise and wrap your app
Call
Flawsnap.initbeforerunApp, then wrap your root widget. - 4
Android release builds
Add
<uses-permission android:name="android.permission.INTERNET" />to your manifest.
import 'package:flawsnap/flawsnap.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Flawsnap.init(
apiUrl: 'https://backend.flawsnap.com/api/v1',
projectKey: 'pk_...',
insights: true, // optional: user flow, API timing and errors (see Insights)
);
runApp(Flawsnap.wrap(const MyApp()));
}How testers open the reporter
- Shake the device (needs a physical device, not a simulator).
- Tap the floating button. Admins can hide it or set its position and colour from the portal.
- From your own code with
Flawsnap.show(), for example from a "Report a problem" item in settings. - Limit the triggers with
triggers: {FlawsnapTrigger.button}.
What a Flutter report contains
- A screenshot marked up with box and draw in five colours
- Title, description, priority and category
- Device model, OS and version, app name, version and build, screen size, pixel ratio, locale, light or dark mode
- The current screen
- The last 100 log lines: Flutter errors, uncaught exceptions,
debugPrintoutput andFlawsnap.logcalls - The last 100 requests made through
Flawsnap.httpClient(). Bodies are never recorded
Getting screens and requests into reports
GoRouter and auto_route are covered by the navigator observer. Requests made with Dio or other HTTP clients are not seen yet; only package:http through Flawsnap.httpClient() is.
MaterialApp(navigatorObservers: [Flawsnap.navigatorObserver])
final client = Flawsnap.httpClient(); // a package:http client
Flawsnap.screen('Settings');
Flawsnap.identify(name: 'Sam Lee', email: '[email protected]');
Flawsnap.setMetadata({'build_channel': 'beta'});
Flawsnap.log('Payment sheet failed to open', level: 'error');Team sign-in on a phone
Testers who are team members can call Flawsnap.signIn(), which shows a device-code approval page. Their reports then carry their name. The reporter token lasts 30 days; pass a ReporterTokenStore (for example one backed by flutter_secure_storage) to encrypt it at rest.
What it does not do
- No screen recording in Flutter.
- No arrow, text or blur annotation tools.
- No native iOS or Android crash reports.
- No Swift, Kotlin, React Native or Expo SDKs. Flutter is the only mobile SDK.
Questions
- Can I use the SDK today?
- Yes. It is on pub.dev: run
flutter pub add flawsnap. It is included on both Starter and Pro; Insights from the app (journeys and API timing) needs Pro. - Do app reports and website reports go to the same place?
- Yes, if they use the same project. Reports are tagged iOS, Android or Web, and you can filter by platform in the portal.
- Will it work in my Flutter web build?
- No. The SDK supports iOS and Android only. For the web version of your app, use the website widget.
Try it on your own site
7-day free trial, then $9 a month for Starter or $19 for Pro, per organization, with unlimited team members.
Related
Updated