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

nomadutil

v1.0.8

Published

CLI + library for local Git ship/release workflows

Readme

nomadutil

CLI and library for local Git ship/release workflows. Stage everything, commit only when there are staged changes, push a branch, and (for release) create an annotated version tag — same behavior as classic shell helpers, runnable from any git repo.

Commands are grouped under modules so more tools can be added later. v1 ships the git module.

Install

Global CLI:

npm install -g nomadutil

As a library dependency:

npm install nomadutil

One-off without installing:

npx nomadutil git ship "fix login crash"

Local development

npm install
npm run build
npm link          # or: npm i -g .

Publish to npm

Publishing and GitHub Releases are automated via GitHub Actions when you push a version tag (v*.*.*). The tag version must match package.json (as with nomadutil git release 1.0.8 after bumping the package version).

One-time setup — configure Trusted Publishing on npmjs.com (no NPM_TOKEN secret):

  1. Open the package → AccessTrusted PublishersGitHub Actions
  2. Set owner anomaddev, repository NomadUtil, workflow filename publish.yml
  3. Leave Environment blank; allow npm publish

Then release:

# bump "version" in package.json first, commit, then:
nomadutil git release 1.0.8

That pushes tag v1.0.8, which runs:

Provenance is omitted while this repository is private (npm only supports provenance from public repos).

Manual publish (local):

npm install          # required — installs typescript for the build step
npm login
npm publish --access public

prepublishOnly runs tsc before packing. If you see exit code 127 / tsc: not found, dependencies were not installed (or an .npmrc omitted devDependencies — use npm install --include=dev).

CLI

Always operates on the current working directory’s git repository (not the tool install path).

Help and version

nomadutil --help          # or -h
nomadutil --version       # or -V
nomadutil git --help
nomadutil git ship --help

| Flag | Description | |------|-------------| | -h, --help | Show usage (works at any command level) | | -V, --version | Print the installed package version |

Running nomadutil with no arguments also prints help (and exits non-zero).

Ship

Stage all changes, commit if anything is staged, push the branch:

nomadutil git ship "fix login crash"

Release

Same as ship, then create an annotated tag and push it. If package.json is present and its version does not match, release fails and asks whether to update package.json / package-lock.json and continue (-y skips the prompt):

nomadutil git release 1.0.0
nomadutil git release 1.0.0 "optional message"
nomadutil git release v1.0.0   # same tag as 1.0.0 → v1.0.0
nomadutil git release 1.0.1 -y # auto-bump package version on mismatch

Flags

Shared by git ship and git release:

| Flag | Default | Description | |------|---------|-------------| | --remote <name> | origin | Git remote | | --branch <name> | main | Branch to push | | --dry-run | off | Print what would run; no git writes | | -y, --yes | off | git release only: auto-update package version on mismatch |

Examples:

nomadutil git ship "wip" --dry-run
nomadutil git release 1.2.0 --remote origin --branch main

Exit non-zero on missing args or git failures.

Library

import { ship, release } from 'nomadutil'

await ship({ message: 'fix login crash' })

await release({ version: '1.0.0' })
await release({
  version: 'v1.0.0',
  message: 'optional message',
  remote: 'origin',
  branch: 'main',
  dryRun: false,
  cwd: process.cwd(), // optional; defaults to process.cwd()
})

Defaults

  • Remote: origin
  • Branch: main
  • Tag prefix: v (versions 1.0.0 and v1.0.0 both become tag v1.0.0)
  • Release message: Release vX.Y.Z when omitted
  • Working tree: current working directory (process.cwd() / optional cwd)

Modules

| Module | Commands | |--------|----------| | git | ship, release |

More modules can be added later as nomadutil <module> <command>.