Documentation
Mobile
Web
TV

All but React Native are in beta.

Desktop App
docs

Overview

Buoy in your app, in 2 minutes

Buoy provides tools for inspecting Flutter apps: network requests, storage, state, navigation, and performance. Use the in-app menu or connect the app to Buoy Desktop. An AI editor can access supported tools through the MCP server. Free has the basic MCP. Pro adds the full MCP.

Flutter support is in beta. BuoyDevTools runs in debug mode. To run it in a release build, see Release builds.

Start here

Let your coding agent install Buoy in your app:

Let your coding agent install it
Read the prompt before you paste it
Install Buoy, the in-app devtools, in this Flutter project. Read the full instructions first: curl -fsSL https://buoy.gg/install-flutter.md Read the raw text, not a summary. If curl is unavailable, use any HTTP tool you have. Ask me to paste the document only if nothing can fetch it. Do the install yourself: inspect the repo, run the commands, edit the files. Do not hand me steps you can run. Work out the routine decisions from the repo: which app to target, where BuoyDevTools wraps the app, which tools need app setup. If Buoy is already partly installed, repair and extend it; never wrap the app in a second BuoyDevTools. When instructions conflict, follow this order: what I say here, then the document's rules about which packages exist and what needs my permission, then this project's own constraints, then the rest of the document, then your judgment. Ask me before: adding a dependency other than the Buoy packages, opening a browser or creating an account, changing what a release build does beyond what the document specifies, or anything hard to undo. Do not commit. You are not done when the package installs. Run flutter analyze with the existing analysis options; add no lint rules. Then report what you installed and why, what you skipped and why, every file you changed, what you verified, and the exact steps I take on the device to confirm the menu appears and captures a request.
The prompt asks your agent to inspect the project, choose matching tools and guide setup. Review its edits and verify the connection on your device.Read the setup instructions

To install by hand, follow the Quick Start.

Who It's For

Developers can inspect a failed request alongside the app state that produced it. QA can use configured tools to edit test data and exercise error states. Support teams can collect debugging context when your app grants them access.

Some tasks need app integration. Impersonation requires your backend to authorize the selected user, and state tools need access to the stores or providers you want to inspect. Buoy does not bypass your app's authentication.

What You Get

ToolWhat It Does
NetworkInspect supported HTTP requests — package:http, dio, image loads, GraphQL
StorageBrowse and edit shared_preferences in real-time
EnvironmentValidate env/config with type checking and a health score
ConsoleA Chrome-DevTools-style console for every print / debugPrint / log
Perf MonitorLive on-device HUD — FPS, jank, CPU, and memory
ImagesCaptured image loads with cache verdict, timing, oversize audit & failure diagnosis
RiverpodInspect provider state, live values, diffs, and history
Route InspectorTrack go_router navigation and browse your route structure
Events TimelineUnified timeline across all tools with LLM-ready export
ImpersonateInject configured headers for backend-authorized impersonation
Image OverlayOverlay design mockups on your app for pixel-perfect comparison
Ask BuoyAI chat that reads and changes app state through your tools, with Undo

Why Buoy

Install the tools you need and inspect the running app without adding a separate debug screen for each task. Desktop gives those tools more screen space, and MCP exposes supported actions to your AI editor. Follow each tool's setup instructions for app-specific configuration.

Quick Start

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

MaterialApp(
  builder: (context, child) => BuoyDevTools(
    child: child ?? const SizedBox.shrink(),
  ),
)
import 'package:buoy/buoy.dart';

MaterialApp(
  builder: (context, child) => BuoyDevTools(
    child: child ?? const SizedBox.shrink(),
  ),
)

The umbrella registers its bundled tools. If you add tools one by one, call each one's register function. Sign in with npx --package=@buoy-gg/core buoy login. Then run flutter run --dart-define-from-file=.env.local. See Sign In.

Build Your Own Tools

Need something specific to your app? Add custom tools via the tools prop on BuoyDevTools. Build internal debugging utilities, feature flag toggles, or team-specific inspectors that integrate with the floating menu.

Next Steps