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 🙏

© 2025 – Pkg Stats / Ryan Hefner

@sylphx/bump

v1.6.1

Published

Modern changelog and release management

Downloads

8,694

Readme

@sylphx/bump

Fully semantic release automation. Conventional commits in, semantic versions out.

Features

  • Fully semantic - Conventional commits → semantic versions, automatically
  • Zero config - Works out of the box, no setup required
  • Automatic Release PRs - Preview changes before publishing
  • Monorepo native - File-based detection, independent versioning, cascade bumps
  • Workspace protocol - Auto-resolves workspace:* dependencies at publish time
  • Pre-releases - Alpha, beta, RC via bump files
  • Graduate to 1.0 - Bump file to go from 0.x → 1.0.0
  • Cross-platform - Works with npm, yarn, pnpm, and bun
  • GitHub integration - Auto-creates releases and changelogs
  • Bump files - Optional manual control with custom changelogs

Why bump?

| | bump | changesets | |---|---|---| | Setup | 1 workflow file | Multiple config files + bot | | Workflow | Just commit | Create changeset file per change | | Version control | Automatic from commits | Manual per-changeset | | Learning curve | Know conventional commits? Done | New syntax + tooling | | PR noise | 1 release PR | 1 changeset file per change | | Fine-grained control | Via commit message or bump file | Via changeset file | | Workspace protocol | Auto-resolved | Manual handling required | | Cascade bumps | Automatic | Manual configuration |

Both tools support fine-grained version control - the difference is where you express it:

  • bump: Control versions through commit messages (feat: = minor, fix: = patch, feat!: = major), or optionally via bump files for custom changelog entries
  • changesets: Control versions through separate changeset files

Choose bump if you prefer keeping version intent in your git history. Choose changesets if you prefer separate files for release notes.

How It Works

  1. You write commits like feat: add login or fix: resolve bug
  2. Bump creates a Release PR automatically
  3. You merge the PR when ready
  4. Bump publishes to npm
git commit -m "feat: add dark mode"
git push
        ↓
   [Release PR created automatically]
        ↓
   [You merge when ready]
        ↓
   [Published to npm!]

Setup (2 minutes)

Step 1: Add the workflow

Create .github/workflows/release.yml:

name: Release

on:
  push:
    branches: [main]

permissions:
  contents: write
  pull-requests: write

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - uses: SylphxAI/bump@v0
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          npm-token: ${{ secrets.NPM_TOKEN }}

Step 2: Add NPM_TOKEN secret

  1. Go to npmjs.com → Access Tokens → Generate New Token
  2. Go to your repo → Settings → Secrets → Actions → New repository secret
  3. Name: NPM_TOKEN, Value: your token

Step 3: Done!

Push a commit and watch the magic happen.

Commit Format

Use these prefixes in your commits:

| Commit | Version Bump | Example | |--------|--------------|---------| | feat: | Minor (1.0.0 → 1.1.0) | feat: add dark mode | | fix: | Patch (1.0.0 → 1.0.1) | fix: resolve login bug | | feat!: | Major (1.0.0 → 2.0.0) | feat!: redesign API |

Other prefixes like docs:, chore:, test:, ci: don't trigger releases.

Semver 0.x Behavior

During 0.x development, breaking changes bump minor instead of major (per semver spec):

  • feat!: on 0.1.0 → 0.2.0 (not 1.0.0)

When ready for stable release, create a bump file:

# .bump/graduate.md
---
release: "1.0.0"
---

First stable release!

What Happens

When you push to main:

┌─────────────────────────────────────────────────────────┐
│  Your commits:                                          │
│  - feat: add user profile                               │
│  - fix: resolve logout issue                            │
│  - docs: update readme                                  │
└─────────────────────────────────────────────────────────┘
                            ↓
┌─────────────────────────────────────────────────────────┐
│  PR #42: chore(release): 1.2.0                          │
├─────────────────────────────────────────────────────────┤
│  ## 🚀 Release                                          │
│                                                         │
│  This PR will release **my-package** version **1.2.0**  │
│                                                         │
│  ### ✨ Features                                        │
│  - add user profile (abc1234)                           │
│                                                         │
│  ### 🐛 Bug Fixes                                       │
│  - resolve logout issue (def5678)                       │
│                                                         │
│  > Merging this PR will publish to npm                  │
└─────────────────────────────────────────────────────────┘
                            ↓
                    [You merge the PR]
                            ↓
                  [Published to npm! 🚀]

FAQ

When should I merge the Release PR?

Whenever you want to publish. The PR stays open and updates automatically with each push. Merge it when you're ready to release.

What if I don't want to release yet?

Just don't merge the PR. It will keep updating as you push more commits.

Can I release without a PR?

Yes! Use mode: release to publish directly:

- uses: SylphxAI/bump@v0
  with:
    mode: release
    github-token: ${{ secrets.GITHUB_TOKEN }}
    npm-token: ${{ secrets.NPM_TOKEN }}

Can I trigger releases manually?

Yes! Add workflow_dispatch:

on:
  workflow_dispatch:  # Manual trigger
  push:
    branches: [main]

Then go to Actions → Release → Run workflow.

CLI Usage

The CLI is for local development - checking status and creating bump files:

# Install
npm add -D @sylphx/bump

# Check release status (also runs with just `bump`)
bump status

# Create bump files
bump add                      # Interactive mode
bump add minor                # Minor release
bump add patch --beta         # Patch with beta prerelease
bump add minor -p @scope/core # Target specific package
bump add "1.0.0"              # Explicit version

# Initialize config (optional)
bump init

Note: Releases are handled automatically by GitHub Actions. The CLI is only for local development.

Monorepo Support

Bump automatically detects monorepos (via workspaces in package.json) and handles them intelligently:

How It Works

  1. File-based detection: Commits are mapped to packages by analyzing which files changed
  2. Per-package versioning: Each package gets its own version based on its relevant commits
  3. Per-package tags: Tags follow @scope/[email protected] format for independent tracking
  4. Smart PR body: Shows all packages being released in a summary table
┌────────────────────────────────────────────────────────────┐
│  PR #42: chore(release): @scope/[email protected], @scope/[email protected]│
├────────────────────────────────────────────────────────────┤
│  ## 🚀 Release                                             │
│                                                            │
│  | Package     | Current | New   | Type  |                 │
│  |-------------|---------|-------|-------|                 │
│  | @scope/foo  | 1.1.0   | 1.2.0 | minor |                 │
│  | @scope/bar  | 1.9.0   | 2.0.0 | major |                 │
│                                                            │
│  ### 📦 @scope/foo `1.1.0` → `1.2.0`                       │
│  - feat: add new feature (abc1234)                         │
│                                                            │
│  ### 📦 @scope/bar `1.9.0` → `2.0.0` ⚠️                    │
│  - feat!: breaking change (def5678)                        │
└────────────────────────────────────────────────────────────┘

Monorepo Setup

Same workflow as single packages - just make sure you have workspaces in your root package.json:

{
  "workspaces": ["packages/*"]
}

No additional configuration needed!

Configuration (Optional)

Create bump.config.ts for custom settings:

import { defineConfig } from '@sylphx/bump'

export default defineConfig({
  // Customize commit types
  conventional: {
    types: {
      feat: 'minor',
      fix: 'patch',
      perf: 'patch',
      // Add your own
      improvement: 'minor',
    },
  },

  // Changelog options
  changelog: {
    file: 'CHANGELOG.md',
    groupBy: 'type', // or 'scope' or 'none'
  },

  // Publishing options
  publish: {
    access: 'public',
    tag: 'latest', // or 'next', 'beta', etc.
  },
})

Pre-releases

Use bump files for pre-release versions:

# .bump/beta.md
---
release: minor
prerelease: beta
---

New beta feature.

1.0.01.1.0-beta.0

Workflow:

  1. Create .bump/beta.md with prerelease: beta
  2. Push → PR created for v1.1.0-beta.0
  3. Merge → publish beta
  4. For stable release, create .bump/stable.md without prerelease
  5. Push → PR created for v1.1.0

Bump Files

While bump works automatically from commits, you can use bump files for:

  • Custom changelog entries with hand-written release notes
  • Manual version specification (e.g., recovery from blocked npm versions)
  • Triggering releases without conventional commits
  • Pre-release versions (alpha, beta, rc)

Creating Bump Files

Use the bump add command:

# Interactive mode - prompts for all options
bump add

# Quick creation
bump add patch                    # Patch release
bump add minor                    # Minor release
bump add major                    # Major release

# With prerelease
bump add minor --alpha            # 1.0.0 → 1.1.0-alpha.0
bump add minor --beta             # 1.0.0 → 1.1.0-beta.0
bump add minor --rc               # 1.0.0 → 1.1.0-rc.0
bump add patch --prerelease next  # Custom prerelease tag

# Target specific package (monorepo)
bump add patch -p @scope/core
bump add minor --package @scope/utils

# With changelog message
bump add minor -m "Added new dashboard feature"

# Explicit version (recovery)
bump add "1.2.3"                  # Set exact version

Or create a markdown file in .bump/ directory manually:

# .bump/feature.md
---
release: minor
---

### New Dashboard

Completely redesigned the analytics dashboard with:
- Real-time data updates
- Customizable widgets
- Export to PDF/CSV

Fields:

  • release - patch, minor, major, or explicit version "1.2.3"
  • prerelease - (optional) alpha, beta, rc
  • package / packages - (optional) target package(s)

Prerelease Versions

# .bump/beta-feature.md
---
release: minor
prerelease: beta
---

New feature in beta testing.

1.0.01.1.0-beta.0

# .bump/rc.md
---
release: patch
prerelease: rc
packages:
  - @scope/core
  - @scope/utils
---

Release candidate.

1.0.01.0.1-rc.0

Monorepo Support

Single package:

---
release: patch
package: @scope/core
---

Bug fix for core module.

Multiple packages:

---
release: minor
packages:
  - @scope/core
  - @scope/utils
---

Shared feature across packages.

All packages (omit package field):

---
release: patch
---

Security fix for all packages.

How It Works

  1. Create .bump/*.md file with frontmatter
  2. Push to main → Release PR includes your custom changelog
  3. Merge PR → Bump files are automatically removed

Recovery Example

If npm publish fails due to a blocked version:

# .bump/recovery.md
---
release: "1.2.1"
package: @scope/mypackage
---

Recovery release after npm publish failure.

Push this file, and bump will create a new PR with version 1.2.1.

Action Inputs

| Input | Description | Default | |-------|-------------|---------| | mode | auto, release, version, or pr | auto | | github-token | GitHub token | required | | npm-token | NPM token for publishing | - | | dry-run | Preview without publishing | false | | base-branch | Base branch for PR mode | main | | tag | Create git tags | true | | changelog | Update CHANGELOG.md | true | | github-release | Create GitHub release | true |

Permissions

The workflow requires these permissions:

permissions:
  contents: write      # For creating tags and releases
  pull-requests: write # For creating/updating release PRs

License

MIT