consoleBuilt-inLogs from the app, filtered by level or text.
getMessages · clearMessages
Rozenite puts plugin panels in React Native DevTools for you, and gives your coding agent the same data as tools it calls from the terminal: logs, network requests, React profiles and plugin state.
npx rozenite@latest initWorks with React Native, iOS, Android, Expo, Metro, Re.Pack, React Native Web, Webpack, Lynx, rspeedy, React Native DevTools.
[01] How it works
It detects Metro, Re.Pack or rspeedy, installs the right package and updates your bundler config.
$ npx rozenite@latest initEach plugin adds a panel to React Native DevTools. Most also need a small hook in your app; its page has the line.
$ npm install -D @rozenite/tanstack-query-pluginThe rozenite skill teaches a coding agent the rozenite agent CLI, with docs that match your installed version.
$ npx skills add callstackincubator/rozenite --skill rozeniteconst { getDefaultConfig, mergeConfig } = require('@react-native/metro-config');
const { withRozenite } = require('@rozenite/metro');
const defaultConfig = getDefaultConfig(__dirname);
module.exports = withRozenite(mergeConfig(defaultConfig, {}), {
enabled: process.env.WITH_ROZENITE === 'true',
});
import { withRozenite } from '@rozenite/repack';
export default withRozenite(
{
// Your existing Re.Pack configuration
},
{
enabled: process.env.WITH_ROZENITE === 'true',
},
);const { getDefaultConfig } = require('expo/metro-config');
const { withRozeniteWeb } = require('@rozenite/web/metro');
const config = getDefaultConfig(__dirname);
module.exports = withRozeniteWeb(config);
// and in your web entry point:
require('@rozenite/web');@rozenite/webReact Native Web in a Chromium browser, with the Rozenite extension. Experimental.Set up Web import { defineConfig } from '@lynx-js/rspeedy';
import { pluginReactLynx } from '@lynx-js/react-rsbuild-plugin';
import { rozeniteLynxPlugin } from '@rozenite/lynx/rspeedy';
export default defineConfig({
plugins: [pluginReactLynx(), rozeniteLynxPlugin()],
});
@rozenite/lynxLynx apps through rspeedy, with Lynx DevTool turned on in the app. Experimental.Set up Lynx [02] Agents
Rozenite for Agents opens a session on the running app. Your agent reads logs, network requests, React profiles, performance traces and heap snapshots, and calls the tools your app and your plugins register.
Rozenite for Agentsnpx rozenite agent session create
npx rozenite agent console call \
--tool getMessages \
--args '{"levels":["error"]}' \
--session <session-id>consoleBuilt-inLogs from the app, filtered by level or text.
getMessages · clearMessages
networkBuilt-inRequests during a flow, with headers and bodies.
startRecording · listRequests · getResponseBody
reactBuilt-inThe component tree, props, state and hooks, and render profiles.
searchNodes · startProfiling · getRenderData
performanceBuilt-inA performance trace over a reproduction.
startTrace · stopTrace
memoryBuilt-inHeap snapshots and allocation sampling.
takeHeapSnapshot · startSampling
app · pluginsYoursYour app and your plugins register their own tools with one hook, for the state and actions only they know about.
Add a tool[03] Official plugins
Each official plugin is a thin bridge between a library and a DevTools panel, in the Rozenite tab.
@rozenite/network-activity-pluginHTTP and WebSocket traffic: requests, headers, payloads and timings.
@rozenite/tanstack-query-pluginQueries, mutations and cache entries, with refetch, invalidate and reset.
@rozenite/redux-devtools-pluginStore state, dispatched actions and a diff for each one.
@rozenite/react-navigation-pluginAction timeline, navigation state, time travel and deep link testing.
@rozenite/storage-pluginMMKV, AsyncStorage and Expo SecureStore in one panel.
@rozenite/performance-monitor-pluginStartup timing, custom marks, measures and metrics.
@rozenite/controls-pluginYour own toggles, inputs and buttons, kept out of your product UI.
@rozenite/file-system-pluginApp directories, with text and image previews and hex for binaries.
@rozenite/feature-flags-pluginInspect and override flags from a custom store, LaunchDarkly or Statsig.
@rozenite/sqlite-pluginBrowse tables and run queries against your app's databases.
@rozenite/expo-atlas-pluginYour Metro bundle: module sizes, duplicates and the dependency graph.
@rozenite/require-profiler-pluginA flame graph of your app's startup require() calls.
@rozenite/rhf-pluginValues, errors, dirty and touched state for every mounted form.
@rozenite/overlay-pluginGrids and reference images over the running app, with a compare slider.
More panels built and shared by other teams, in the plugin directory.
Browse the directoryA panel for your app's state, with a type-safe bridge to the app.
Build a plugin[04] Build your own
Write a plugin when you need to see your own app's state, or a library no plugin covers yet. You get a panel in the Rozenite tab, and your agent gets tools to read the same data.
import { DevToolsPluginClient } from '@rozenite/plugin-bridge';
export default function setupPlugin(
client: DevToolsPluginClient<PluginEvents>
) {
client.onMessage('request-user-data', () => {
client.send('user-data', getUser());
});
}import { useRozenitePluginAgentTool } from '@rozenite/agent-bridge';
export function UserPanelAgentTools() {
useRozenitePluginAgentTool({
pluginId: '@my-org/user-panel',
tool: getUserTool,
handler: () => getUser(),
});
return null;
}npx rozenite generate[05] Safe by default
Rozenite only runs when enabled is true in your bundler config, usually behind WITH_ROZENITE=true.
Plugins are disabled in production builds, so no plugin code reaches your release bundle.
Every installed plugin loads by default. Narrow it with include or exclude in withRozenite.
Switch away and back without losing data. Opt out per plugin with destroyOnDetachPlugins.
[06] Beyond React Native
@rozenite/lynxExperimentalThe same panels, plugin catalogue and CLI for Lynx apps, through rspeedy.
Set up@rozenite/webExperimentalYour React Native Web app as a DevTools target, with the browser extension.
Set up$ npx rozenite openExperimentalJust your plugin panels in their own window. They survive reloads and Fast Refresh.
Set up[07] FAQ
rozenite init detects the bundler and updates the config.