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

@nozomiishii/pm

v0.1.7

Published

Project manager CLI — jump to projects via fzf

Readme

pm - VS Code Project Manager CLI

English | 日本語

I wanted to use VS Code Project Manager from the terminal too!

With the pm command, you can jump to any project registered in VS Code Project Manager.

Prerequisites

pm uses fzf for interactive project selection. Install it before setting up pm.

# macOS
brew install fzf

# Debian / Ubuntu
sudo apt install fzf

# Fedora
sudo dnf install fzf

# Arch Linux
sudo pacman -S fzf

Install

macOS/Linux (recommended)

curl -fsSL https://raw.githubusercontent.com/nozomiishii/pm/main/install.sh | bash

The pm binary is downloaded to ~/.pm/bin/pm, and the wrapper script that calls pm is placed at ~/.pm/pm.zsh. The .zshrc configuration is added automatically.

Restart your terminal or run source ~/.zshrc to start using pm.

npm

npm install -g @nozomiishii/pm

Uninstall

pm uninstall

Removes the binary, config files, and .zshrc entries.

Usage

pm --help

Usage: pm [options] [command]

Commands:
  cd [name]                    Jump to a project (fzf if no name given)
  ls                           List project names
  logo                         Display the pm logo
  uninstall                    Uninstall pm from your system
  create-workspace             Generate a .code-workspace file
    --name <name>              Workspace name (outputs <name>.code-workspace)
    --tag <name>               Include only projects with this tag (repeatable)

Options:
  --config <path>              Path to projects.json (or PM_CONFIG)
  --help                       Show this help
  --version                    Show version

Running `pm` without a command opens the fzf picker.
pm --help

pm --help

pm

Opens fzf picker and jumps to the selected project.

pm

pm

pm cd

Jumps to a project by name. Falls back to fzf if no name is given.

pm cd <name>

pm cd

pm ls

Lists all project names.

pm ls

pm ls

pm create-workspace

Bundles projects matching a --tag into a .code-workspace file.

pm create-workspace --name <name> --tag <tag>

For example, given the following projects.json:

[
  { "name": "dotfiles",  "rootPath": "~/Code/nozomiishii/dotfiles",  "tags": ["personal"] },
  { "name": "portfolio", "rootPath": "~/Code/nozomiishii/portfolio", "tags": ["personal"] },
  { "name": "fzf",       "rootPath": "~/Code/junegunn/fzf",         "tags": ["oss"]      }
]

Running the following command:

pm create-workspace --name my-workspace --tag personal

Generates my-workspace.code-workspace:

{
  "folders": [
    { "name": "dotfiles",  "path": "../nozomiishii/dotfiles" },
    { "name": "portfolio", "path": "../nozomiishii/portfolio" }
  ]
}

--tag can be specified multiple times — only projects matching all tags are included.

Configuration

The installer configures .zshrc automatically. For manual setup, add the following:

# (Optional) Path to projects.json. Defaults to the VS Code Project Manager path
export PM_CONFIG="$HOME/path/to/projects.json"

# Required
export PATH="$HOME/.pm/bin:$PATH"
source "$HOME/.pm/pm.zsh"

PM_CONFIG

pm reads project data from a projects.json file. If PM_CONFIG is omitted, it defaults to the VS Code Project Manager config path.

| OS | Default path | | --- | --- | | macOS | ~/Library/Application Support/Code/User/globalStorage/alefragnani.project-manager/projects.json | | Linux | ~/.config/Code/User/globalStorage/alefragnani.project-manager/projects.json | | Windows | %APPDATA%/Code/User/globalStorage/alefragnani.project-manager/projects.json |

You can also override the path temporarily with the --config flag:

pm --config ./projects.json ls

source "$HOME/.pm/pm.zsh"

The pm binary runs as a separate process, so cd inside the binary cannot change the calling shell's directory. The shell function loaded by source "$HOME/.pm/pm.zsh" runs cd in the current shell when the binary outputs a directory path.

# What pm.zsh does (simplified)
pm() {
  local output
  output="$(command pm "$@")"       # Run the binary
  [[ -d "$output" ]] && cd "$output"  # cd if output is a directory
}

This mechanism also provides tab completion for project names.

Acknowledgments

pm is heavily inspired by these projects. Thank you so much for boosting my productivity.

License

MIT