Bun Semver API
Universal Release uses Bun's native Bun.semver for all version operations.
Why Bun.semver?β
- 20x faster than node-semver
- Built-in - No external dependencies
- Full compatibility with npm semver
- Native implementation in Zig
Basic Operationsβ
// Compare versions
Bun.semver.order("1.0.0", "1.0.1"); // -1, 0, or 1
// Check range satisfaction
Bun.semver.satisfies("1.2.3", "^1.0.0"); // true
// Sort versions
const versions = ["1.0.0", "2.0.0", "1.5.0"];
versions.sort(Bun.semver.order);
// ["1.0.0", "1.5.0", "2.0.0"]
Version Comparisonβ
// order() returns -1, 0, or 1
Bun.semver.order("1.0.0", "2.0.0"); // -1 (first is less)
Bun.semver.order("2.0.0", "1.0.0"); // 1 (first is greater)
Bun.semver.order("1.0.0", "1.0.0"); // 0 (equal)
Range Satisfactionβ
// Caret ranges
Bun.semver.satisfies("1.2.3", "^1.0.0"); // true
Bun.semver.satisfies("2.0.0", "^1.0.0"); // false
// Tilde ranges
Bun.semver.satisfies("1.2.3", "~1.2.0"); // true
Bun.semver.satisfies("1.3.0", "~1.2.0"); // false
// Exact match
Bun.semver.satisfies("1.2.3", "1.2.3"); // true
// Range expressions
Bun.semver.satisfies("1.5.0", ">=1.0.0 <2.0.0"); // true
Performance Comparisonβ
Benchmark: 1 million semver operations
node-semver: ~2000ms
Bun.semver: ~100ms
20x faster! β‘
Migration from node-semverβ
Before:
import semver from "semver";
semver.satisfies("1.2.3", "^1.0.0");
semver.gt("2.0.0", "1.0.0");
After:
// Built-in to Bun runtime
Bun.semver.satisfies("1.2.3", "^1.0.0");
Bun.semver.order("2.0.0", "1.0.0") === 1;
Version Manager Integrationβ
Universal Release's VersionManager wraps Bun.semver for convenience:
import { VersionManager } from "@universal/release";
const vm = new VersionManager();
// Bump version
vm.bump("1.0.0", "minor"); // "1.1.0"
// Parse version
vm.parse("1.2.3-beta.1");
// Compare versions
vm.compare("2.0.0", "1.9.9"); // 1
Next Stepsβ
- Secrets Management - Secure credentials
- Version Management - Higher-level API