buoy

Buoy adds developer tools to Flutter debug builds. Inspect supported requests, logs, storage, state, and performance in your app. The umbrella package registers its bundled tools; some need additional app integration.

Requirements

Use a Flutter debug build and a Free or Pro Buoy account key. These packages require Dart 3.9 or later, below 4.0, and Flutter 3.27 or later; your Flutter installation must satisfy both constraints. The Buoy widget does not start its tools in profile or release builds, including with Pro.

Install and run

flutter pub add buoy

Get a key from your Buoy account. This small app checks Console capture. In an existing app, keep your screens, navigator, and providers, and add the builder around their existing child.

import 'package:buoy/buoy.dart';
import 'package:flutter/material.dart';

void main() {
  BuoyConsole.runZoned(() => runApp(const DemoApp()));
}

class DemoApp extends StatelessWidget {
  const DemoApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      builder: (context, child) => BuoyDevTools(
        deviceName: 'Flutter demo',
        licenseKey: const String.fromEnvironment('BUOY_KEY'),
        child: child ?? const SizedBox.shrink(),
      ),
      home: Scaffold(
        body: Center(
          child: TextButton(
            onPressed: () => print('Buoy setup check'),
            child: const Text('Write a test log'),
          ),
        ),
      ),
    );
  }
}
flutter run --dart-define=BUOY_KEY=YOUR_LICENSE_KEY

Complete any account prompt, tap Write a test log, then open Buoy's Console and find Buoy setup check. If the menu shows account setup, check the supplied key. If Console is empty, confirm that the button ran inside BuoyConsole.runZoned after account access was established.

The umbrella widget registers its bundled tools. Installing an individual package requires its explicit registration call. Registration alone does not supply your app's router, provider observers, environment values, or authentication callbacks.

Tools

Tool Package App integration
Network buoy_network Supported HttpClient capture paths.
Storage buoy_storage BuoyPrefs for immediate write events; adapters for secure storage and MMKV.
Console buoy_console BuoyConsole.runZoned for print capture.
Env buoy_env Explicit configuration values and validation rules.
Routes buoy_routes Navigator observer and the existing go_router instance.
Images buoy_images BuoyImage around inspected images.
Impersonate buoy_impersonate User search, HTTP headers, backend authorization, and reset callbacks.
Image Overlay buoy_image_overlay Optional BuoyImageTarget tags; no desktop adapter.
Events buoy_events Registered, enabled source tools.
Riverpod buoy_riverpod ProviderObserver on the app’s ProviderScope.
Perf Monitor buoy_perf_monitor Open panel, HUD, or desktop watcher; platform-specific metrics.
Ask Buoy buoy_ask_buoy Pass askBuoy to BuoyDevTools. Hosted AI also needs signIn and Pro.

Core and shared UI packages provide the registry, shell, sync client, widgets, and event stores. Flutter capabilities differ from the React Native suite; use each Flutter guide for supported behavior.

Desktop and MCP

Open Buoy Desktop, sign in, and select the connected device. The default broker port is 42831. The iOS Simulator uses localhost; the Android emulator maps localhost to its host address. For a physical device, set socketUrl: 'http://YOUR_COMPUTER_LAN_IP:42831' on BuoyDevTools and use a network that can reach your computer.

MCP needs separate process account configuration and Pro access. Remote capabilities depend on each tool's adapter. Account validation makes network requests, and device sessions can cross your LAN. See Telemetry for data-flow details.

Accounts and plans

Use a Free or Pro account key. See pricing for capture limits and paid features. Pro does not enable Flutter tools in profile or release builds. Your app controls which testers can inspect its data.

License

Proprietary software. © Buoy LLC. See the Terms of Service and pricing.

Libraries

buoy