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

npm-version-lib

v25.12.26-release.17

Published

A TypeScript/JavaScript versioning library that generates build versions based on date and git commits

Downloads

859

Readme

NPM-VersionLib

npm version License: MIT

A lightweight TypeScript library for automatic semantic versioning based on dates and git commits. Generate version numbers programmatically or via CLI.

Why NPM-VersionLib?

Traditional semantic versioning requires manual updates. NPM-VersionLib automates version generation using:

  • Current date as the version base (YY.MM.DD)
  • Git commits for incremental build numbers
  • Release types to differentiate development, beta, and production builds

Perfect for CI/CD pipelines, automated builds, and projects that need consistent, traceable version numbers.

Features

  • Dual Usage - Import as a library or use as CLI
  • Date-Based - Versions reflect when code was built
  • Git Integration - Tracks daily commit count automatically
  • Type Safety - Full TypeScript support with exported types
  • Flexible - Works with any Node.js project structure
  • Zero Config - No setup files or configuration needed
  • Custom Types - Use dev, beta, release, or define your own

Version Format

Generates versions in two formats:

Release Format (blank/empty type): YY.MM.DD.[commits]
Development Format: YY.MM.DD-[type].[commits]

| Component | Description | Example | |-----------|-------------|------| | YY | Year (last 2 digits) | 25 | | MM | Month (01-12) | 12 | | DD | Day (01-31) | 26 | | type | Release type (optional) | dev, beta, or custom | | commits | Daily commit count | 3 |

Example Versions:

25.12.26.3          → Release (no type specified)
25.12.26-dev.3      → Development, 3rd commit on Dec 26, 2025
25.12.26-beta.1     → Beta release, 1st commit today
25.12.26-alpha.2    → Custom type "alpha", 2nd commit today

Installation

# As a project dependency
npm install npm-version-lib

# For development/build scripts
npm install --save-dev npm-version-lib

# Global installation (for CLI usage)
npm install -g npm-version-lib

Requirements: Node.js 14+ and Git (for commit counting) install --save-dev npm-version-lib


## Quick Start

### Programmatic Usage

```typescript
import { generateAndUpdateVersion } from 'npm-version-lib';

// GLibrary Usage (Recommended)

```typescript
import { generateAndUpdateVersion } from 'npm-version-lib';

// Generate version and update package.json
const version = generateAndUpdateVersion('beta');
console.log(version); // '25.12.26-beta.3'

CLI Usage

npm-version              # Generates release version (default)
npm-version dev          # Generates dev version
npm-version beta         # Generates beta version  
npm-version alpha        # Custom type
npm-version dev 5        # Dev version with commit count = 5 (⚠️ shows warning)
npm-version 42           # Release version with commit count = 42 (shortcut)
npm-version --help       # Show help

What it does: Generates a version based on today's date and git commits, then updates your package.json.

Override Commit Count: You can manually set the commit number as a second argument (useful for testing or version fixing):

npm-version dev 10       # Dev with commit count = 10 (shows warning)
npm-version beta 5       # Beta with commit count = 5 (shows warning)
npm-version 42           # Release with commit count = 42 (shortcut syntax)

generateVersion(releaseType, options?)

Generates a version string based on the current date and git commits.

const version = generateVersion('beta');
console.log(version); // '25.12.26-beta.3'

?, options?): string | undefined`

Generates a version string without modifying any files.

import { generateVersion } from 'npm-version-lib';

const version = generateVersion('beta');
console.log(version); // '25.12.26-beta.3'

generateAndUpdateVersion(releaseType?, options?): string | null

Generates a version and updates package.json in one step. Most common use case.

import { generateAndUpdateVersion } from 'npm-version-lib';

const version = generateAndUpdateVersion();        // '25.12.26.5' (release)
const devVersion = generateAndUpdateVersion('dev'); // '25.12.26-dev.5'

// With manual commit count override (shows warning)
const customVersion = generateAndUpdateVersion('dev', { 
  overrideCommitCount: 10 
}); // '25.12.26-dev.10'

// Returns version string and updates package.json

Default: Empty string (generates release format)
Options: projectPath, silent, overrideCommitCount


getProjectVersion(options?): string | null

Reads the current version from package.json.

import { getProjectVersion } from 'npm-version-lib';

const currentVersion = getProjectVersion();
console.log(currentVersion); // '25.12.26-dev.2'

getVersionInfo(releaseType?, options?): VersionInfo | null

Returns detailed version metadata with type safety.

import { getVersionInfo } from 'npm-version-lib';

const info = getVersionInfo(); // Release format
console.log(info);
// {
//   version: '25.12.26.5',
//   dateVersion: '25.12.26',
//   releaseType: 'release',
//   buildNumber: 5,
//   timestamp: '2025-12-26T10:30:00.000Z'
// }

const devInfo = getVersionInfo('dev');
// {
//   version: '25.12.26-dev.5',
//   dateVersion: '25.12.26',
//   releaseType: 'dev',
//   buildNumber: 5,
//   timestamp: '2025-12-26T10:30:00.000Z'
// }

updatePackageVersion(version, options?): boolean

Manually updates package.json with a specific version.

import { updatePackageVersion } from 'npm-version-lib';

const success = updatePackageVersion('1.2.3-custom.1');

getGitCommitCount(dateStr, options?): number

Gets the number of git commits for a specific date.

import { getGitCommitCount } from 'npm-version-lib';

const commits = getGitCommitCount('2025-12-26');
console.log(commits); // 5

createVersionFile(version, options?): boolean (Optional)

Creates a TypeScript file with version constants. Only call if you need a generated file.

import { generateVersion, createVersionFile } from 'npm-version-lib';

const version = generateVersion('release');
if (version) {
  creage Examples

### 1. Build Scripts

```typescript
import { generateAndUpdateVersion } from 'npm-version-lib';

const releaseType = process.env.RELEASE_TYPE || ''; // Empty = release
const version = generateAndUpdateVersion(releaseType);

console.log(`Building version ${version}...`);
// Proceed with build process

2. NPM Scripts

Add to package.json:

{
  "scripts": {
    "version:release": "npm-version",
    "version:dev": "npm-version dev",
    "version:beta": "npm-version beta",
    "prebuild": "npm run version:release",
    "build": "tsc"
  }
}

Run: npm run build (auto-generates release version before building)

3. CI/CD Pipeline

import { generateAndUpdateVersion } from 'npm-version-lib';

// GitHub Actions, GitLab CI, etc.
// Empty string = release format
const version = generateAndUpdateVersion('', { silent: true });
console.log(`::set-output name=version::${version}`);

4. Display Version in App

impHow It Works

1. **Extract Date** - Gets current date in `YY.MM.DD` format
2. **Count Commits** - Runs `git rev-list` to count today's commits
3. **Assemble Version** - Combines date + type + count:
   - Release (no type): `25.12.26.3`
   - With type: `25.12.26-beta.3`
4. **Update Files** - Writes new version to `package.json` (and optionally to `src/version.ts`)

**Fallback:** If Git is unavailable or no commits exist, commit count defaults to `0`.

## CLI Commands

The package provides two CLI aliases:

```bash
npm-version      # Main command
npm-v           # Short alias

Both work identically:

npm-version release
npm-v release

Error Handling

The library gracefully handles common scenarios:

| Scenario | Behavior | |----------|----------| | No Git repository | Commit count = 0 | | No commits today | Commit count = 0 | | No package.json | Returns error, doesn't crash | | Invalid input | Shows help message | | File write fails | Returns false, logs error |

Configuration Options

All library functions accept an optional VersionOptions object:

interface VersionOptions {
  projectPath?: string;         // Path to project directory (default: cwd)
  silent?: boolean;             // Suppress console output (default: false)
  overrideCommitCount?: number; // Override git commit count (shows warning)
}

Example:

import { generateVersion } from 'npm-version-lib';

const version = generateVersion('dev', {
  projectPath: '/path/to/project',
  silent: true,
  overrideCommitCount: 5  // Force commit count to 5 (⚠️ warning shown unless silent=true)
});
  1. Git Commit Count: Counts the number of commits made on the current day using git log
  2. Version Assembly: Combines date, release type, and commit count into a version string
  3. File Updates: Updates package.json and creates/updates src/version.ts with the new version

If git is not available or there are no commits for the current day, the commit count defaults to 0.

API Reference

Functions

generateVersion(releaseType: 'dev' | 'beta' | 'release'): string | undefined

Generates a version string based on the current date and git commits.

Parameters:

  • releaseType: The type of release (dev, beta, or release)

Returns: The generated version string or undefined if an error occurs

updatePackageVersion(newVersion: string): boolean

Updates the version field in package.json.

Parameters:

  • newVersion: The version string to set

Returns: true if successful, false otherwise

createVersionFile(version: string): boolean

Creates or updates src/version.ts with build metadata.

Parameters:

  • version: The version string to include in the file

Returns: true if successful, false otherwise

Exported Constants (from src/version.ts)

  • BUILD_VERSION: Current build version string
  • BUILD_DATE: ISO timestamp of the build
  • BUILD_TIMESTAMP: Unix timestamp in milliseconds
  • BUILD_INFO: Object containing version, date, and timestamp

Helper Functions (from src/version.ts)

  • getBuildDateString(): Returns a localized date string
  • getVersionDisplayString(): Returns formatted version string (e.g., "v25.09.20")

Error Handling

The library handles various error scenarios gracefully:

  • No Git Repository: Falls back to commit count of 0
  • No package.json: Warns but continues with version file creation
  • File System Errors: Logs errors and returns appropriate status codes
  • Invalid Arguments: Shows help message and exits with error code FAQ

Q: Why use this over manual versioning?
A: Automatic versioning eliminates human error, provides consistent version numbers, and works seamlessly in CI/CD pipelines.

Q: What's the difference between release and dev versions?
A: Release versions use a clean format (25.12.26.3) while dev/beta/custom versions include the type (25.12.26-dev.3).

Q: What if I don't have Git?
A: The library still works—commit count will default to 0.

Q: Can I use custom version types?
A: Yes! Any string without spaces works: npm-version staging, npm-version canary, etc.

Q: Can I override the commit count?
A: Yes! Pass a second argument to the CLI (npm-version dev 10) or use the overrideCommitCount option in the library. A warning will be displayed when you do this.

Q: Does it modify my Git history?
A: No. It only reads Git data, never writes.

Troubleshooting

Version shows 0 commits despite having commits:

  • Ensure Git is installed and accessible
  • Check that you're in a Git repository
  • Verify commits were made today (it counts daily commits only)

CLI command not found:

  • Install globally: npm install -g npm-version-lib
  • Or use with npx: npx npm-version-lib beta

Contributing

Contributions welcome!

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/amazing)
  3. Commit changes (git commit -m 'Add feature')
  4. Push to branch (git push origin feature/amazing)
  5. Open a Pull Request

License

MIT © enVId-tech

Links

  • NPM Package: https://www.npmjs.com/package/npm-version-lib
  • GitHub: https://github.com/enVId-tech/NPM-VersionLib
  • Issues: https://github.com/enVId-tech/NPM-VersionLib/issues

Built by enVId-tech Refactored with AI, developed by enVId Tech