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

@huhuhang/multipull

v0.1.5

Published

Pull many Git repositories safely from one CLI.

Readme

multipull

Pull many Git repositories safely from one CLI.

multipull scans a directory tree for real Git repositories, skips noisy generated folders, and runs a conservative pull operation for each repository.

Features

  • Discovers repository roots before running Git commands.
  • Skips common heavy directories such as node_modules, dist, build, target, vendor, lab-*, and challenge-*.
  • Uses a safe pull strategy: git pull --ff-only --prune.
  • Skips dirty worktrees by default.
  • Skips detached HEAD and branches without an upstream.
  • Shows a minimal single-line progress indicator in interactive terminals.
  • Shows one clear final table with repository, branch, upstream, and result.
  • Optionally parks dirty work on a multipull-backup/* branch before switching to the default branch.

Installation

npm install -g @huhuhang/multipull

Development checkout:

git clone https://github.com/huhuhang/multipull.git
cd multipull
npm install
npm run build
npm link

Usage

multipull [paths...]

Examples:

multipull
multipull ~/GitHub
multipull ~/GitHub ~/Work
multipull --dry-run
multipull --max-depth 5 ~/GitHub
multipull --verbose
multipull --park-to-default-branch

Options

--dry-run                 Show planned actions without pulling.
--max-depth <depth>       Maximum directory depth to scan. Defaults to 3; use 0 for no limit.
--verbose                 Show Git output details after the summary table.
--park-to-default-branch  Preserve dirty changes before switching to the default branch.

Concurrency, timeout, and ignore rules are internal defaults so the command stays easy to use.

Default Behavior

For each discovered repository, multipull:

  1. Reads the current branch, upstream, and worktree status.
  2. Skips dirty worktrees unless --park-to-default-branch is enabled and a default branch switch is needed.
  3. Skips detached HEAD.
  4. Skips branches without an upstream.
  5. Runs git pull --ff-only --prune.
  6. Prints a final summary table.

Parking Local Work

--park-to-default-branch is explicit because it creates Git history and switches branches.

When enabled:

  • If the repository is already on its default branch, multipull pulls normally.
  • If the repository is on another clean branch, multipull switches to the default branch and pulls.
  • If the repository is on another dirty branch, multipull creates a multipull-backup/* branch, commits the current worktree there, switches to the default branch, and pulls.

Ignored files are not force-added or deleted.

Development

npm install
npm run typecheck
npm test
npm run build
npm run check

Run from source:

npm run dev -- ~/GitHub --dry-run

License

MIT