Installation

Get Buoy running in your React Native app in minutes.

Requirements

React Native0.70+
React18+

Quick Start

Install the core package and any tools you need:

Select your tools24 packages
Corerequired
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-overlay

Available Packages

Each package adds a new tool to your floating menu. Install only what you need.

Package manager:

Camera

Scan QR codes and IDs in the iOS Simulator — point it at your Mac screen, a webcam, an image or a video.

Nothing to install — ships with Buoy Desktop

Core

Required

The floating menu component. Required for all tools.

npm install @buoy-gg/core

Network

Monitor API requests, responses, timing, and errors.

npm install @buoy-gg/network

Storage

Browse and edit AsyncStorage, MMKV & SecureStore in real-time.

npm install @buoy-gg/storage

Environment

View and validate environment variables with type checking.

npm install @buoy-gg/env

React Query

TanStack Query devtools with cache inspection.

npm install @buoy-gg/react-query

Route Events

Track navigation changes and browse routes.

npm install @buoy-gg/route-events

Highlight Updates

See WHY components re-render with visual overlays.

npm install @buoy-gg/highlight-updates

Bench

Track FPS, CPU & memory live and benchmark variants to prove what's faster.

npm install @buoy-gg/perf-monitor

JS Top

Task Manager for the JS thread — a live ranked table of what's eating your JS FPS.

npm install @buoy-gg/js-top

Redux DevTools

Inspect Redux state, actions, and time-travel debugging.

npm install @buoy-gg/redux

Zustand DevTools

Monitor Zustand store state, diffs, and changes in real-time.

npm install @buoy-gg/zustand

Jotai DevTools

Inspect Jotai atom state, diffs, and live event history.

npm install @buoy-gg/jotai

Events Timeline

Unified timeline across all tools for debugging flows with LLM-ready export.

npm install @buoy-gg/events

Console

A Chrome-DevTools console for every log on the device.

npm install @buoy-gg/console

Sentry

See what your app sends to Sentry, and what it costs.

npm install @buoy-gg/sentry

Images

Every image load with cache verdicts, oversize audit, and a failure log.

npm install @buoy-gg/images

Assets

Everything you ship — sizes, duplicates, and never-loaded assets.

npm install @buoy-gg/assets

TV Remote

Press the D-pad on Apple TV & Android TV from your desktop — and replay it.

npm install @buoy-gg/tv-remote

Focus Inspector

See what holds D-pad focus on Apple TV & Android TV — and why it gets stuck.

npm install @buoy-gg/focus-inspector
POLICE
BOX

Time Machine

Snapshot & restore app state — jump back to any saved restore point.

npm install @buoy-gg/time-machine

Impersonate

Switch users, roles, and feature flags without rebuilding.

npm install @buoy-gg/impersonate

Scenarios

Coming Soon

Saved, parameterized one-tap app states for QA, support and demos.

Coming soon — not yet on npm

Ask Buoy

Beta

Chat with your app. Your AI endpoint drives every Buoy tool, so QA and support never touch one.

npm install @buoy-gg/ask-buoy

Image Overlay

Overlay design mockups on your app for pixel-perfect comparison.

npm install @buoy-gg/image-overlay

Register Your License Key

Buoy runs three ways, and a key is what moves you up:

KeyWhat you get
No keynoneEvery tool, capped at ~5 entries each — enough to see what they do.
Freenpx buoy login (no card)25 entries per tool, plus Pro free every weekend.
Propaid keyUnlimited capture, production builds, the MCP server.

Every tool is available on every tier — the caps change, the tool list doesn't.

Get your key

bash
npx buoy login
npx buoy login

Run this from a project where @buoy-gg/core is installed — npx resolves the command from your own node_modules. If npx tries to download something instead (there is an unrelated buoy package on npm), name the package explicitly:

bash
npx --package=@buoy-gg/core buoy login
npx --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:

tsx
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:

bash
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.

Or pass it directly

tsx
<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.

Desktop & AI (optional)

The packages above power the in-app floating menu. Two more surfaces connect to the same app — both Buoy Pro:

  • Buoy Desktop — a full dashboard for macOS, Windows & Linux. Install the sync client in your app (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.
  • AI / MCP Server — drive your app from Claude Code, Cursor, or any MCP editor:
bash
npx -y @buoy-gg/mcp@latest init
npx -y @buoy-gg/mcp@latest init

See AI / MCP Server for the full setup.

TypeScript Support

All packages include TypeScript definitions out of the box. No additional @types packages needed.

Monorepos & Enterprise Setups

Buoy is built to survive locked-down corporate React Native apps:

  • After installing a new @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.
  • Physical devices work zero-config. The desktop-sync broker address is derived from the Metro host, so devices on the same Wi-Fi find your machine automatically. Android over USB needs one command — adb reverse tcp:42831 tcp:42831 — and socketURL overrides everything for tunnels or a broker on another machine.
  • Scoped registries — all packages live under the @buoy-gg scope, so a .npmrc scope rule (@buoy-gg:registry=…) is all a proxy registry needs.
  • No on-device UI for end users — pass headless to FloatingDevTools for builds where only the desktop dashboard should see the session. See FloatingDevTools.

Next Steps


FAQ

Which React Buoy package do I install first?

@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.

Do I have to configure each tool after installing it?

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.