🛟 Buoy
Devtools that live in your app. And answer to your agent.
Docs · Quick Start · Desktop · MCP · Pricing
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.
- 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
zustandStoresor callingwatchAtoms(). Every tool is free, no key or signup needed. Add alicenseKeyto 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 desktop — Buoy 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 runtime —
get_eventsandget_consolestream what the app is actually doing, in token-friendly summaries - Drive the UI —
describe_screenwalks the live React tree into an accessibility-style element list with tap points;tap_elementpresses the real handler in JS. Works on physical devices. - Change state —
get_redux_state/redux_dispatch,get_zustand_state,get_jotai_state,get_react_query/react_query_action,get_storage/storage_action,get_routes/navigate - Measure —
run_benchmark_batchruns Bench cases on a real device and returns a ranked comparison;screenshot_componentreturns a tight crop of any component by testID (iOS Simulator);list_devicespicks 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
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.
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.
No comments yet
Be the first to share your take.