This tool works with both Expo and React Native CLI projects. Just install and go.
Full Zustand store inspection for React Native. Monitor state changes, explore diffs, jump to any previous state, and reset stores in real-time — directly on your device.

All 12 registered stores at a glance — name, memory type (in-memory or persisted), and the keys that changed most recently.
npm install @buoy-gg/zustandPass your stores directly to FloatingDevTools via the zustandStores prop — no separate setup call needed.
import { FloatingDevTools } from '@buoy-gg/core';
import { useCounterStore } from './stores/counter';
import { useAuthStore } from './stores/auth';
import { useCartStore } from './stores/cart';
const stores = {
counterStore: useCounterStore,
authStore: useAuthStore,
cartStore: useCartStore,
};
return <FloatingDevTools zustandStores={stores} />;
import { FloatingDevTools } from '@buoy-gg/core';
import { useCounterStore } from './stores/counter';
import { useAuthStore } from './stores/auth';
import { useCartStore } from './stores/cart';
const stores = {
counterStore: useCounterStore,
authStore: useAuthStore,
cartStore: useCartStore,
};
return <FloatingDevTools zustandStores={stores} />;
Every state update is captured with rich metadata:
Tap any state change to see three detailed tabs:
Explore the full state tree after this change with a collapsible JSON viewer. Navigate deeply nested state with ease.
Side-by-side comparison showing exactly what changed — additions (green), removals (red), and modifications (yellow) clearly highlighted. Choose between tree view or split view.
Browse the complete current state of the store, including all keys and their current values.
For precise partial state capture and timing data, wrap individual stores:
import { create } from 'zustand';
import { buoyDevTools } from '@buoy-gg/zustand';
const useCounterStore = create(
buoyDevTools(
(set) => ({
count: 0,
increment: () => set((s) => ({ count: s.count + 1 })),
}),
{ name: 'counterStore' }
)
);
import { create } from 'zustand';
import { buoyDevTools } from '@buoy-gg/zustand';
const useCounterStore = create(
buoyDevTools(
(set) => ({
count: 0,
increment: () => set((s) => ({ count: s.count + 1 })),
}),
{ name: 'counterStore' }
)
);
Works with middleware chaining (persist, immer, etc.):
import { persist } from 'zustand/middleware';
const useAuthStore = create(
buoyDevTools(
persist(
(set) => ({ user: null, login: (u) => set({ user: u }) }),
{ name: 'auth-storage' }
),
{ name: 'authStore' }
)
);
import { persist } from 'zustand/middleware';
const useAuthStore = create(
buoyDevTools(
persist(
(set) => ({ user: null, login: (u) => set({ user: u }) }),
{ name: 'auth-storage' }
),
{ name: 'authStore' }
)
);
Catch performance issues before they impact users (middleware mode):
Find state changes by store name or changed keys, or filter to show only updates that modified state.
Restore any store to a previously captured state — instantly see how your app looked at any point in history.
Reset any store back to its initial state in one tap — no need to restart the app.
Each store gets a consistent color across the UI for easy visual tracking when monitoring multiple stores.
Auto-detects stores using Zustand's persist middleware and tags changes accordingly.
Export state data or diffs for debugging, bug reports, or test fixtures (Pro).
Pause state capture when you need to focus, resume when ready.