npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

react-native-dev-inspector

v1.3.1

Published

Click on React Native components to jump to source code in your IDE

Readme

react-native-dev-inspector

Click on React Native components to jump directly to the source code in your IDE.

Installation

npm install react-native-dev-inspector
npm install --save-dev @rn-dev-inspector/babel-plugin

react-native-dev-inspector bundles the Metro middleware, so you don't need to install @rn-dev-inspector/metro-plugin separately.

Setup

All three steps are required.

1. Configure Babel

// babel.config.js
module.exports = function (api) {
  api.cache(true);
  return {
    presets: ['babel-preset-expo'], // or 'module:@react-native/babel-preset'
    plugins: [
      '@rn-dev-inspector/babel-plugin',
      // 'react-native-reanimated/plugin' must stay last, if you use it
    ],
  };
};

The babel plugin is not optional. It is what records where each element is written. React 19 removed the _source information that older versions attached to elements, so on React 19 / React Native 0.78+ this plugin is the only way the inspector can know a component's source location.

2. Configure Metro

// metro.config.js
const { getDefaultConfig } = require('expo/metro-config');
const { withInspector } = require('react-native-dev-inspector/metro');

const config = getDefaultConfig(__dirname);

module.exports = withInspector(config, {
  editor: 'code', // 'code' | 'cursor' | 'webstorm' | etc.
});

On React Native <= 0.81 or 0.82+, also wrap with the compatibility layer, which adapts to where RN keeps its inspector internals:

const { withInspectorCompat } = require('react-native-dev-inspector/rn-compat');

module.exports = withInspector(withInspectorCompat(config), { editor: 'code' });

It warns and leaves the config alone if it can't find your react-native install, so it never breaks the bundler. See the root README for the version matrix.

3. Wrap Your App

import { Inspector, InspectorDevMenu } from 'react-native-dev-inspector';

export default function App() {
  return (
    <Inspector>
      <YourApp />
      <InspectorDevMenu position="bottom-right" />
    </Inspector>
  );
}

Then restart Metro with a cleared cache — babel config changes are cached:

npx expo start --clear                 # Expo
npx react-native start --reset-cache   # React Native CLI

Features

  • Click to Inspect - Tap any component to see its source location
  • Open in Editor - Jump directly to the source code in your IDE
  • Component Hierarchy - Navigate the full component tree
  • Box Model - See margin, padding, and dimensions
  • Style Inspector - View computed styles
  • Dev Menu Integration - Toggle from RN dev menu

The inspector is development-only: when __DEV__ is false, <Inspector> renders its children and nothing else.

Exports

// Components and hooks
import {
  Inspector,
  InspectorDevMenu,
  InspectorButton,
  useInspector,
  toggleInspectorGlobal,
} from 'react-native-dev-inspector';

// Metro plugin
const { withInspector } = require('react-native-dev-inspector/metro');

// RN version compatibility layer (Metro resolver)
const { withInspectorCompat } = require('react-native-dev-inspector/rn-compat');

API

<Inspector>

<Inspector
  disabled={false}
  editor="code"
  devServerUrl="http://localhost:8081"  // auto-detected from the bundle URL
  addToDevMenu={true}
  onInspectorEnabled={() => {}}
  onInspectorDisabled={() => {}}
  onElementSelected={(info) => {}}
  onElementTapped={(info) => {}}
>
  {children}
</Inspector>

devServerUrl defaults to the host that served the JS bundle, so physical devices and LAN/tunnel setups work without configuration. Set it explicitly only if you need to override that.

<InspectorDevMenu>

<InspectorDevMenu
  position="bottom-right"  // 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'
  compact={false}
  showOnlyWhenInactive={false}
/>

useInspector()

const {
  isInspecting,
  enableInspector,
  disableInspector,
  toggleInspector,
} = useInspector();

withInspector() (Metro)

const { withInspector } = require('react-native-dev-inspector/metro');

module.exports = withInspector(metroConfig, {
  editor: 'code',      // Editor command
  cwd: process.cwd(),  // Working directory for resolving relative paths
});

Supported Editors

VS Code, Cursor, WebStorm, IntelliJ, Sublime, Vim, Neovim, Emacs, Zed, and more.

Set via, in priority order:

  • Metro config: withInspector(config, { editor: 'cursor' })
  • Environment: REACT_EDITOR=cursor (in the shell that runs Metro)

Requirements

  • React Native 0.68+
  • React 17+
  • Metro bundler

Documentation

Full documentation: https://vahesaroyan.github.io/react-native-dev-inspector/

License

MIT