Skip to content

Project Environments

29packages dependsuggested by 38
4.3Mdownloads / year
–test coverage
13/13flavors OK

Overview

About

A dependency management toolkit for R. Using 'renv', you can create and manage project-local R libraries, save the state of these libraries to a 'lockfile', and later restore your library as required. Together, these tools can help make your projects more isolated, portable, and reproducible.

Changes in 1.3.1
  • renv::hydrate() no longer reports packages that are already installed in the project library as "not available locally", nor re-installs them, when those packages are not found in the user or site libraries. (#2172)
  • renv::restore() and renv::install() now install repository archives of packages whose lockfile record includes a RemoteSubdir field (for example, packages originally built from a sub-directory of a GitHub repository and then published to a custom repository). Previously, renv failed to find the DESCRIPTION file within such archives and fell back to cloning the package's git repository instead. (#1703)
  • renv now writes the GithubSubdir field, alongside the other Github* compatibility fields, when installing a package from a sub-directory of a GitHub repository. (#2165)
Show all changes in 1.3.1Hide the rest of the changes in 1.3.1
  • renv::lockfile_validate() now reports a clear error when the jsonvalidate package is not installed. (#2184)
  • renv now warns when a retrieved package is not the one that was requested, for example because a download cache entry or a repository served a tarball for a different package. Previously, renv silently installed whatever package it had retrieved. (#2322)
  • Concurrent restores sharing a package cache no longer fail with errors like dependency 'rlang' is not available when they build the same package at the same time. Previously, the restore that finished last replaced the cache entry that the other restore's library already linked to, which briefly left that link dangling. renv now links a duplicate build to the existing cache entry instead, unless that package was requested to be rebuilt. (#2400)
  • renv::install() and renv::restore() now check the cache again just before building each package, and install from the cache if a matching entry has appeared since the up-front check. Concurrent restores sharing a cache thus converge on the first build of each package rather than all building every package that was missing from the cache when they started. (#2403)
  • New cache entries now appear atomically when the cache lives on a different filesystem than the project library (for example, a cache on a mounted volume in CI). Previously, renv moved packages into such a cache with mv, which copies the package into its final location piece by piece; a concurrent restore could observe the partially-copied entry and link its library to it. renv now copies the package into a temporary directory alongside its final location and renames it into place. (#2402)
  • renv::install() and renv::restore() no longer leave .renv-backup-* directories behind in the library when staged installs are disabled (via the renv.config.install.staged option) and more packages are ready to be built than can be built at once. Previously, renv could lose track of the backup of an existing installation while its package waited to be built, so that the backup was neither removed after a successful install, nor restored after a failed one. (#2407)
  • A vendored copy of renv (created with renv:::vendor()) now bundles the files it reads at runtime, so that system requirements checks, git credential helpers, and discovery of renv::use() calls work when renv itself is not installed. Previously these looked the files up in an installed copy of renv. (#2397)
  • renv::sysreqs() now reports the system requirements of the recursive dependencies of the requested packages as well. Previously, only the requested packages themselves were considered, so that (for example) renv::sysreqs("ragg") did not report the system libraries required by systemfonts and textshaping, even though ragg cannot be installed without them. Use recursive = FALSE to restore the old behavior. (#2352)
  • renv::sysreqs() now reports on the packages recorded in the project lockfile by default, together with the packages used in the project. This is the same set of packages that renv::restore() would install, so the system requirements for a project can be computed from renv.lock alone -- for example, when authoring a Dockerfile, before any R packages have been installed. (#2352)
  • renv::sysreqs() gains a source argument, controlling which version of each package is used when computing system requirements. System requirements (and package dependencies) are specific to a particular version of a package, so the versions used matter. For each package, the requested sources are tried in order: "lockfile" uses the version recorded in the project lockfile, "library" uses the installed version of the package, and "crandb" queries <https://crandb.r-pkg.org> for the latest version available from the active package repositories. The default consults all three, in that order. Previously, the latest CRAN release of each package was always used. The local argument is superseded by source = "library". See ?renv::sysreqs for more details. (#2352)
  • When pak integration is enabled (via the renv.config.pak.enabled option) and pak is itself recorded in the lockfile, renv::restore() now installs and uses the recorded version of pak, rather than the latest version available from the pak repositories. Other functions use the recorded version when pak needs to be installed, and otherwise leave the installed version of pak alone. Lockfile records for versions of pak older than the minimum version supported by renv are ignored, and renv falls back to the previous behavior if the recorded version cannot be installed. (#2169)
  • renv::install() now signals an error when a requested package fails to install, even if an older version of that package remains installed. Previously, a failed upgrade, or a transactional install that was rolled back, could return without an error. (#2384)
  • renv::restore() now installs the versions recorded in the lockfile even when another package declares one of those dependencies in the Remotes: field of its DESCRIPTION. Previously, the Remotes: entry took precedence, so restore could install (or record) the remote's latest commit instead, and then report that the dependency tree was repaired. Similarly, renv::install() now prefers the project's own Remotes: entries, and exact version requirements such as bread (== 1.0.0), over another package's Remotes: entry for the same package. This was a regression in renv 1.2.0. The project's Remotes: entries now also apply to packages that are only indirect dependencies. (#2395)
  • When another package's Remotes: entry supplies a dependency, renv::install() and renv::restore() now install that dependency from the remote. Previously, a dependency from a git remote could be installed from the package repositories (or the lockfile) instead, while being recorded as coming from the remote. Relatedly, when another package requires a newer version of a package from a git remote (or another non-repository source), renv no longer reports that package at the latest repository version while installing the recorded one; the unsatisfied requirement is reported instead. This was a regression in renv 1.2.0. (#2395)

From NEWS.md in the release

Install

Health

CRAN checks
13OK
Slowest check: 11.4 min · r-devel-linux-x86_64-fedora-gcc
Status changes
  • OK13 OK2026-10-17
  • WARNING12 OK, 1 WARNING2026-10-01
  • OK13 OK2026-08-21
  • WARNING12 OK, 1 WARNING2026-08-17
  • OK13 OK2026-08-05
Show 12 earlier changesHide 12 earlier changes
  • NOTE12 OK, 1 NOTE2026-08-01
  • OK13 OK2026-06-09
  • ERROR12 OK, 1 ERROR2026-06-08
  • OK13 OK2026-05-02
  • NOTE12 OK, 1 NOTE2026-04-29
  • ERROR11 OK, 1 NOTE, 1 ERROR2026-04-28
  • NOTE11 OK, 1 NOTE2026-04-25
  • OK14 OK2026-04-09
  • NOTE13 OK, 1 NOTE2026-03-28
  • WARNING10 OK, 3 NOTE, 1 WARNING2026-03-20
  • NOTE13 OK, 1 NOTE2026-03-17
  • OK14 OK2026-03-10
Advisories

none known

Documentation

In release 1.3.1
READMEYes · 381 wordsVignettesYes · 11 · staticNEWSYes · 100% structured · mentions 1.3.1Citation fileNoWebsiteYes · pkgdown
Help pages
49 (6 internal)includes a package overview page
Examples that run
6%2 run in a plain check · 33 never run
Exported functions with examples
77%
Documented parameters
100%
Return-value docs
75%
Help pages citing references
0%

Downloads

4.3M
CRAN downloads in the past year
Rank #191 · ~11.8K/day · ~359.7K/mo
Daily download trend is not available in this view yet.
313.4K30 days
877.4K90 days
4.3M1 year
Compare downloads with other packages →
Also on18.1K r2u15 autocran53.9K conda_forge244 c2d4u

Repository

1,164Stars
169Forks
197Open issues
0Open PRs
26Releases
3,411Commits
81Commit identities
License file reads as MIT · 3,411 commits · Last activity 2026-10-17 · +0.1% stars, 30d · Default branch at 1.3.1.9000, ahead of CRAN 1.3.1 (checked 2026-10-18)
Responsiveness
How these are sampled
PRs merged (all time)
87%
Median days to close, 50 most recently updated closed issues
6
Median days to close, 50 most recently updated closed PRs
0

Stars over time

2025-10-17 · 1,0932026-10-18 · 1,164
PracticesBeta

11 development-tooling and community-health practices detected across 6 families in the upstream repository

Checks run against github.com/rstudio/renv on 2026-10-18.

Continuous integration (2)
GitHub ActionsR CMD check workflow

The R CMD check workflow runs on Linux, macOS and Windows, and on R-devel

Governance and community (1)
Issue templates
Docs source (4)
README.Rmdpkgdown

GitHub Pages site last deployed 2026-10-17 · The repository has a site deploy workflow

pkgdown site last built 2026-10-06

Coverage (2)
Coverage reporting (Codecov).covrignore
Show all practicesHide 2 practices
Lint, format, editor (1)
RStudio project
Git structural (1)
.gitattributes
How this is detected·Detection ruleset v3 (2026-09-26)

Dependencies

Declared dependencies
27 external dependencies (excludes base and recommended)

Installing renv adds no packages beyond those that come with R.

Depends (0)
none
Imports (1)
utils
LinkingTo (0)
none
Enhances (0)
none

People & History

People (3)
Author, Maintainer since 0.8.0 (2019)
Author · added in 1.0.0
Copyright holder, Funder · added in 0.17.0
Listed in earlier versions (2)
RStudio
no longer listed · 0.8.0 to 0.13.2
RStudio, PBC
no longer listed · 0.14.0 to 0.16.0
Releases (59)

Pick two releases to compare their code metrics.

Show 51 earlier eventsHide 51 earlier events

Package metadata

First published
2019-10-25
Total releases
59 / 7 yrs
License
MIT + file LICENSE OSI
Download size
1.5 MB
Appears in task views

Cite

Cite this package

Run in R for the authors' preferred citation:

citation("renv")
Ushey, K., Posit Software, PBC, & Wickham, H. (2026). renv: Project Environments (Version 1.3.1) [Computer software]. https://doi.org/10.32614/CRAN.package.renv

This package has no citation file, so citation() returns this entry built from DESCRIPTION.

Cite the R Observatory

For a number measured here: a download total, a coverage figure, an archival date.

APA

Balamuta, J. J. (2026). R Observatory: Metrics for renv version 1.3.1 [Data set]. HJJB, LLC. Data release v2026-10-21. https://doi.org/10.5281/zenodo.21843040

From data release v2026-10-21, which the citation names so these numbers can be found later. More on citing and the projects behind them.

Report a problem with this page →

Privacy choices

These apply to this browser and are stored on this device only. Nothing about your choice is sent to us.

Read the privacy policy