Simple implementation of Semantic Versioning 2.0.0 on R.
smvr provides a lightweight, fully vectorized R class for Semantic Versioning. It enables type-safe manipulation, comparison, and sorting of version numbers, and integrates smoothly with tidyverse tools.
Install the latest release version from CRAN:
install.packages("smvr")The development version can be installed from GitHub:
pak::pak("eitsupi/smvr")library(smvr)
# Parse version characters into smvr objects
v <- parse_semver(c("1.0.0", "1.0.0-alpha.2", "1.0.0-alpha.10", "1.0.1+20250621", "0.9.0"))
# Sort versions
sort(v)
#> <smvr[5]>
#> [1] 0.9.0 1.0.0-alpha.2 1.0.0-alpha.10 1.0.0 1.0.1+20250621
# Can compare with string notation
v["1.0.0-alpha" < v & v < "1.0.0"]
#> <smvr[2]>
#> [1] 1.0.0-alpha.2 1.0.0-alpha.10
# Works with tibble data frame and dplyr
tibble::tibble(version = v) |>
dplyr::arrange(version) |>
dplyr::mutate(
`>= 1.0.0` = version >= "1.0.0",
`pre-release` = is_pre_release(version),
)
#> # A tibble: 5 × 3
#> version `>= 1.0.0` `pre-release`
#> <smvr> <lgl> <lgl>
#> 1 0.9.0 FALSE FALSE
#> 2 1.0.0-alpha.2 FALSE TRUE
#> 3 1.0.0-alpha.10 FALSE TRUE
#> 4 1.0.0 TRUE FALSE
#> 5 1.0.1+20250621 TRUE FALSE{tibble},
{dplyr}, etc.).{vctrs}.numeric_version() in base R works well for versions that
only have MAJOR.MINOR.PATCH. But it does not support pre-release
identifiers of SemVer, so in the case of including pre-release versions,
it is not suitable.{tibble} and {dplyr}.{R6} object, which is not vectorized. Also, at the
moment (version 0.1.0, published 2020-02-22 on CRAN), it has a bug in
comparing pre-release versions1, so it does not work
correctly.