
Install Buoy in a React Native or Expo app, then open Network Monitor and inspect a request your app made.
Claude Code, Cursor and Codex can do the whole install. Copy the prompt, paste it into your agent and review its changes. Then do the check in step 3.
To install by hand, follow the steps below.
Install the core menu and Network Monitor from your app's directory:
npm install @buoy-gg/core @buoy-gg/networkThen sign in to your Buoy account:
npx --package=@buoy-gg/core buoy login
npx --package=@buoy-gg/core buoy login
The command opens your browser, writes your key to an env file and adds that file to .gitignore. In Expo, a free key goes to .env.development.local as EXPO_PUBLIC_BUOY_KEY. That file is only read in development, so the key never ends up in a release build. A paid key goes to .env.local. React Native CLI apps get BUOY_KEY in .env.local. Installation has the details.
Pick your setup. In all three, keep FloatingDevTools inside the same providers as your screens, so tools such as React Query can reach them.
Add Buoy to your root layout, app/_layout.tsx (or src/app/_layout.tsx). This example uses a Stack. Keep whichever navigator you already have.
import { Stack } from "expo-router";
import { Buoy, FloatingDevTools } from "@buoy-gg/core";
Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });
export default function RootLayout() {
return (
<>
<Stack />
<FloatingDevTools />
</>
);
}
import { Stack } from "expo-router";
import { Buoy, FloatingDevTools } from "@buoy-gg/core";
Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY });
export default function RootLayout() {
return (
<>
<Stack />
<FloatingDevTools />
</>
);
}
Render FloatingDevTools next to your existing App content, inside any providers.
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 />
</>
);
}
Mount the menu in your root component. React Native doesn't load .env.local into process.env by itself, so pass BUOY_KEY in through the environment setup your app already uses.
import { Buoy, FloatingDevTools } from "@buoy-gg/core";
// Read BUOY_KEY with the env loader your app already uses.
Buoy.init({ licenseKey: yourConfiguredKey });
export default function App() {
return (
<>
<YourApp />
<FloatingDevTools />
</>
);
}
import { Buoy, FloatingDevTools } from "@buoy-gg/core";
// Read BUOY_KEY with the env loader your app already uses.
Buoy.init({ licenseKey: yourConfiguredKey });
export default function App() {
return (
<>
<YourApp />
<FloatingDevTools />
</>
);
}
Restart the dev server so Metro picks up the new packages. In Expo:
npx expo start --clear
npx expo start --clear
Open the app and tap the floating button. If Buoy asks you to set up an account, check that your key reached Buoy.init.
Open Network, go back to your app and do something that makes an HTTP request, such as refreshing a list. Open Network again and select the request. You should see its URL, status, timing and response body.
If the list is empty, make sure the action sent a new request and didn't read cached data. Network Monitor lists the supported capture paths and overrides.
Each tool is its own package. Install the ones you want and restart the dev server, and Buoy adds them to the menu. Installation lists every package.
A few tools need to be pointed at your app's data:
zustandStores. See the Zustand setup.watchAtoms, using your app's own store if it has a custom provider. See the Jotai setup.Render FloatingDevTools only for the users who should inspect your app. Use your app's existing authorization checks for internal users, QA, or support. A Buoy account key controls Buoy access; your app decides which users can reach the menu.
Start in development. Before enabling access in a shipped app, review the component reference and your plan's production restrictions.
@buoy-gg/external-sync to connect.Use a Free or Pro Buoy account key for this setup. Run npx --package=@buoy-gg/core buoy login from your app's directory. Plan limits and paid features are listed on pricing.
Buoy makes account and license requests. Development telemetry is described in Telemetry; disable that telemetry with Buoy.init({ licenseKey: process.env.EXPO_PUBLIC_BUOY_KEY, telemetry: false }). Disabling telemetry does not disable account validation or connections you configure for Desktop, MCP, or Ask Buoy.
Install its package and restart the development server. Check that tool's setup page for required integration, such as registering stores or placing the menu inside a provider.
The menu renders where you mount FloatingDevTools. Control access in your app. Desktop sync is disabled by default outside development; production sync requires explicit configuration and a Pro license. See FloatingDevTools.