Getting Started

Welcome to rv
What is rv
?
Section titled “What is rv?”rv
is a R package manager, written in Rust, to help users install and manage R packages in a declarative, reproducible, and fast way.
Similar to tools like uv
, Cargo
, and npm
,
rv
uses a configuration and lock file to allow the flexibility to determine how, from where, and what is installed,
while maintaining reproducibility across systems and users.
Why rv
?
Section titled “Why rv?”renv
and many of the other R package installation tools in the ecosystem have flaws, many of which are caused by packages being installed
iteratively, which lead to the development of rv
.
rv
gives users the power to declare a desired global state and allow the tool to determine how to best reach that state,
while locking the how and from where that package was installed. Meanwhile, other tools in the ecosystem,
like install.packages()
and pak::pkg_install()
, provide you with a mechanism to reach towards the desired state,
but in an iterative, non-reproducible, and potentially unstable way.
With rv
you can:
- Install a cohesive set of packages, ensuring each are compatible with the others in the project.
- Specify options for individual packages, including which repository they must be sourced from,
whether to install the source or binary version, whether to install the
Suggested
packages, and many more. - Understand how your project’s package enviroment will change before any installations are performed.
And, we did it over 25x faster than the other tools too.
Differences between renv
and rv
?
Section titled “Differences between renv and rv?”renv
utilizes the traditional R package installation pattern of iteratively installing packages,
and then retroactively “snapshotting” the current state of the project library to generate the lockfile.
This leads to two common issues that make a project not fully reproducible:
- The iterative installation leads to incompatible versions of packages being installed
- Information about how a package was installed is lost by time a snapshot occurs
rv
solves these issues by resolving the full dependency tree ahead of time, avoiding the risk of incompatible package versions.
Additionally, by locking at the time of installation, all of the information regarding the installation is captured,
instead of only after it is installed.
In summary, rv
’s declarative design ensures users are provided with a working, fully reproducible enviroment in a way
that’s approachable enough for a new R user, but complex enough to fit an advanced developers need.
Additional information can be found in the differences with renv
section.