Core Library
The version module provides a type-safe SemVer 2.0.0 model using Scala 3 opaque types.
libraryDependencies += "africa.shuwari" %% /* or `%%%` */ "version" % "0.6.2"
Overview
The core library offers:
- Opaque types for version components — zero-cost abstractions with validation
- Constrained pre-release classifiers — a defined hierarchy with precedence ordering
- Composable operations — bump, progress through pre-release stages
- Robust parsing — handles common version formats with customisable pre-release mapping
Package Structure
All types are exported from the version package:
import version.*
Types at a Glance
| Type | Purpose | Constraint |
|---|---|---|
| version.MajorVersion | Major component | >= 0 |
| version.MinorVersion | Minor component | >= 0 |
| version.PatchNumber | Patch component | >= 0 |
| version.PreReleaseNumber | Pre-release version | >= 1 |
| version.PreReleaseClassifier | Classifier enum | dev, milestone, alpha, beta, rc, snapshot |
| version.PreRelease | Structured pre-release | Classifier + optional number |
| version.Metadata | Build identifiers | [0-9A-Za-z-]+ per identifier |
| version.Version | Complete version | MAJOR.MINOR.PATCH[-PRERELEASE][+METADATA] |
Quick Reference
import version.*
// Construction
val v = "1.2.3-alpha.1+build.456".toVersionUnsafe
// Access
v.major.value // 1
v.preRelease // Some(PreRelease(Alpha, Some(1)))
v.metadata // Some(Metadata(List("build", "456")))
// Status
v.stable // true (major > 0 and not snapshot)
v.snapshot // false
v.preRelease.isDefined // true
// Bumping core components
v.next[MajorVersion] // 2.0.0
v.next[MinorVersion] // 1.3.0
v.next[PatchNumber] // 1.2.4
// Pre-release transitions (precedence-aware)
v.next[Alpha] // 1.2.3-alpha.2 (same classifier → increment)
v.next[Beta] // 1.2.3-beta.1 (higher → advance in cycle)
v.next[Dev] // 1.2.4-dev.1 (lower → new patch cycle)
// Direct pre-release assignment
v.core // 1.2.3
v.as[Snapshot] // 1.2.3-SNAPSHOT
v.as[Beta] // 1.2.3-beta.1
Platform Support
| Platform | Status |
|---|---|
| JVM (JDK 17.0.17+) | ✅ |
| Scala.js (1.20.2) | ✅ |
| Scala Native (0.5.9) | ✅ |
See also
- Version Types — detailed type documentation
- Parsing — parsing versions from strings
- Operations — version manipulation
In this article