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

repo-updater

v0.1.6

Published

CLI tool to mass-update dependencies across multiple git repositories with auto package manager detection (npm, pnpm, yarn, Bun)

Downloads

953

Readme

repo-updater

CLI tool that mass-updates dependencies across multiple git repositories using your preferred package manager (npm, pnpm, yarn, or Bun). Automatically detects the package manager, commits changes, creates pull requests via gh, and opens all resulting PR URLs in the browser.

Replaces manually running a dependency update workflow in each repo one-by-one.

Features

  • Auto-detection: Automatically detects which package manager to use based on lockfiles
  • Multi-package manager support: Works with npm, pnpm, yarn, and Bun
  • Batch processing: Update dependencies in multiple repos in one command
  • GitHub integration: Creates pull requests and opens them in your browser
  • Dry-run mode: Preview changes without executing anything
  • Cross-platform: Runs on Windows, macOS, and Linux

Prerequisites

Setup

bun install repo-updater -g

Usage

repo-updater [options] [repo paths...]

Options

| Flag | Description | | --- | --- | | -h, --help | Show help message | | -n, --dry-run | Print every step without executing any commands | | -c, --config <path> | Path to a custom config file |

Positional arguments

Pass one or more absolute repo paths directly to override the config file:

repo-updater C:\path\to\repo1 C:\path\to\repo2

Examples

# Update all repos listed in config
repo-updater

# Preview what would happen without touching anything
repo-updater --dry-run

# Use a different config file
repo-updater -c ./other-config.json

# Update a single repo directly
repo-updater C:\path\to\single-repo

Config file

The tool searches for a config file in this order:

  1. Explicit path via -c / --config
  2. ./repo-updater.config.json (current working directory)
  3. ~/.config/repo-updater/config.json (user home)

Format

{
  "repos": [
    "C:\\path\\to\\repo-one",
    "C:\\path\\to\\repo-two"
  ]
}

The repos array contains absolute paths to git repositories. Directories that don't exist are skipped with a warning.

How it works

Package Manager Detection

The tool automatically detects which package manager to use by checking for lockfiles in this priority order:

  1. package-lock.json → npm
  2. pnpm-lock.yaml → pnpm
  3. yarn.lock → yarn
  4. bun.lock → Bun
  5. (fallback) → npm

This allows you to manage mono-repos or mixed package manager environments without configuration.

Update Pipeline

For each repository, the tool runs this pipeline sequentially:

| Step | Command | | --- | --- | | 1 | Detect default branch via git symbolic-ref refs/remotes/origin/HEAD (fallback to main) | | 2 | Detect package manager from lockfiles | | 3 | git checkout <default-branch> | | 4 | git pull | | 5 | git checkout -b chore/dep-updates-YYYY-MM-DD-<timestamp> | | 6 | <pm> update (or <pm> upgrade for yarn) | | 7 | <pm> install | | 8 | git status --porcelain | | 9 | git add -A | | 10 | git commit -m "dep updates YYYY-MM-DD" | | 11 | git push -u origin chore/dep-updates-YYYY-MM-DD-<timestamp> | | 12 | gh pr create --title "Dep Updates YYYY-MM-DD" --body "Dep Updates YYYY-MM-DD" |

If step 8 shows no changes, the branch is deleted and the repo is skipped (reported as "no changes").

After all repos are processed, a summary box lists every PR URL. You're then prompted to open them all in the browser.

Dry-run mode

With --dry-run, each step is printed to the console prefixed with [dry-run] but nothing is executed. No git commands run, no branches are created, no PRs are opened.

Example Scenarios

Single mono-repo with multiple package managers

If your mono-repo has packages/app using npm and packages/lib using pnpm, repo-updater will detect and use the correct package manager for each automatically.

Mixed environment

Manage repos using different package managers in a single batch operation:

{
  "repos": [
    "/path/to/npm-project",
    "/path/to/pnpm-monorepo",
    "/path/to/yarn-workspace",
    "/path/to/bun-project"
  ]
}

repo-updater will detect each one and run the appropriate update commands.