Skip to content

/flags/semver/semver-i-preid-prerelease

semver -i prerelease --preid beta: bump to 1.2.4-beta.0, beta.1 and rc versions

verified onenvironmentlocal · windows 10.0.26200 arm64 · GNU bash 5.3.15 (Git Bash)updated
tool
SemVer
command
semver
flag
-i, --increment LEVEL --preid ID
default
-i defaults to patch; without --preid prerelease versions get a bare number (1.2.4-0); -n defaults to 0

semver -i prerelease --preid beta 1.2.3 prints 1.2.4-beta.0: it moves to the next patch version and starts a beta prerelease series. Run on 1.2.4-beta.0 it prints 1.2.4-beta.1. --preid names the identifier used by the pre* levels (premajor, preminor, prepatch, prerelease); without it, node-semver uses a bare number such as 1.2.4-0. The same rules drive npm version prerelease --preid beta and most JavaScript release tools.

All increment levels on real versions

node-semver's CLI is installed in a temporary folder (npx semver behaves the same):

bash
npm init -y >/dev/null && npm install --silent --no-audit --no-fund semver@7.8.5 >/dev/null 2>&1
export PATH="$PWD/node_modules/.bin:$PATH"
bump() { printf '%-42s -> %s\n' "semver $*" "$(semver "$@")"; }
bump -i prerelease 1.2.3
bump -i prerelease --preid beta 1.2.3
bump -i prerelease --preid beta 1.2.4-beta.0
bump -i prerelease --preid rc 1.2.4-beta.3
bump -i prepatch --preid rc 1.2.3
bump -i preminor --preid alpha -n 1 1.2.3
bump -i premajor --preid rc 1.2.3
bump -i prerelease --preid rc -n false 1.2.3
bump -i release 1.3.0-rc.2
bump -i patch 1.2.3-beta.1
bump -i minor 1.3.0-rc.2
bump -i major 2.0.0-rc.1

Output

semver -i prerelease 1.2.3                 -> 1.2.4-0
semver -i prerelease --preid beta 1.2.3    -> 1.2.4-beta.0
semver -i prerelease --preid beta 1.2.4-beta.0 -> 1.2.4-beta.1
semver -i prerelease --preid rc 1.2.4-beta.3 -> 1.2.4-rc.0
semver -i prepatch --preid rc 1.2.3        -> 1.2.4-rc.0
semver -i preminor --preid alpha -n 1 1.2.3 -> 1.3.0-alpha.1
semver -i premajor --preid rc 1.2.3        -> 2.0.0-rc.0
semver -i prerelease --preid rc -n false 1.2.3 -> 1.2.4-rc
semver -i release 1.3.0-rc.2               -> 1.3.0
semver -i patch 1.2.3-beta.1               -> 1.2.3
semver -i minor 1.3.0-rc.2                 -> 1.3.0
semver -i major 2.0.0-rc.1                 -> 2.0.0

Switching the identifier (beta to rc) restarts the counter at 0 on the same base version. release, and patch/minor/major applied to a prerelease of exactly that level, drop the prerelease and produce the final version instead of jumping to the next one.

Levels

LevelFrom 1.2.3From a prerelease
major / minor / patch2.0.0 / 1.3.0 / 1.2.4Finalises a prerelease of that level (2.0.0-rc.1 -> 2.0.0)
premajor2.0.0-ID.0Always bumps major again
preminor1.3.0-ID.0Always bumps minor again
prepatch1.2.4-ID.0Always bumps patch again
prerelease1.2.4-ID.0 (like prepatch)Increments the counter: beta.0 -> beta.1
releaseprints null (nothing to finalise)Removes the prerelease part

Options that shape the prerelease part

OptionEffectExample
--preid IDIdentifier before the counter--preid rc -> 1.2.4-rc.0
-n 0 (default)Counter starts at 01.3.0-alpha.0
-n 1Counter starts at 11.3.0-alpha.1
-n falseNo counter at all1.2.4-rc

Pitfalls

  • Pre-levels always bump. premajor on 2.0.0-rc.0 gives 3.0.0-rc.0, not 2.0.0-rc.1; use prerelease to continue a series.
  • Prereleases are not installed by default. A range like ^1.2.0 does not match 1.2.4-beta.0 unless the consumer opts in; see semver -p and pre-release versions.
  • Invalid input. semver prints nothing and exits with 1 for a string that is not a version; the library throws TypeError: Invalid Version.
  • Order of identifiers. Prereleases sort alphabetically by identifier, so alpha < beta < rc, and numerically by counter (beta.2 < beta.10), which is why the conventional names work.

Bumping in scripts and package files is covered in bump a version number.

FAQ

Why did semver -i prerelease turn 1.2.3 into 1.2.4-0?

Without --preid the prerelease identifier is just a number. Add --preid beta (or rc, alpha) to get 1.2.4-beta.0. npm version prerelease --preid beta uses the same logic.

How do I go from 1.3.0-rc.2 to the final 1.3.0?

Use -i release, which removes the prerelease part. -i minor gives the same result for 1.3.0-rc.2, and -i patch turns 1.2.3-beta.1 into 1.2.3, because a prerelease of exactly that level is finalised instead of bumped.

Can I start the counter at 1 instead of 0?

Yes, with -n 1: semver -i preminor --preid alpha -n 1 1.2.3 prints 1.3.0-alpha.1. -n false omits the number, giving 1.2.4-rc.

Sources