Restore a project's dependencies from a lockfile, as previously generated by snapshot().

  project = NULL,
  library = NULL,
  lockfile = NULL,
  packages = NULL,
  rebuild = FALSE,
  repos = NULL,
  clean = FALSE,
  prompt = interactive()



The project directory. If NULL, then the active project will be used. If no project is currently active, then the current working directory is used instead.


Unused arguments, reserved for future expansion. If any arguments are matched to ..., renv will signal an error.


The library paths to be used during restore. See Library for details.


The lockfile to be used for restoration of the associated project. When NULL, the most recently generated lockfile for this project is used.


A subset of packages recorded in the lockfile to restore. When NULL (the default), all packages available in the lockfile will be restored. Any required recursive dependencies of the requested packages will be restored as well.


Force packages to be rebuilt, thereby bypassing any installed versions of the package available in the cache? This can either be a boolean (indicating that all installed packages should be rebuilt), or a vector of package names indicating which packages should be rebuilt.


The repositories to use during restore, for packages installed from CRAN or another similar R package repository. When set, this will override any repositories declared in the lockfile. See also the repos.override option in config for an alternate way to provide a repository override.


Boolean; remove packages not recorded in the lockfile from the target library? Use clean = TRUE if you'd like the library state to exactly reflect the lockfile contents after restore().


Boolean; prompt the user before taking any action? For backwards compatibility, confirm is accepted as an alias for prompt.


A named list of package records which were installed by renv.

Package Repositories

By default, the package repositories encoded in the lockfile will be used during restore, as opposed to the repositories that might already be set in the current session (through getOption("repos")). If you'd like to override the repositories used by renv during restore, you can use, for example:

renv::restore(repos = c(CRAN = <...>))

See also the repos.override option in config for an alternate way to provide a repository override.


When renv::restore() is called, packages from the lockfile are compared against packages currently installed in the library paths specified by library. Any packages which have changed will then be installed into the default library. If clean = TRUE, then packages that exist within the default library, but aren't recorded in the lockfile, will be removed as well.

See also

Other reproducibility: lockfiles, snapshot()


if (FALSE) { # disable automatic snapshots auto.snapshot <- getOption("") options( = FALSE) # initialize a new project (with an empty R library) renv::init(bare = TRUE) # install digest 0.6.19 renv::install("digest@0.6.19") # save library state to lockfile renv::snapshot() # remove digest from library renv::remove("digest") # check library status renv::status() # restore lockfile, thereby reinstalling digest 0.6.19 renv::restore() # restore automatic snapshots options( = auto.snapshot) }