The BuoyDevTools widget is the entry point for Buoy on Flutter — the analog of React Native's FloatingDevTools. It wraps your app, renders a draggable floating button, and opens a menu containing every registered debugging tool.
import 'package:buoy/buoy.dart';
MaterialApp(
builder: (context, child) => BuoyDevTools(
licenseKey: 'YOUR_LICENSE_KEY',
child: child ?? const SizedBox.shrink(),
),
)
import 'package:buoy/buoy.dart';
MaterialApp(
builder: (context, child) => BuoyDevTools(
licenseKey: 'YOUR_LICENSE_KEY',
child: child ?? const SizedBox.shrink(),
),
)
That's it. With the buoy umbrella, every first-party tool self-registers on mount. Don't have a key yet? Grab one at buoy.gg/pricing.
| Prop | Type | Default | Notes |
|---|---|---|---|
| child | Widget | required | Your app (usually the MaterialApp builder child) |
| licenseKey | String? | null | Unlocks Pro (production + MCP) |
| deviceName | String | 'Flutter App' | Label in Buoy Desktop / MCP |
| deviceId | String? | auto | Pin a stable device identity |
| socketUrl | String? | auto | LAN broker URL for physical devices |
| tools | List<BuoyTool> | [] | Extra custom tools beyond self-registered ones |
Unlike React Native's optional-require auto-discovery, Flutter tools register explicitly:
A few tools still need one app-owned hook (router, ProviderScope observer, BuoyImage, impersonate search) — noted on each tool page.
Pass your own BuoyTools via the tools prop (or Buoy.registerTool before mount):
BuoyDevTools(
tools: [
BuoyTool(
id: 'flags',
name: 'Flags',
color: const Color(0xFF34D399),
icon: (size, color) => Icon(Icons.flag, size: size, color: color),
screenBuilder: (context) => const FeatureFlagDebugger(),
),
],
child: child ?? const SizedBox.shrink(),
)
BuoyDevTools(
tools: [
BuoyTool(
id: 'flags',
name: 'Flags',
color: const Color(0xFF34D399),
icon: (size, color) => Icon(Icons.flag, size: size, color: color),
screenBuilder: (context) => const FeatureFlagDebugger(),
),
],
child: child ?? const SizedBox.shrink(),
)
See Custom Tools for the full schema and desktop-sync adapters.
BuoyDevTools is also the source of truth for Buoy's other surfaces. The same tools sync out over a local broker, so once this is set up you can — with no extra code — also:
Simulators/emulators connect automatically. Physical devices should pass socketUrl: 'http://<your-lan-ip>:42831'. Connection state shows up in the menu's Settings under desktop sync.