All but React Native are in beta.
All but React Native are in beta.

This is the reference for installing Buoy: packages, signing in, Desktop and MCP, and fixes for common problems. New to Buoy? Quick Start walks you through a first install and ends with a captured request.
Core and Network are JavaScript only and run in Expo Go. A few tools ship native code and need a development build, such as Bench's native CPU and memory metrics. Each tool's page says what it needs.
Paste the prompt into Claude Code, Cursor or Codex. The agent reads your package.json, installs the tools that match your app and mounts the menu. Review its changes before you commit them.
Install the core menu and your first tool:
npm install @buoy-gg/core @buoy-gg/networkTo install several tools at once, pick them here and copy the command:
npm install @buoy-gg/core @buoy-gg/network @buoy-gg/storage @buoy-gg/env @buoy-gg/react-query @buoy-gg/route-events @buoy-gg/highlight-updates @buoy-gg/perf-monitor @buoy-gg/js-top @buoy-gg/redux @buoy-gg/zustand @buoy-gg/jotai @buoy-gg/events @buoy-gg/console @buoy-gg/sentry @buoy-gg/images @buoy-gg/three @buoy-gg/assets @buoy-gg/tv-remote @buoy-gg/focus-inspector @buoy-gg/time-machine @buoy-gg/clock @buoy-gg/lifecycle @buoy-gg/location @buoy-gg/permissions @buoy-gg/impersonate @buoy-gg/scenarios @buoy-gg/ask-buoy @buoy-gg/image-overlayEach package adds one tool to the floating menu. Install only the ones you need.
Supply camera feeds to supported iOS Simulator apps. Desktop account required; screen capture and non-QR generation need Pro.
Buoy Optimize on many iOS sims or Android phones at once. Each speed idea gets its own slim sim that acts like a real phone. Free with an account.
Many slim Chromes on one computer. Each runs your web app like a lone Chrome, so your tests and AI agent can drive them all at once. Free with an account.
Let your AI use the web in Chrome with real clicks. Use Ask Buoy in Chrome's side panel, or let Claude Code, Cursor or Codex use Buoy's own tabs. The coding-tool part is free.
Account setup and floating menu for React Native tools. Camera runs separately in Desktop.
npm install @buoy-gg/coreInspect captured requests and responses. Preview Offline and latency conditions in React Native development builds.
npm install @buoy-gg/networkInspect configured AsyncStorage, MMKV and SecureStore adapters; editing depends on access.
npm install @buoy-gg/storageInspect and validate the environment values you explicitly supply.
npm install @buoy-gg/envTanStack Query devtools with cache inspection.
npm install @buoy-gg/react-queryTrack navigation changes and browse routes.
npm install @buoy-gg/route-eventsInspect observed component updates and available render-cause details in supported development builds.
npm install @buoy-gg/highlight-updatesRecord available performance metrics and compare runs under consistent test conditions.
npm install @buoy-gg/perf-monitorInspect captured JavaScript callback activity and available timing attribution.
npm install @buoy-gg/js-topInspect a connected Redux store, captured actions and supported restore controls.
npm install @buoy-gg/reduxInspect registered Zustand stores, captured changes and retained snapshots.
npm install @buoy-gg/zustandInspect tracked Jotai atoms and retained changes from the connected store.
npm install @buoy-gg/jotaiReview captured events from configured tools and export selected data.
npm install @buoy-gg/eventsInspect supported JavaScript logs captured after setup, within retention limits.
npm install @buoy-gg/consoleSee what your app sends to Sentry, and what it costs.
npm install @buoy-gg/sentryInspect supported image loads, available cache signals, estimated memory and captured failures.
npm install @buoy-gg/imagesSee the scene tree. Pick and edit 3D objects.
npm install @buoy-gg/threeInspect registered assets, available sizes, duplicates and assets not loaded during the session.
npm install @buoy-gg/assetsRecord supported TV input and replay through available host controls. Physical Apple TV is record-only.
npm install @buoy-gg/tv-remoteInspect observed TV focus transitions and possible navigation problems; findings need review.
npm install @buoy-gg/focus-inspectorCapture and restore supported state through configured adapters; review skipped or failed items.
npm install @buoy-gg/time-machineMove the app's clock to any date, freeze it or speed it up to test expiry, countdowns and renewals, and make the app refresh its sign-in token.
npm install @buoy-gg/clockSend the app to the background, interrupt it like a call, send a memory warning or a deep link, or relaunch it, then see what your code did.
npm install @buoy-gg/lifecyclePin the app to any place, move it along a route, cross geofences, and test no GPS signal or location services off.
npm install @buoy-gg/locationMake the app see not asked, allowed, limited, denied or blocked for location, camera, notifications and more, and test the prompt, the refusal and the trip to Settings.
npm install @buoy-gg/permissionsUse your configured, backend-authorized impersonation flow to test permitted identities.
npm install @buoy-gg/impersonateSaved, parameterized one-tap app states for QA, support and demos.
npm install @buoy-gg/scenariosUse a configured model endpoint to inspect supported tools and request actions under your policy.
npm install @buoy-gg/ask-buoyOverlay design mockups on your app for pixel-perfect comparison.
npm install @buoy-gg/image-overlayBuoy needs a Free or Pro account. The plans have different history limits and features, and production access and Ask Buoy require Pro. Free has the basic MCP and Buoy Optimize. Pro adds the full MCP. See pricing for details.
npx --package=@buoy-gg/core buoy login
npx --package=@buoy-gg/core buoy login
This opens your browser and signs you in. Then it writes a dev token to an env file. It adds that file to .gitignore too, if it isn't there yet. On Expo the name is EXPO_PUBLIC_BUOY_KEY. On bare React Native it is BUOY_KEY. Keep the prefix: Expo only puts EXPO_PUBLIC_ names in your app.
A dev token works in dev builds and sims for 30 days. Then run buoy login again. On Expo it goes in .env.development.local. Expo reads that file for expo start only. Bare React Native gets .env.local. A dev token opens nothing in a TestFlight, QA or store build. For those, your testers sign in with a code. See Test builds.
On Expo, Buoy reads EXPO_PUBLIC_BUOY_KEY by itself in dev builds. You only mount the menu. Keep it inside the same providers as your screens.
import { FloatingDevTools } from "@buoy-gg/core";
export default function App() {
return (
<>
<YourApp />
<FloatingDevTools />
</>
);
}
import { FloatingDevTools } from "@buoy-gg/core";
export default function App() {
return (
<>
<YourApp />
<FloatingDevTools />
</>
);
}
Two cases pass the value in with Buoy.init. React Native CLI doesn't load env files into process.env. So read BUOY_KEY with your app's env loader. A key in an Expo TestFlight or store build needs it too. Buoy only finds a key by itself in dev builds.
import { Buoy } from "@buoy-gg/core";
Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });
import { Buoy } from "@buoy-gg/core";
Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });
A key you pass in always wins over the one Buoy finds.
TestFlight, QA and store builds can't use a dev token. Your testers sign in with a code instead.
app: and then its bundle id, like app:com.acme.shop.signIn to FloatingDevTools:<FloatingDevTools signIn />
<FloatingDevTools signIn />
A tester taps Sign in. Then they allow the code on buoy.gg, and Buoy opens. Only show FloatingDevTools to your own testers. Buoy in a test or store build needs Pro or Business. See Phones and test builds.
You don't have to sign in. Your account key from buoy.gg/dashboard/licenses works the same as before, and it always will. Put it in the same env var, or pass it in:
<FloatingDevTools licenseKey="YOUR_LICENSE_KEY" />
<FloatingDevTools licenseKey="YOUR_LICENSE_KEY" />
Passing it in is fine for a solo project. On a team, use the env var. A key in a shared repo is shared by everyone who clones it.
For CI and test runs, use a bot key. A team admin makes one on the Team page. See Keys for bots and CI.
The packages above power the in-app menu. Desktop is free with a Buoy account. Free has the basic MCP and Buoy Optimize. Pro adds the full MCP.
npm install @buoy-gg/external-sync. It ships separately so apps that never use Desktop don't carry it. Then download Buoy Desktop and launch it. Your app finds it on its own, because the broker address comes from the Metro host. See Buoy Desktop.npx -y @buoy-gg/mcp@latest init
npx -y @buoy-gg/mcp@latest init
See AI / MCP Server for the full setup.
All packages include TypeScript definitions. You don't need any @types packages.
unstable_enablePackageExports: false works. Big monorepos often turn off Metro's package-exports resolution for older dependencies. Buoy's packages ship legacy resolution shims, so they resolve either way.socketURL overrides it for tunnels or a broker on another machine.@buoy-gg scope, so a proxy registry only needs a .npmrc scope rule (@buoy-gg:registry=…).headless to FloatingDevTools for builds where only the desktop dashboard should see the session. See FloatingDevTools.Check that FloatingDevTools renders, including any access condition you wrapped it in, and that you restarted the dev server after installing.
Restart Metro with --clear. Metro caches the "optional package missing" result from before you installed the package.
npx expo start --clear
npx expo start --clear
Buoy didn't get your dev token or key. Run npx --package=@buoy-gg/core buoy login in your app's folder. On Expo, check that the name starts with EXPO_PUBLIC_. Then restart with npx expo start --clear. On React Native CLI, check that your env loader passes BUOY_KEY to Buoy.init.
Forward the broker port:
adb reverse tcp:42831 tcp:42831
adb reverse tcp:42831 tcp:42831
Make sure the action sent a new request and didn't read cached data. Network Monitor lists the supported capture paths.
@buoy-gg/core — it renders the floating menu. Every tool is a separate package (@buoy-gg/network, @buoy-gg/storage, and so on) that registers itself in the menu once installed, so you only ship the tools you actually use.
No. Auto-discovery finds installed tool packages and adds them to the floating menu with no wiring. Only tools that need to reach into your app — passing your Zustand stores, or wiring impersonation to your user-search API — take extra props.