Skip to content

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/rlang

You 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#142

A github:: prefix is accepted but not required:

Remotes: github::r-lib/rlang

Other 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/package

See 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.