Full Riverpod provider inspection for Flutter. Monitor provider state changes, explore value diffs, and browse live provider values in real-time — directly on your device. It's the same inspector UI as the React Native atom inspector, reading your Riverpod providers.
The React Native Jotai inspector, running here on a mock session. Riverpod's inspector is the Flutter port of this same panel set — provider values and state changes in place of atoms. Walk the tour, or skip it and start tapping.
Not a video — this is the shipped tool on mock data. cart, auth.session, and user.profile update as every write lands — no wrappers, no polling.
flutter pub add buoy_riverpodAdd the Buoy observer to your ProviderScope — no wrappers, no middleware, no modifications to existing providers:
import 'package:buoy_riverpod/buoy_riverpod.dart';
void main() {
registerBuoyRiverpod(); // or use the `buoy` umbrella widget
runApp(
ProviderScope(
observers: const [buoyRiverpodObserver],
child: const MyApp(),
),
);
}
import 'package:buoy_riverpod/buoy_riverpod.dart';
void main() {
registerBuoyRiverpod(); // or use the `buoy` umbrella widget
runApp(
ProviderScope(
observers: const [buoyRiverpodObserver],
child: const MyApp(),
),
);
}
Name your providers (
StateProvider(..., name: 'counter')) so the list reads well — unnamed providers fall back to their runtime type.
Browse all observed providers and their live current value:
number, boolean, object, array · N, null, etc. at a glanceEvery state change is captured with rich metadata:
prev → next at a glance (e.g. 0 → 5, null → {name, email})Tap any event for the detail view: full value trees and a split-screen diff — additions in green, removals in red — so you see exactly what changed in complex state.
Add buoy_riverpod, call registerBuoyRiverpod(), and add buoyRiverpodObserver to your ProviderScope observers — every provider's live value, its change history, and before/after value diffs are browsable on the device. No wrappers, no middleware, no changes to existing providers.
Unnamed providers fall back to their runtime type. Pass a name — StateProvider(..., name: 'counter') — so the list reads well.