Debug React Native TV apps with Buoy
Updated September 2026
Install and configure your account
Start with a compatible react-native-tvos development build. Focus Inspector requires New Architecture event support. Follow native setup requirements for your selected packages; a Metro restart alone may not be sufficient.
npm install @buoy-gg/core @buoy-gg/external-sync @buoy-gg/tv-remote @buoy-gg/focus-inspector
npx --package=@buoy-gg/core buoy loginFor Expo, use the account key the CLI saved to your env file. React Native CLI apps must supply the key through their own environment configuration. Mount Buoy inside any providers required by your selected tools:
import { FloatingDevTools } from "@buoy-gg/core";
// Add alongside your app content, inside the required providers.
<FloatingDevTools
headless
licenseKey={process.env.EXPO_PUBLIC_BUOY_KEY}
externalSync={{ deviceName: "Living Room TV" }}
/>Open Buoy Desktop, sign in and select the TV connection. For an Android TV emulator, forward the broker port to the host:
adb -s <serial> reverse tcp:42831 tcp:42831Physical devices need a reachable broker address. Follow the TV installation guide for connection and host-tool setup.
Keep the TV app headless
Focusable overlays can affect D-pad navigation. Headless mode avoids adding Buoy's floating menu to the screen while keeping supported capture and sync active. It does not configure every store or router automatically.
Compare a known focus path with capture enabled and disabled if you suspect interference. A successful check in one app does not prove zero overhead or identical focus behavior in every layout.
TV Remote and Focus Inspector
TV Remote
Record supported remote events and replay sequences through available host input. Compare received events with the app behavior.
npm i @buoy-gg/tv-remote
Focus Inspector
Inspect observed focus transitions, discovered focusable elements and possible focus problems. Findings need review in your layout.
npm i @buoy-gg/focus-inspector
Record a short remote sequence and compare the events with what the TV did. Focus findings are heuristics: an unvisited element is not necessarily unreachable. Check your layout and focus guides before treating a flag as a defect.
See the TV Remote and Focus Inspector guides for recording, scanning and action limits.
Host input support
Desktop sends host input; the TV package observes events delivered to the app. Not every OS-level event reaches JavaScript. The Apple TV simulator path needs idb installed separately from Xcode. Use the installation guide for the host commands.
Other tools on TV
Install the inspectors your app needs and configure their adapters. Data availability depends on the TV fork, build, installed tools and capture start.
Network
Inspect supported requests captured after instrumentation starts, with available headers, bodies and timing.
Storage
Inspect configured storage adapters. Editing and retained history depend on the adapter and plan.
Console
Inspect supported JavaScript logs captured after setup, subject to retention limits.
Env
Inspect the configuration values explicitly supplied to the tool.
Routes
Inspect connected navigation state and use supported route actions with the required parameters.
Events Timeline
Review events from configured sources in a shared timeline.
React Query
Inspect the connected query client and available cache controls.
Redux
Inspect actions and state from the store connected to Buoy.
Zustand
Inspect registered stores and captured changes.
Jotai
Inspect tracked atoms and captured updates.
Does TV need a separate Buoy SDK?
Can I replay input on a physical Apple TV?
Is it free?
Does headless mean there is no background work?
Connect your TV app
Start with a Free account, install the required packages and follow the TV connection guide.
npm install @buoy-gg/core @buoy-gg/external-sync