An extremely fast R package manager,
written in Rust.

A single tool to manage R packages, lockfiles, and R versions. Supports CRAN, Bioconductor, and GitHub.

$ curl -fsSL https://raw.githubusercontent.com/nbafrank/uvr/main/install.sh | sh click to copy

Blazing fast package installs

uvr leverages parallel downloads and native extraction — no R process overhead. Cold-cache benchmarks on macOS, median of 3 runs. All tools use P3M as CRAN mirror.

ggplot2
17 packages
uvr
0.6s
renv
3.8s
pak
4.6s
install.packages
24.0s
40x faster than install.packages
tidyverse
99 packages
uvr
1.6s
pak
12.1s
renv
12.1s
install.packages
14.3s
9x faster than install.packages

Everything you need to manage R

A complete, modern workflow for R projects — from package resolution to R version management.

Blazing fast

Parallel downloads, native extraction, and zero R startup overhead. 9–40x faster than traditional tools.

🔒

Reproducible

Deterministic uvr.lock captures exact versions and checksums. What works today works tomorrow.

📦

Project-isolated

Each project gets its own library in .uvr/library/. No more version conflicts across projects.

🅐

R version management

Install and switch R versions with uvr r install and uvr r use. Pin per-project via .r-version.

🚀

CRAN + Bioconductor + GitHub

Install from any registry. Specify GitHub packages directly in your manifest.

CI-ready

--frozen mode ensures CI uses exactly the locked versions. No surprises in production.

🌐

Cross-platform

Works on macOS, Linux, and Windows. Same workflow everywhere your code runs.

💾

Single static binary

One ~8 MB binary with zero dependencies. Download it and you're done.

Up and running in seconds

1

Initialize a project

Creates a uvr.toml manifest with your R version and empty dependency list.

2

Add packages

Resolves dependencies, writes the lockfile, and installs everything in one step.

3

Sync the environment

Installs exactly what the lockfile says. Idempotent and fast on repeat runs.

4

Run your script

Executes R with the project library on the search path. No library() preamble needed.

# Create a new project $ uvr init my-project   # Add packages $ uvr add ggplot2 dplyr   # Install from lockfile $ uvr sync   # Run a script $ uvr run analysis.R

How uvr stacks up

A complete R project manager in a single binary — no other tool covers this much ground.

Feature uvr renv pak rv rig pixi
Declarative manifest
Lockfile
R version management
Run scripts in isolated env
CRAN packages ✓*
Bioconductor packages ✓*
GitHub packages
System dep detection (Linux)
Single config file
CI mode (--frozen)
No admin rights required
Single static binary
Windows support

* Via conda-forge channel, not native CRAN/Bioconductor integration.

Get started in one command

Multiple installation methods to fit your workflow.

Quick install

macOS and Linux — downloads the latest release

$ curl -fsSL https://raw.githubusercontent.com/nbafrank/uvr/main/install.sh | sh

Arch Linux (AUR)

Install via your favorite AUR helper

$ yay -S uvr

From R

Install via the companion R package

> pak::pak("nbafrank/uvr-r")
> uvr::install_uvr()

From source

Build with Cargo (requires Rust toolchain)

$ cargo install --git https://github.com/nbafrank/uvr

Use uvr from R

The companion R package lets you manage your project without leaving the R console. Initialize projects, add packages, sync environments, and manage R versions — all from familiar R syntax.

View uvr-r on GitHub →
# Install the companion package pak::pak("nbafrank/uvr-r")   library(uvr)   # Manage your project from R init() add("ggplot2") sync()