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

hydraterm

v0.0.3

Published

A Bun-native terminal process dashboard with real VT fidelity. Early work in progress.

Readme

hydraterm

Status: early work in progress. Script discovery, watching, and the multi-process OpenTUI dashboard work.

A Bun-native terminal process dashboard: auto-detects npm scripts, runs them together, restarts on file change, and lets you navigate between them as terminal panes backed by Ghostty's VT engine. See fidelity limits for the current parser and renderer boundary.

To install dependencies:

bun install

On first run, Hydraterm discovers every root and workspace script, presents a picker, then saves the selection as named processes in the root package.json:

hydraterm

After configuration exists, Hydraterm starts its auto-starting processes. Pass a process name to start only that process, or use --all to start every configured process. --root <path> chooses a starting directory. --no-watch disables automatic restarts, while --watch-debounce <ms> changes the default 150ms debounce.

hydraterm --all
hydraterm API
hydraterm --watch-debounce 300 API

The first-run picker lists all discovered scripts, including lifecycle hooks and linting commands. Every selected script runs from its owning package directory.

Process manifests

Hydraterm runs only named processes in the root package.json; it never starts a discovered workspace script until it has been saved to this configuration. Commands run through the system shell, so they support the same command syntax as Solo. workingDir and restartWhenChanged are relative to the repository root; an empty or omitted change list disables watching for that process. Processes auto-start unless autoStart is set to false.

{
  "hydraterm": {
    "processes": {
      "API": {
        "command": "bun run dev:api",
        "workingDir": "packages/functions",
        "restartWhenChanged": [
          "packages/functions/**",
          "packages/zero/**",
          "packages/data/**"
        ],
        "autoStart": true,
        "env": { "PORT": "3002" }
      },
      "Web": {
        "command": "bun run dev",
        "workingDir": "packages/web",
        "restartWhenChanged": [],
        "autoStart": true
      }
    }
  }
}

Run one configured process by name, for example hydraterm API. Use --all to start every configured process.

restartWhenChanged glob patterns are the complete watch declaration for a configured process. The watcher always ignores paths under node_modules, .git, vendor, .build-libghostty, dist, out, and build. Use --no-watch to temporarily disable every configured watcher.

Each command runs in Bun's native PTY. Its raw output is fed to Ghostty's VT parser before OpenTUI renders it. In the process navigation, use j/k to select a process, then s to start/stop it (or a to start all and p to stop all), and Enter to focus its output. While focused, typing and Ctrl-C go to that process, while j/k scroll its retained output history. Esc returns to navigation, r restarts the selected process, w toggles its watcher, and q exits. Process rows show whether watching is on, off, or awaiting debounce.

Run the automated proof:

bun test

Installation

Install it globally with either package manager, then run hydraterm from a project:

npm install --global hydraterm
# or
bun install --global hydraterm

Run it once without a global installation:

npx hydraterm
# or
bunx hydraterm

Platform support

v1 currently targets macOS on Apple Silicon only. The npm package declares this restriction so it cannot install silently on an unsupported platform. It ships a standalone executable, so npm/npx users do not need Bun installed.

Releases

Every non-bot push to main creates the next patch release, publishes it to npm, tags the release, and creates a GitHub Release. Publishing uses npm trusted publishing with GitHub Actions OIDC, so no npm token is stored in GitHub.

Configure the hydraterm package's trusted publisher in npm before merging the workflow: select GitHub Actions, enter organization vestia-dev, repository hydraterm, workflow filename release.yml, and allow npm publish. The package must already exist on npm to configure a trusted publisher; bootstrap its first publication manually if necessary.

This project was created using bun init in bun v1.3.11. Bun is a fast all-in-one JavaScript runtime.