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-overlay-manager/devtools

v0.2.4

Published

Developer tools for React Overlay Manager - visual debugging and management interface

Readme

@react-overlay-manager/devtools

A development panel for @react-overlay-manager/core. It lists open overlays, shows their props and lets you show, hide and close them.

Installation

pnpm add -D @react-overlay-manager/devtools   # or npm i -D

Usage

Render OverlayManagerDevtools next to <OverlayManager> and pass the same manager instance. With a different instance the panel stays empty.

import {
  OverlayManager,
  createOverlayManager,
} from '@react-overlay-manager/core';
import { OverlayManagerDevtools } from '@react-overlay-manager/devtools';

const manager = createOverlayManager(yourRegistry);

function App() {
  return (
    <>
      {/* Your app content */}
      <OverlayManager manager={manager} />
      <OverlayManagerDevtools manager={manager} />
    </>
  );
}

OverlayManagerDevtools renders the panel only when process.env.NODE_ENV is 'development' at import time. Otherwise it renders nothing. Vite, Next.js and webpack replace process.env.NODE_ENV in client builds. With a bundler that does not, define it yourself.

The panel shows overlay props, so it can display tokens or personal data that you pass to overlays. Keep it out of production builds.

Server rendering

Render DevTools from a client component. In the Next.js App Router, that file must start with 'use client'. The SSR section of the core README has a full provider example.

DevTools render the closed button on the server and on the first client render, so hydration matches. If the panel was open earlier in the same browser tab, it reopens after mount.

Features

Floating button

  • Shows "Overlays" and the number of overlays in the stack. Click it to open the panel.
  • Drag it to move it. It returns to the bottom-right corner each time the panel closes.

Panel

  • Drag the header to move the panel. Drag the bottom bar to change its height, or the bottom-right corner to change width and height.
  • Filter overlays by name or ID. Sort them by Recent (stack order), Visible first or Name.
  • Each row shows the overlay name, a Visible or Hidden badge and the ID.

Details

Select a row to see the overlay's ID, visibility and props, with these actions:

  • Close, which calls the overlay's close() with no result.
  • Show or Hide.
  • Copy the ID.
  • Copy the props JSON. The copied text matches the props view, with or without "Pretty" formatting.

Props appear as JSON. Plain data is shown in full. Values that JSON cannot represent are shown as strings instead of breaking the view:

| Value | Shown as | | :-------------------------------------- | :------------------------------------- | | The injected manager prop | "[OverlayManager]" | | BigInt 10n | "10n" | | A reference back to a containing object | "[Circular]" | | Function onSave | "[Function onSave]" | | React element <div /> | "[ReactElement <div>]" | | DOM node | "[HTMLDivElement div]" | | undefined, NaN, Infinity, symbols | "[undefined]", "NaN" and so on | | Map, Set | {"[Map]": [...]}, {"[Set]": [...]} | | A getter or toJSON() that throws | "[Threw: message]" |

Keyboard

  • Ctrl/Cmd + Shift + O opens or closes the panel. The shortcut is ignored while focus is in an input, a textarea or a contenteditable element.
  • Escape closes the panel.
  • Tab moves through the overlay rows. Enter or Space selects the focused row and keeps focus on it.

Stored state

The panel keeps these values in sessionStorage, so they last for the current browser tab:

| Key | Value | | :------------------------ | :------------------------ | | rom-devtools-open | Whether the panel is open | | rom-devtools-panel-pos | Panel position | | rom-devtools-panel-size | Panel size | | rom-devtools-selected | Selected overlay ID |

If sessionStorage is unavailable, the panel works without storing anything.

Contributing

See CONTRIBUTING.md in the repository root.