
Open Buoy in a Flutter debug build, then inspect a request. You need a Free or Pro account key. Profile and release builds do not show the widget or start its tools.
flutter pub add buoy
flutter pub add buoy
The buoy umbrella pulls in the whole suite. Prefer à la carte? See Installation.
Wrap your app via MaterialApp.builder (or CupertinoApp.builder):
import 'package:flutter/material.dart';
import 'package:buoy/buoy.dart';
MaterialApp(
builder: (context, child) => BuoyDevTools(
deviceName: 'My App',
licenseKey: const String.fromEnvironment('BUOY_KEY'),
child: child ?? const SizedBox.shrink(),
),
)
import 'package:flutter/material.dart';
import 'package:buoy/buoy.dart';
MaterialApp(
builder: (context, child) => BuoyDevTools(
deviceName: 'My App',
licenseKey: const String.fromEnvironment('BUOY_KEY'),
child: child ?? const SizedBox.shrink(),
),
)
A floating button appears in the corner of your app. Tap it to open the menu.
Get a key from your Buoy account and run flutter run --dart-define=BUOY_KEY=YOUR_LICENSE_KEY. See Installation for a complete app example and SDK requirements.
The umbrella registers its bundled Flutter tools. Perform an action that makes an HTTP request, then open Network and select the new row. Check the URL and response. If no row appears, confirm that the action made a fresh request and uses a supported client.
Individual packages require explicit registration. Follow the standalone Network example in Installation.
If you use Riverpod, add the Buoy observer to your ProviderScope:
import 'package:flutter/widgets.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:buoy_riverpod/buoy_riverpod.dart';
void main() {
registerBuoyRiverpod();
runApp(
ProviderScope(
observers: const [buoyRiverpodObserver],
child: const MyApp(),
),
);
}
import 'package:flutter/widgets.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:buoy_riverpod/buoy_riverpod.dart';
void main() {
registerBuoyRiverpod();
runApp(
ProviderScope(
observers: const [buoyRiverpodObserver],
child: const MyApp(),
),
);
}
The observer reports provider changes to the Riverpod tool. See Riverpod for package requirements and complete integration.
If you use go_router, pass your router once at registration:
import 'package:buoy_routes/buoy_routes.dart';
registerBuoyRoutes(router: myGoRouter);
import 'package:buoy_routes/buoy_routes.dart';
registerBuoyRoutes(router: myGoRouter);
| Package | What you get |
|---|---|
Buoy Desktop | Supply camera feeds to supported iOS Simulator apps. Desktop account required; screen capture and non-QR generation need Pro. |
buoy_network | Inspect supported dart:io HttpClient traffic captured after setup. |
buoy_storage | Inspect configured storage adapters and supported write events or editing controls. |
buoy_env | Validate explicitly supplied environment values against configured expectations. |
buoy_console | Inspect supported logs captured after setup in a debug build. |
buoy_routes | Inspect configured go_router navigation and supported route actions. |
buoy_images | Inspect image loads tracked by BuoyImage and available size or cache signals. |
buoy_events | Review captured events from configured sources in a shared timeline. |
buoy_riverpod | Inspect provider observations captured through the configured Riverpod observer. |
buoy_perf_monitor | View frame and resource metrics available for the Flutter platform and runtime. |
buoy_impersonate | Test identities through an explicitly configured, backend-authorized flow. |
buoy_image_overlay | Pin a design mockup over the running app for pixel-perfect UI. |
Use the umbrella for the bundled suite, or register a smaller set of individual packages.
Mount BuoyDevTools only when your app allows the current tester to inspect its data. Use your existing authorization checks. Omitting the widget also omits the initialization and connection it manages; it is not a desktop-only mode.
You can also connect this debug build to Desktop or MCP:
npx -y @buoy-gg/mcp@latest init
npx -y @buoy-gg/mcp@latest init
Buoy Desktop is free to use; the MCP server is a Pro feature. Both connect to the same app you just set up — Flutter devices appear next to React Native ones.
Run flutter pub add buoy, then wrap your app in BuoyDevTools via MaterialApp.builder. A floating button appears in the corner — tap it to open the menu. With the umbrella install, every Flutter tool is already registered.
Use a Free or Pro account key. Pro enables paid capabilities such as MCP, but does not enable the Flutter widget in profile or release mode.