Get Buoy running in your React Native app in minutes.
Install the core package and any tools you need:
npm install @buoy-gg/core Buoy Desktop @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/assets @buoy-gg/tv-remote @buoy-gg/focus-inspector @buoy-gg/time-machine @buoy-gg/impersonate @buoy-gg/ask-buoy @buoy-gg/image-overlayEach package adds a new tool to your floating menu. Install only what you need.
Scan QR codes and IDs in the iOS Simulator — point it at your Mac screen, a webcam, an image or a video.
The floating menu component. Required for all tools.
npm install @buoy-gg/coreMonitor API requests, responses, timing, and errors.
npm install @buoy-gg/networkBrowse and edit AsyncStorage, MMKV & SecureStore in real-time.
npm install @buoy-gg/storageView and validate environment variables with type checking.
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-eventsSee WHY components re-render with visual overlays.
npm install @buoy-gg/highlight-updatesTrack FPS, CPU & memory live and benchmark variants to prove what's faster.
npm install @buoy-gg/perf-monitorTask Manager for the JS thread — a live ranked table of what's eating your JS FPS.
npm install @buoy-gg/js-topInspect Redux state, actions, and time-travel debugging.
npm install @buoy-gg/reduxMonitor Zustand store state, diffs, and changes in real-time.
npm install @buoy-gg/zustandInspect Jotai atom state, diffs, and live event history.
npm install @buoy-gg/jotaiUnified timeline across all tools for debugging flows with LLM-ready export.
npm install @buoy-gg/eventsA Chrome-DevTools console for every log on the device.
npm install @buoy-gg/consoleSee what your app sends to Sentry, and what it costs.
npm install @buoy-gg/sentryEvery image load with cache verdicts, oversize audit, and a failure log.
npm install @buoy-gg/imagesEverything you ship — sizes, duplicates, and never-loaded assets.
npm install @buoy-gg/assetsPress the D-pad on Apple TV & Android TV from your desktop — and replay it.
npm install @buoy-gg/tv-remoteSee what holds D-pad focus on Apple TV & Android TV — and why it gets stuck.
npm install @buoy-gg/focus-inspectorSnapshot & restore app state — jump back to any saved restore point.
npm install @buoy-gg/time-machineSwitch users, roles, and feature flags without rebuilding.
npm install @buoy-gg/impersonateSaved, parameterized one-tap app states for QA, support and demos.
Chat with your app. Your AI endpoint drives every Buoy tool, so QA and support never touch one.
npm install @buoy-gg/ask-buoyOverlay design mockups on your app for pixel-perfect comparison.
npm install @buoy-gg/image-overlayBuoy runs three ways, and a key is what moves you up:
| Key | What you get | |
|---|---|---|
| No key | none | Every tool, capped at ~5 entries each — enough to see what they do. |
| Free | npx buoy login (no card) | 25 entries per tool, plus Pro free every weekend. |
| Pro | paid key | Unlimited capture, production builds, the MCP server. |
Every tool is available on every tier — the caps change, the tool list doesn't.
npx buoy login
npx buoy login
Run this from a project where
@buoy-gg/coreis installed —npxresolves the command from your ownnode_modules. If npx tries to download something instead (there is an unrelatedbuoypackage on npm), name the package explicitly:bashnpx --package=@buoy-gg/core buoy loginnpx --package=@buoy-gg/core buoy login
Opens your browser, signs you in, and writes the key to .env.local (adding it
to .gitignore if it isn't already). It picks the right variable name for your
setup — EXPO_PUBLIC_BUOY_KEY on Expo, BUOY_KEY on bare React Native — which
matters, because Expo only inlines EXPO_PUBLIC_-prefixed variables into the
bundle. It works the same whether your account holds a free key or a paid one.
Then read it in your app:
import { Buoy, FloatingDevTools } from "@buoy-gg/core";
Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });
export default function App() {
return (
<>
<YourApp />
<FloatingDevTools />
</>
);
}
import { Buoy, FloatingDevTools } from "@buoy-gg/core";
Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });
export default function App() {
return (
<>
<YourApp />
<FloatingDevTools />
</>
);
}
Restart your bundler with its cache cleared so the new variable is picked up:
npx expo start --clear
npx expo start --clear
The --clear matters. Expo inlines EXPO_PUBLIC_* variables into the bundle at
transform time, and Metro caches transforms keyed on the source file — so
changing .env.local alone leaves the old value baked in, and a plain restart
silently keeps using it.
<FloatingDevTools licenseKey="YOUR_LICENSE_KEY" />
<FloatingDevTools licenseKey="YOUR_LICENSE_KEY" />
Fine for a solo project. On a team, prefer the env var: a key committed to a shared repo is shared by everyone who clones it, so it stops identifying a person and starts identifying a repository.
Don't have a key yet? A free one comes with an account — npx buoy login will
create it for you, or grab it from buoy.gg/pricing.
The packages above power the in-app floating menu. Two more surfaces connect to the same app — both Buoy Pro:
npm install @buoy-gg/external-sync — it ships separately so apps that never use desktop don't carry it), then download the app and launch it — your app finds it automatically (the broker address is derived from Metro, so physical devices work zero-config too). 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 out of the box. No additional @types packages needed.
Buoy is built to survive locked-down corporate React Native apps:
@buoy-gg package, restart Metro with --clear. Metro caches the "optional package missing" resolution — a plain reload never picks the new package up. This is the single most common "I installed it and nothing happened" cause.unstable_enablePackageExports: false works. Big monorepos often disable Metro's package-exports resolution for legacy dependencies; Buoy's packages ship legacy resolution shims so they resolve either way.adb reverse tcp:42831 tcp:42831 — and socketURL overrides everything for tunnels or a broker on another machine.@buoy-gg scope, so a .npmrc scope rule (@buoy-gg:registry=…) is all a proxy registry needs.headless to FloatingDevTools for builds where only the desktop dashboard should see the session. See FloatingDevTools.@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.