/flags/semver/semver-i-preid-prerelease
semver -i prerelease --preid beta: bump to 1.2.4-beta.0, beta.1 and rc versions
- 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):
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.1Output
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
| Level | From 1.2.3 | From a prerelease |
|---|---|---|
| major / minor / patch | 2.0.0 / 1.3.0 / 1.2.4 | Finalises a prerelease of that level (2.0.0-rc.1 -> 2.0.0) |
| premajor | 2.0.0-ID.0 | Always bumps major again |
| preminor | 1.3.0-ID.0 | Always bumps minor again |
| prepatch | 1.2.4-ID.0 | Always bumps patch again |
| prerelease | 1.2.4-ID.0 (like prepatch) | Increments the counter: beta.0 -> beta.1 |
| release | prints null (nothing to finalise) | Removes the prerelease part |
Options that shape the prerelease part
| Option | Effect | Example |
|---|---|---|
| --preid ID | Identifier before the counter | --preid rc -> 1.2.4-rc.0 |
| -n 0 (default) | Counter starts at 0 | 1.3.0-alpha.0 |
| -n 1 | Counter starts at 1 | 1.3.0-alpha.1 |
| -n false | No counter at all | 1.2.4-rc |
Pitfalls
- Pre-levels always bump.
premajoron2.0.0-rc.0gives3.0.0-rc.0, not2.0.0-rc.1; useprereleaseto continue a series. - Prereleases are not installed by default. A range like
^1.2.0does not match1.2.4-beta.0unless 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.