It would be really nice if the full semantic versioning spec was supported
in R. I can understand why only major.minor.patch would be supported for
CRAN. But for an R package in a development stage, it would be wonderful to
support pre-release and build metadata.

Use of `-` in semver to determine pre-release:
https://semver.org/#spec-item-9

The semver package does a pretty decent job of handling the semver spec:

ver_str <- "1.0.0-alpha+commit-hash"
package_version(ver_str)
#> Error: invalid version specification '1.0.0-alpha+commit-hash'

(sv <- semver::parse_version(ver_str))
#> [1] Maj: 1 Min: 0 Pat: 0 Pre: alpha Bld: commit-hash
as.character(sv)
#> [1] "1.0.0-alpha+commit-hash"


On Sat, Jan 17, 2026 at 10:29 AM Henrik Bengtsson <
[email protected]> wrote:

> A possible solution could be to preserve the original version string
> as an attribute, which then as.character() could use, e.g.
>
> > str(v)
> List of 1
>  $ :Classes 'package_version', 'numeric_version'  hidden list of 1
>   ..$ : int [1:3] 1 2 4
>  - attr(*, "class")= chr [1:2] "package_version" "numeric_version"
>  - attr(*, "source")= chr "1.2-4"
>
> I don't want to divert this "feature request", but a related
> discussion is whether we really need to support anything but x.y.z?
> Would it make sense to deprecate support for hyphenated version
> components? The one argument I recall for supporting hyphens was for
> "date" versions, e.g. YYYY-MM-DD, but R has dropped leading zeros for
> a while now;
>
> > package_version("2026-01-17")
> [1] '2026.1.17'
>
> and CRAN doesn't accept them;
>
> * checking CRAN incoming feasibility (4.1s)
>    ...
>    Version contains leading zeroes (2026-01-17)
>
> /Henrik
>
> PS.I didn't know that
> <https://CRAN.R-project.org/package=%s&version=%s> works -it downloads
> <package>_<version>.tar.gz. Thanks.
>
> On Sat, Jan 17, 2026 at 4:10 AM Lluís Revilla <[email protected]>
> wrote:
> >
> > Hi all,
> >
> > I was trying to download the source code of a package using the versioned
> > urls (https://CRAN.R-project.org/package=%s&version=%s). I used
> > packageVersion to get the version number but it failed because it uses
> the
> > function pacakge_version that replaces the "-" the version number had.
> >
> > Indeed, the examples show that package_version("1.2-4") represents it as
> > "1.2.4". However, when converted back to characters (via as.character or
> > similar approaches) it keeps the "." instead of reverting back to "-".
> The
> > work around is essay enough: packageVersion(pkg, field = "Version") so my
> > code is fixed but it might not be obvious in other cases.
> >
> > Could the round trip revert to the original package version provided by
> the
> > maintainer ( so that identical(as.character(package_version("1.2-4")),
> > "1.2-4") is TRUE) ?
> > This would simplify manipulations of package versions (currently ~2000
> > packages on CRAN use "-" on their version).
> >
> > Cheers,
> >
> > Lluís Revilla
> >
> > PS: The description at the top of the help page ?download.packages
> doesn't
> > fully match the content. I think it refers to the functions documented on
> > ?update.packages. Perhaps something from the first paragraph on details
> can
> > be moved to the description
> >
> >         [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > [email protected] mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-devel
>
> ______________________________________________
> [email protected] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

        [[alternative HTML version deleted]]

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to