js-semver 0.4.0

Parser and evaluator for npm's flavor of Semantic Versioning, compliant with node-semver
Documentation

js-semver

License crates github repo codecov

A parser and evaluator for npm's flavor of Semantic Versioning, compliant with node-semver.

This crate is designed for the JavaScript ecosystem and follows node-semver (the one npm uses) parsing and range semantics. It maintains high compatibility and performance, and has zero dependencies by default.

Example

use js_semver::{BuildMetadata, PreRelease, Range, Version};

fn main() {
    let range: Range = ">=4.1.0 <5.0.0".parse().unwrap();

    // Pre-release versions are not included in the range unless explicitly specified.
    let version = Version {
        major: 4,
        minor: 1,
        patch: 0,
        pre_release: PreRelease::new("rc.1").unwrap(),
        build: BuildMetadata::default(),
    };
    assert!(!range.satisfies(&version));

    // Stable version is included in the range.
    let version: Version = "4.1.0".parse().unwrap();
    assert!(range.satisfies(&version));
}

Features

serde

Enable serde to serialize and deserialize versions and ranges:

[dependencies]
js-semver = { version = "0.3", features = ["serde"] }
serde_json = "1"

For example, read a dependency range from package.json:

use js_semver::Range;

let package: serde_json::Value =
    serde_json::from_str(r#"{"dependencies":{"react":"^19.0.0"}}"#).unwrap();
let react: Range = serde_json::from_value(package["dependencies"]["react"].clone()).unwrap();
assert!(react.satisfies(&"19.1.0".parse().unwrap()));

Range is serialized in its normalized form. Invalid strings produce a deserialization error.

no-std

std feature is enabled by default. To use js-semver in a no_std environment, disable the default features:

[dependencies]
js-semver = { version = "0.3", default-features = false }

Comparison with other crates

node-semver

node-semver crate has numerous issues, including unnecessary dependencies like miette, incompatibilities with npm's node-semver, and the fact that it is no longer actively maintained.

semver

semver crate is designed for Cargo. Therefore, it is not well-suited for the Node.js ecosystem, such as parsing versions in package.json.

License

MIT-0

This project's tests incorporate material from third parties, but they are not part of the library. For attribution and additional notice information, see NOTICE.md.