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

@joshmarinacci/psh

v0.1.7

Published

A personal shell with multi-panel TUI

Readme

psh — Personal Shell

A Node.js/TypeScript interactive shell with a multi-panel TUI.

Features

  • Multi-panel TUI: tab bar + toggleable file browser sidebar
  • Pipes and I/O redirection (|, >, >>, <)
  • Built-in commands: cd, pwd, ls, cp, mv, rm, mkdir, rmdir, echo, cat, which, env, export, history, clear, exit, serve, view
    • view <file> — syntax-highlighted pager that stays inside the TUI (no PTY handoff). Supports less-style navigation: arrow keys / j / k to scroll a line, PageUp / PageDown / Space / b to scroll a page, g / G to jump to the top / bottom, /pattern + Enter to search forward, n to repeat the search, q to quit. Binary files open with the system viewer. Highlighted languages: JS/TS, Python, Shell, Rust, Go, JSON, YAML, TOML, HTML, CSS, Markdown
    • serve [--port=N] <path> — static HTTP server; serve --list / serve --stop <port> to manage running servers
  • Interactive programs (nano, vim, less, top, etc.) work correctly via PTY
  • Command history with two levels:
    • Global history persisted to ~/.psh_history (up to 10,000 entries)
    • Per-directory history persisted to ~/.psh_dir_history/ (up to 5,000 entries per directory)
    • Up arrow shows current-directory commands first, then falls back to global history
    • history --dir / history -d lists only the current directory's history
  • Tab completion for files, directories, and commands
    • Single Tab fills the longest common prefix
    • Double Tab opens a vertical completion menu, aligned to the token being completed, overlaid on the output pane
    • Tab / Down / Ctrl+N cycle forward; Up / Ctrl+P cycle backward; selection is applied to the buffer immediately
    • Enter accepts the current selection; any other non-Tab key accepts and continues editing
    • Paths with spaces are automatically escaped (e.g. My\ Documents/)
    • Completing a directory name then pressing Tab lists its contents

Running

npm install
npm run dev

Key Bindings

| Key | Action | |-----|--------| | Enter | Submit command | | Up / Ctrl+P | Previous history entry | | Down / Ctrl+N | Next history entry | | Ctrl+C | Cancel current input | | Ctrl+D | Exit shell (on empty line) | | Ctrl+A / Ctrl+E | Start / end of line | | Ctrl+K | Kill to end of line | | Ctrl+U | Kill entire line | | Ctrl+W | Kill word before cursor (close tab when line is empty) | | Tab | Fill longest common prefix; double-Tab opens completion menu | | Tab / Down / Ctrl+N | (in menu) Cycle forward | | Up / Ctrl+P | (in menu) Cycle backward | | Enter | (in menu) Accept selection without submitting | | Ctrl+T | New tab | | Alt+B / Alt+F | Cycle to previous / next tab | | F2 | Toggle file browser sidebar | | PageUp / PageDown | Scroll output |

Building

npm run build
node dist/psh.cjs

Installing globally

Published as @joshmarinacci/psh on npm. To install on any machine:

npm install -g --allow-scripts=node-pty @joshmarinacci/psh
psh

node-pty requires native compilation, so --allow-scripts=node-pty is needed. To avoid typing it every time:

npm config set allow-scripts=node-pty --location=user
npm install -g @joshmarinacci/psh

Publishing a new version

npm version patch   # or minor/major
npm run build
npm publish --access public

Publishing requires 2FA — npm will print a URL to open in your browser to approve the OTP.

Requirements

  • Node.js 20+
  • macOS or Linux

Future Features

[x] list completions for a subdir in a vertical list overlay [x] use arrow keys and enter when completion list is open [x] a way to cycle between my tabs — Alt+Left / Alt+Right [x] Please add a built-in 'help' command that lists the keyboard shortcuts available. [x] enable running interactive visual programs like nano from within the shell. [x] view command should do paging. [ ] view command should not delegate to the system open command unless it's an approved mimetype. currently only include some standard image mimetypes. [x] add the dir command is an alias for the same behavior as ls -la [x] show the current branch when user is inside of a git repo in a bottom footer [x] always show the cwd and branch if inside main, and time [x] per directory history [ ] Add a built in fetch command for http similar to curl [ ] Fetch then pipe into more or jq [ ] Built in ability to see results as different things

Bugs

[x] opening a file with _ or ( causes the shell to think it is multiple files [x] version number is wrong [x] can't select text in iterm [ ] can't switch tabs in iterm