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 🙏

© 2025 – Pkg Stats / Ryan Hefner

toolbench

v1.0.2

Published

A reusable development tools library for React applications

Downloads

145

Readme

toolbench

A reusable development tools library for React applications. Provides a flexible, resizable dev tools panel with support for custom panels, console logging, and positioning.

Installation

npm install toolbench
# or
pnpm add toolbench
# or
yarn add toolbench

For local development, you can link it as a local dependency:

{
  "dependencies": {
    "toolbench": "file:../vids-mydevtools"
  }
}

Usage

Basic Usage with MyDevTools Component

import { MyDevTools } from 'toolbench';
import 'toolbench/styles'; // Import styles

function MyApp() {
  const panels = [
    {
      id: 'console',
      title: 'Console Log',
      content: <div>Console Log content</div>
    },
    {
      id: 'layout',
      title: 'Layout',
      content: <div>Layout panel content</div>
    }
  ];

  const logs = [
    { type: 'info', message: 'Application started', timestamp: Date.now() },
    { type: 'success', message: 'Data loaded', timestamp: Date.now() }
  ];

  return (
    <>
      <MyAppContent />
      <MyDevTools 
        panels={panels}
        logs={logs}
        storagePrefix="myApp"
        onDevToolStateChange={(state) => {
          console.log('Dev tools state:', state);
        }}
      />
    </>
  );
}

Using the HOC (Higher Order Component)

import { withDevTools } from 'toolbench';
import 'toolbench/styles'; // Import styles

function MyComponent({ devToolState }) {
  return <div>My Component</div>;
}

// Wrap your component with devtools
const MyComponentWithDevTools = withDevTools(MyComponent, {
  panels: [
    {
      id: 'console',
      title: 'Console Log',
      content: <div>Console Log content</div>
    }
  ],
  getLogs: (props) => {
    // Return logs based on component props
    return props.logs || [];
  },
  storagePrefix: 'myComponent',
  onDevToolStateChange: (state) => {
    console.log('Dev tools state changed:', state);
  }
});

export default MyComponentWithDevTools;

API Reference

MyDevTools Props

| Prop | Type | Default | Description | |------|------|---------|-------------| | panels | Array<Panel> | [] | Array of panel objects to display | | logs | Array<Log> | [] | Array of console log entries | | storagePrefix | string | 'myDevTools' | Prefix for localStorage keys | | onDevToolStateChange | function | undefined | Callback when devtool state changes |

Panel Object

{
  id?: string;        // Optional unique ID (auto-generated if not provided)
  title: string;       // Panel title shown in tab
  content: ReactNode; // React component/element to render in panel
}

Log Object

{
  type?: 'info' | 'success' | 'warning' | 'error' | 'header' | 'section';
  message: string;
  data?: any;         // Optional data object (displayed as JSON)
  timestamp?: number; // Optional timestamp
}

withDevTools Options

| Option | Type | Default | Description | |--------|------|---------|-------------| | panels | Array<Panel> | [] | Array of panel objects | | getLogs | function\|Array | () => [] | Function that returns logs or static array | | storagePrefix | string | 'myDevTools' | Prefix for localStorage keys | | onDevToolStateChange | function | undefined | Callback for state changes |

Features

  • Resizable: Drag to resize the dev tools panel
  • Positionable: Pin to bottom, left, or right
  • Collapsible: Minimize to a small bar
  • Split View: Split console separately from panels
  • Persistent State: Settings saved to localStorage
  • Console Logging: Built-in console with log types and formatting
  • Custom Panels: Add any React component as a panel

Development

Building

npm run build

This will create a dist folder with the compiled library.

Local Development

When developing locally, you can link this package to your project:

  1. In this directory, run npm link (or pnpm link)
  2. In your project, run npm link toolbench (or pnpm link toolbench)

Or use a file path dependency as shown in the installation section above.

License

MIT