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

@medyll/monorepo-pnpm-release

v1.0.22

Published

Minimalist monorepo release tool for pnpm workspaces

Readme


@medyll/monorepo-pnpm-release 🤖

A lightweight, automated release manager for pnpm workspaces. It handles versioning, changelog generation, and publishing directly from GitHub Actions, for monorepos or standalone projects.

✨ Features

  • Directory-based Detection: Only bumps packages that have actual changes in their folder.
  • Independent Versioning: Each package follows its own lifecycle.
  • Smart Changelogs: Injects updates into existing CHANGELOG.md while preserving history.
  • Conventional Commits: Automatically calculates patch, minor, or major bumps.
  • Zero-Config CI: Automatically handles Git identity (bot) if not configured.
  • Hybrid Support: Works perfectly for both large monorepos and single-package projects.

🚀 Installation & Usage

CLI Options

--build

Execute the build script in each changed package before releasing. If a package does not define a build script, it is skipped with a neutral info message.

# Build changed packages only
npx @medyll/monorepo-pnpm-release --build

--package

Execute the package script in each changed package before releasing. If a package does not define a package script, it is skipped with a neutral info message.

# Package changed packages only
npx @medyll/monorepo-pnpm-release --package

# Combine both flags
npx @medyll/monorepo-pnpm-release --build --package

--regenerate-changelog

Regenerate the entire CHANGELOG.md file from Git history. This rewrites the file with standardized formatting (Date + Conventional Commit), grouping commits by Release/Tag.

  • Monorepo: Only includes commits touching the package directory.
  • Single Package: Includes all commits in the repository.
# Regenerate changelog without publishing or versioning
npx @medyll/monorepo-pnpm-release --regenerate-changelog

--verbose

Enable verbose logging with detailed output during the release process. Useful for debugging or understanding command execution.

npx @medyll/monorepo-pnpm-release --build all --verbose

--dry-run

Analyze and simulate the release without making any changes.

npx @medyll/monorepo-pnpm-release --dry-run

Option A: One-time execution (npx)

Useful to avoid polluting your dependencies.

npx @medyll/monorepo-pnpm-release

Option B: Integrated dependency

Recommended to lock the tool version for the whole team.

pnpm add -D @medyll/monorepo-pnpm-release

Then add the following script to package.json :

"scripts": {
  "release": "monorepo-pnpm-release"
}

Usage: pnpm release


⚙️ Configuration

You can configure the tool using CLI arguments or a configuration file. The tool looks for a .idae.pnpm-release file (JSON) in the project root.

Precedence Rule

  1. CLI Arguments (Highest priority, overrides config)
  2. Configuration File (.idae.pnpm-release)
  3. Defaults

Example .idae.pnpm-release

{
  "dry-run": false,
  "verbose": true,
  "pre-id": "beta",
  "build": true,
  "generate-readme-root": true
}

🛠 Workflow Integration

Create the file .github/workflows/release.yml :

name: Release
on:
  push:
    branches: [main, develop]

jobs:
  release:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      id-token: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0 
      
      - uses: pnpm/action-setup@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 20
          registry-url: 'https://registry.npmjs.org'

      - run: pnpm install --frozen-lockfile
      - run: npx @medyll/monorepo-pnpm-release
        env:
          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

📖 CLI Options

| Option | Alias | Description | Default | | --- | --- | --- | --- | | --dry-run | -d | Simulates the release without modifying Git or NPM | false | | --pre-id | -p | Pre-release identifier (alpha, beta, next) | alpha | | --verbose | -v | Shows detailed logs of internal steps | false | | --package | -k | Runs package script in each changed package | false | | --build | -b | Runs build script in each changed package | false |


📝 Commit Convention

The tool analyzes your commit messages to decide the next bump:

  • fix: ...patch
  • feat: ...minor
  • feat!: ... or BREAKING CHANGE:major

🛠 Troubleshooting

NPM Authentication Issues

If the CI fails at the publish step:

  1. Token Type: Use an Automation token (not Fine-grained without write permissions).
  2. GitHub Secret: Make sure the secret is named NPM_TOKEN.
  3. Access: For @scope/ packages, ensure they are public:
"publishConfig": { "access": "public" }

Git Identity Error

If you see Author identity unknown: The tool automatically configures github-actions[bot]. If you use your own identity, make sure it is set before running the tool.


📄 License

MIT