🛟 Buoy

Devtools that live in your app. And answer to your agent.

Docs · Quick Start · Desktop · MCP · Pricing

npm version npm downloads legacy downloads TypeScript

Buoy is a floating dev menu that ships inside your React Native app — every request, state change, render, and frame, live on the phone, on your desktop, and in Claude or Cursor.

Every tool is free. Pro unlocks production builds, MCP & unlimited capture.

Buoy demo — the floating dev menu in action

  • One component, zero config — drop in <FloatingDevTools /> once; install any tool package and it appears in the menu on its own
  • 15 tools, every environment — network, state, storage, renders, performance and more, in dev, staging, and production builds
  • Your agent can drive it — Claude or Cursor reads live state, taps real buttons, and benchmarks on a physical device over MCP

⚡ Quick Start

npm install @buoy-gg/core
import { FloatingDevTools } from "@buoy-gg/core";

export default function App() {
  return (
    <>
      {/* Your app */}
      <FloatingDevTools />
    </>
  );
}

That's the whole setup. A floating dev menu appears inside your app.

[!NOTE] Install any tool package and it auto-appears in the menu. Most tools need zero config — a few take one line, like passing zustandStores or calling watchAtoms(). Every tool is free, no key or signup needed. Add a licenseKey to unlock Pro: production builds, the MCP server, and unlimited capture.


🛟 One live session. Three ways in.

Every tool runs inside your app's process. The phone, the desktop, and your agent all see the same session, live.

  • 📱 On the phone — tap the floating menu. Works on any device, no cable, no desktop app, no Metro.
  • 🖥️ On your desktopBuoy Desktop mirrors the on-device tools to full-screen panels on macOS, Windows & Linux, with a live UI/JS FPS · CPU · memory HUD and remote control of the device.
  • 🤖 Through your agent — the Buoy MCP server gives Claude Code, Cursor, or any MCP editor structured tool calls into the running app.

🧰 The 15 tools

Tool Package What it does
Network @buoy-gg/network Every request, response, timing & error — GraphQL operations extracted and shown as GetUser › 123
Storage @buoy-gg/storage Browse & edit AsyncStorage, MMKV & SecureStore with change history — biometric keys listed, never auto-read
Env @buoy-gg/env Auto-discovers EXPO_PUBLIC_ vars, validates types, scores config health 0–100%
Query @buoy-gg/react-query TanStack Query cache — refetch, invalidate, simulate loading & error states, one-tap offline
Routes @buoy-gg/route-events Navigation events, the live stack, and the full sitemap — jump to any screen
Debug Borders @buoy-gg/debug-borders Depth-colored layout borders (touch-through) — tap any label for testID, a11y props & computed styles
Highlight Updates @buoy-gg/highlight-updates Every render, with the cause: mount, state, props, or parent — down to the exact useState before → after
Bench @buoy-gg/perf-monitor UI/JS FPS, CPU, memory & jank on a real device — batch benchmarks return a ranked report
Events @buoy-gg/events One timeline across every tool, with LLM export presets: Markdown for agents, Bug Report, Errors Only
Console @buoy-gg/console Chrome-DevTools console on device — read logs from a release build with no cable and no Metro
Redux @buoy-gg/redux Inspect, dispatch & time travel — flags actions that blow the 16ms frame budget
Zustand @buoy-gg/zustand State, diffs, jump-to-state, one-tap reset — no middleware needed
Jotai @buoy-gg/jotai One watchAtoms() call, no wrappers — every event shows prev → next, even writes that changed nothing
Impersonate @buoy-gg/impersonate Switch users, roles & flags without rebuilding — injects x-impersonate-user-id into every request
Overlay @buoy-gg/image-overlay Pin Figma mockups pixel-perfect over the app — Component Mode tracks a tagged component through scroll & animation

Grab everything in one line:

npm i @buoy-gg/{core,network,storage,env,react-query,route-events,debug-borders,highlight-updates,perf-monitor,events,console,redux,zustand,jotai,impersonate,image-overlay}

🤖 Your agent gets hands

npx -y @buoy-gg/mcp@latest init

One command wires the Buoy MCP server into Claude Code, Cursor, and VS Code — non-destructively.

Your agent presses real UI handlers in JS, reads live app state, and benchmarks on a physical device — no screenshots, no pixel coordinates, no synthesized touches.

  • Read the runtimeget_events and get_console stream what the app is actually doing, in token-friendly summaries
  • Drive the UIdescribe_screen walks the live React tree into an accessibility-style element list with tap points; tap_element presses the real handler in JS. Works on physical devices.
  • Change stateget_redux_state / redux_dispatch, get_zustand_state, get_jotai_state, get_react_query / react_query_action, get_storage / storage_action, get_routes / navigate
  • Measurerun_benchmark_batch runs Bench cases on a real device and returns a ranked comparison; screenshot_component returns a tight crop of any component by testID (iOS Simulator); list_devices picks the target

init also installs the buoy-optimize skill: a wizard that benchmarks variants on the real device, applies the winner, and repeats until metrics plateau. One real run took a Skia LED display from 28 stuttering lights to over 12,000 — no lag.

📚 AI / MCP docs · Pro feature


🖥️ Buoy Desktop

Every tool, full screen. Buoy Desktop is free for macOS, Windows & Linux:

  • Zero-config connect — devices find your machine automatically, physical phones included
  • Full-screen panels for Network, Console, Storage, and every state tool
  • Live UI/JS FPS · CPU · memory HUD
  • Remote actions — dispatch, navigate, invalidate, from the keyboard
  • Multi-device switching and a component screenshot tool
  • Themes with animated glow, because you'll be staring at it all day

📚 Desktop docs


Why Buoy?

Flipper is deprecated. What's left is shaking the device for a dev menu, console.log archaeology over a cable, and desktop debuggers that stop working the moment you ship a staging or production build. And when an AI agent works on your app, it's debugging blind — it can edit the code but can't see what the running app is doing.

Buoy inverts the model: the tools live in the app itself, so they go wherever the app goes — the simulator, a tester's phone, production. A tiny localhost broker mirrors the same session to your desktop and your agent.

Buoy Flipper Reactotron RN Debugger
On-device, no desktop app required
Works in production builds
AI agent control (MCP)
QA & support can use it
Zero config setup

Safe in production

[!IMPORTANT] Everything runs in your app's process. The broker that mirrors to desktop and MCP binds to localhost only — nothing ever leaves your machine. You decide who sees the tools:

<>
  {/* Your app */}
  {isInternalUser && <FloatingDevTools />}
</>

That one line is the whole production story: internal builds and flagged users get the full toolkit; everyone else gets nothing.

Want the session without any on-device UI at all — field builds, kiosk devices, apps handed to non-developers? Headless mode keeps every tool syncing to Buoy Desktop and MCP while rendering nothing on the device:

<FloatingDevTools headless />

💳 Every tool is free. Pro unlocks the rest.

Every tool is free — no key, no signup, no time limit.

Pro unlocks production builds, the MCP server, and unlimited capture — $29/seat/month or $290/year, with a 14-day trial. Activate with one prop:

<FloatingDevTools licenseKey="YOUR_LICENSE_KEY" />

Weekend Pass: every Saturday and Sunday, every Pro feature inside the tools unlocks free for everyone. Not a promo — it's built into the product. Try it for real, decide on Monday.

➡️ buoy.gg/pricing


Feedback

Found a bug or want a tool that doesn't exist yet? Open an issue — feature requests drive the roadmap.

License

Proprietary software. © Buoy LLC. All rights reserved. See the Terms of Service.