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

ubump

v0.4.5

Published

SemVer bumping for Unity projects and UPM packages.

Readme

Video of using ubump's interactive CLI mode.

ubump

Discord Shield NPM Version Code Style

SemVer bumping for Unity projects and UPM packages.

Why?

You have a Unity project, package, or monorepo of packages that you want to bump using automated release processes. ubump can do that for you, both as a platform-agnostic CLI and Node-based API. The interative CLI mode will even do all the committing, pushing, tagging, and changelog generation for you. ubump additionally remembers to sync package dependencies with those of the containing project. But you're in control: configure and use ubump however you like; orchestrate it in CI if you want.

Install & Run

  1. Get a reasonably modern version of Git.
  2. Get Node.js >= v10.0.0, which should include npx, the Node package runner.
  3. Run ubump with npx ubump.

Optionally you can run npm i -g ubump to permanently install ubump on a global basis. Otherwise npx will download a new copy of ubump each time it's run. Having ubump pre-installed makes startup faster, but the tradeoff is remembering to update it occasionally with npm i -g ubump.

Create an Alias

Maybe npx ubump is too verbose. If you're using a Unix-like operating system or subsystem, run this one-liner to create a permanent alias called ubump:

p=$HOME/.bashrc && touch $p && echo -e '\nalias ubump="npx ubump"' >> $p && source $p

Windows Note

On Windows (specifically 10), ubump is only confirmed to fully work with PowerShell. This appears to be a Node.js and/or Inquirer.js problem. Please reach out by submitting an issue if you can help improve the Windows experience.

Usage

For the ubump CLI to find a Unity project, either run it from the project's root directory, or specify the path, relative or absolute, with the --project-path option.

Interactive CLI

Running ubump without any commands will result in output similar to the following:

        __                                    
       /\ \                                   
 __  __\ \ \____  __  __    ___ ___   _____   
/\ \/\ \\ \ '__`\/\ \/\ \ /' __` __`\/\ '__`\ 
\ \ \_\ \\ \ \L\ \ \ \_\ \/\ \/\ \/\ \ \ \L\ \
 \ \____/ \ \_,__/\ \____/\ \_\ \_\ \_\ \ ,__/
  \/___/   \/___/  \/___/  \/_/\/_/\/_/\ \ \/ 
                                        \ \_\ 
                                         \/_/ 


? What is the type of change for the ReeseUnityDemos project as a whole? (Use arrow keys)
❯ No Change 
  Patch       0.5.10 
  Minor       0.6.0 
  Major       1.0.0 
  Prepatch    0.5.10-prerelease.0 
  Preminor    0.6.0-prerelease.0 
  Premajor    1.0.0-prerelease.0 
(Move up and down to reveal more choices)

And that's just the tip of the iceberg. ubump sanity-checks your project for unstaged and staged changes. It also lets you know when you're not in the master branch. Not to mention, when you select a pre bump type, you will be further prompted for a specific prerelease identifier—the default is the existing one if it exists—otherwise it's just prerelease.

Vim users: You can also use the j and k keys to move up and down.

Options

These are options specific to the interactive CLI:

Option|Description|Default :-----:|:-----:|:-----: --project-tag-prefix|The prefix of the project tag (also used in commit messages by default).|v --package-tag-prefix|The prefix for package tags (also used in commit messages by default).|v --skip-commit|Skips file I/O, staging, and committing associated with version changes (useful if you're only interested in tagging).|false --skip-project|Skips asking about the project if true.|false --skip-packages|Skips asking about packages if true.|false --skip-project-tagging|Skips project tagging if true.|false --skip-package-tagging|Skips package tagging if true.|false --skip-project-tagging-changelog|Skips changelog generation in project tags if true.|false --skip-package-tagging-changelog|Skips changelog generation in package tags if true.|false --skip-locally-unchanged-packages|Skips all packages but those that have changed locally.|false --skip-internal-ref-syncing|Skips synchronizing internal references.|false

Non-Interactive CLI

The best way to learn the non-interactive CLI is to pass the --help option to ubump, but you also might want to look at the commands below:

Commands

Command|Positional Parameters|Description :-----:|:-----:|:-----: package-name| <package-path>|Gets a package name at the provided path. package-version| <package-path>|Gets a package version at the provided path. project-name| |Gets a project name. project-version| |Gets a project version. bump-version|<some-version> <bump-type> [preid]|Bumps a version with the provided bump type—with an optional prerelease identifier. bump-package|<package-path> <bump-type> [preid]|Bumps a package's version with the provided bump type and package path—with an optional prerelease identifier. bump-project|<bump-type> [preid]|Bumps a project's version with the provided bump type—with an optional prerelease identifier. sync-package-deps|<package-path>|Synchronizes package dependencies with those of the project, including the editor version. sync-internal-refs||Synchronizes all packages internally referencing each other in the project so that the latest version is specified in their respective dependencies.

API

Using ubump as an API? Install it as a dependency in your Node project like so:

npm i ubump

Then you can import it in a file via:

const ubump = require('ubump')

Bump Types

The API has a helper object literal called bumpType with the following properties:

  • patch
  • minor
  • major
  • prepatch
  • preminor
  • premajor
  • prerelease

These are meant to be passed to some functions listed below:

Functions

Function|Positional Parameters|Description :-----:|:-----:|:-----: isPre| <bumpType>|true if passed bump type is 'prepatch,' 'preminor,' 'premajor,' or 'prerelease.' Case is irrelevant. versionIsValid| <version>|true if passed version is loosely considered to be valid in terms of SemVer. Permits prerelease identifiers. bumpVersion| <version> <bumpType> [preid]|Bumps a version with the bump type and optional prerelease identifier. getPackageName| <pjson>|Gets a package's (display) name. getUnfriendlyPackageName| <pjson>|Gets a package's (unfriendly) name, e.g. a package with a name property set as com.reese.spawning would have an unfriendly name of spawning. getPackageVersion| <pjson>|Gets a package's version. getProjectVersion| <psettings>|Gets a project's version. getManifest| <projectPath>|Gets a project's manifest (Packages/manifest.json) file as a string. getProjectSettings| <projectPath>|Gets the project settings (ProjectSettings/ProjectSettings.asset) file as a string. getProjectName| <psettings>|Gets a project's (product) name. setProjectVersion| <version> <projectPath>|Sets a project version. getPackageSettings| <packagePath>|Gets the package settings (package.json) file as a string. hasPackageDepsToSync| <packagePath> <projectPath>|true if the passed package has dependencies to synchronize with the containing project, or if the editor version should be synchronized. setPackageVersion| <version> <packagePath>|Sets a package's version. syncPackageDeps| <packagePath> <projectPath>|Synchronizes package dependencies with those of the project, including the editor version. syncInternalRefs||Synchronizes all packages internally referencing each other in the project so that the latest version is specified in their respective dependencies.

Contributor Agreement

By submitting a pull request, you agree to license your work under this project's MIT license.