Sometimes you need your package to depend on a development version of another package that isn’t yet available on CRAN or Bioconductor. The Remotes field in DESCRIPTION lets you specify where to install such a dependency from. Remotes is not a standard DESCRIPTION field. It is not acceptable when releasing a package on CRAN. The Remotes field is understood by devtools, pak, and related tools, and is meant to be a temporary measure during development.
This vignette covers the mechanics of the Remotes field. For more context, see the Nonstandard dependencies section of the R Packages book.
The Remotes field
You can mark any dependency listed in Depends, Imports, Suggests, or Enhances as being installed from a non-standard source by adding a package reference to Remotes in your DESCRIPTION file.
The general form is:
Remotes: [type::]<source>, [type2::]<source2>
Multiple remote dependencies are separated by commas, just like regular dependencies elsewhere in DESCRIPTION.
It is important to remember that you must always declare the dependency in the usual way, i.e. in Depends, Imports, Suggests, or Enhances. The Remotes field only provides instructions about where to install the dependency from. For example, note how rlang appears in both Imports and Remotes:
Package: mypackage
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Imports:
rlang (>= 1.1.0.9000)
Remotes:
r-lib/rlang
You can use usethis::use_dev_package() to add or update a development dependency. It takes care of modifying both the Imports (or Suggests) and Remotes fields.
GitHub
GitHub is the most commonly used source for development packages, and the default when no type prefix is specified:
Remotes: r-lib/rlangYou can request a specific branch, tag, commit (SHA), or pull request:
Remotes: r-lib/rlang@some-branch,
r-lib/rlang@v1.0.0,
r-lib/rlang@84be6207,
r-lib/rlang#142A github:: prefix is accepted but not required:
Remotes: github::r-lib/rlangOther sources
There are many other supported source types:
# GitLab
Remotes: gitlab::user/repo
# Git (any host)
Remotes: git::https://github.com/r-lib/rlang.git
# Bioconductor
Remotes: bioc::SummarizedExperiment
# URL (package archive)
Remotes: url::https://example.com/package-0.1.0.tar.gz
# Local
Remotes: local::/path/to/packageSee the pak documentation on package sources for a complete list.
CRAN submission
When you submit your package to CRAN, all of its dependencies must also be available on CRAN or Bioconductor. You need to remove the Remotes field from your DESCRIPTION before submission. This means having a Remotes field is a temporary development state: once the dependency you need is released to CRAN or Bioconductor, you should update your minimum version requirement and drop the Remotes entry.
