Skip to content

A Fresh Approach to R Package Installation

pak installs R packages from CRAN, Bioconductor, GitHub, URLs, local files and directories. It is an alternative to install.packages() and devtools::install_github(). pak is fast, safe and convenient.

🚀 Short tour

Install or update packages from CRAN or Bioconductor

pak::pkg_install("tibble")
#>  Updated metadata database: 2.36 MB in 2 files.                                
#>  Updating metadata database ... done                                           
#>                                                                                 
#> → Will install 11 packages.                                                     
#> → Will download 11 CRAN packages (4.54 MB).                                     
#> + cli         3.4.0 [bld][cmp][dl] (526.80 kB)                                  
#> + fansi       1.0.3 [bld][cmp][dl] (481.16 kB)                                  
#> + glue        1.6.2 [bld][cmp][dl] (106.51 kB)                                  
#> + lifecycle   1.0.2 [bld][dl] (102.18 kB)                                       
#> + magrittr    2.0.3 [bld][cmp][dl] (267.07 kB)                                  
#> + pillar      1.8.1 [bld][dl] (479.98 kB)                                       
#> + pkgconfig   2.0.3 [bld][dl] (6.08 kB)                                         
#> + rlang       1.0.5 [bld][cmp][dl] (741.68 kB)                                  
#> + tibble      3.1.8 [bld][cmp][dl] (672.34 kB)                                  
#> + utf8        1.2.2 [bld][cmp][dl] (240.33 kB)                                  
#> + vctrs       0.4.1 [bld][cmp][dl] (916.78 kB)                                  
#>  Getting 11 pkgs (4.54 MB)                                                     
#>  Got pkgconfig 2.0.3 (source) (6.08 kB)                                        
#>  Got glue 1.6.2 (source) (106.51 kB)                                           
#>  Got lifecycle 1.0.2 (source) (102.18 kB)                                      
#>  Got fansi 1.0.3 (source) (481.16 kB)                                          
#>  Got utf8 1.2.2 (source) (240.33 kB)                                           
#>  Got cli 3.4.0 (source) (526.80 kB)                                            
#>  Got rlang 1.0.5 (source) (741.68 kB)                                          
#>  Got magrittr 2.0.3 (source) (267.07 kB)                                       
#>  Got pillar 1.8.1 (source) (479.98 kB)                                         
#>  Got vctrs 0.4.1 (source) (916.78 kB)                                          
#>  Got tibble 3.1.8 (source) (672.34 kB)                                         
#>  Building cli 3.4.0                                                            
#>  Building fansi 1.0.3                                                          
#>  Built fansi 1.0.3 (4.6s)                                                      
#>  Building glue 1.6.2                                                           
#>  Built glue 1.6.2 (1.6s)                                                       
#>  Building magrittr 2.0.3                                                       
#>  Built magrittr 2.0.3 (1.3s)                                                   
#>  Building pkgconfig 2.0.3                                                      
#>  Built pkgconfig 2.0.3 (905ms)                                                 
#>  Building rlang 1.0.5                                                          
#>  Built cli 3.4.0 (9.2s)                                                        
#>  Building utf8 1.2.2                                                           
#>  Built utf8 1.2.2 (4s)                                                         
#>  Installed cli 3.4.0  (47ms)                                                   
#>  Installed fansi 1.0.3  (28ms)                                                 
#>  Installed glue 1.6.2  (28ms)                                                  
#>  Installed magrittr 2.0.3  (23ms)                                              
#>  Installed pkgconfig 2.0.3  (21ms)                                             
#>  Installed utf8 1.2.2  (28ms)                                                  
#>  Built rlang 1.0.5 (15.6s)                                                     
#>  Installed rlang 1.0.5  (50ms)                                                 
#>  Building lifecycle 1.0.2                                                      
#>  Building vctrs 0.4.1                                                          
#>  Built lifecycle 1.0.2 (1.5s)                                                  
#>  Installed lifecycle 1.0.2  (27ms)                                             
#>  Built vctrs 0.4.1 (20.5s)                                                     
#>  Installed vctrs 0.4.1  (62ms)                                                 
#>  Building pillar 1.8.1                                                         
#>  Built pillar 1.8.1 (4s)                                                       
#>  Installed pillar 1.8.1  (35ms)                                                
#>  Building tibble 3.1.8                                                         
#>  Built tibble 3.1.8 (3.9s)                                                     
#>  Installed tibble 3.1.8  (38ms)                                                
#>  1 pkg + 10 deps: added 11, dld 11 (4.54 MB) [1m 0.3s]                         

Install packages from GItHub

pak::pkg_install("tidyverse/tibble")
#>                                                                                 
#> → Will update 2 packages.                                                       
#> → All 2 packages (0 B) are cached.                                              
#> + tibble 3.1.8 → 3.1.8.9001 [bld][cmp] (GitHub: 225f4d9)                        
#> + vctrs  0.4.1 → 0.4.1.9000 [bld][cmp] (GitHub: aea8877)                        
#>  No downloads are needed, 2 pkgs are cached                                    
#>  Got tibble 3.1.8.9001 (source) (1.34 MB)                                      
#>  Got vctrs 0.4.1.9000 (source) (2.07 MB)                                       
#>  Packaging vctrs 0.4.1.9000                                                    
#>  Packaged vctrs 0.4.1.9000 (960ms)                                             
#>  Building vctrs 0.4.1.9000                                                     
#>  Built vctrs 0.4.1.9000 (21s)                                                  
#>  Installed vctrs 0.4.1.9000 (github::r-lib/vctrs@aea8877) (67ms)               
#>  Packaging tibble 3.1.8.9001                                                   
#>  Packaged tibble 3.1.8.9001 (616ms)                                            
#>  Building tibble 3.1.8.9001                                                    
#>  Built tibble 3.1.8.9001 (3.6s)                                                
#>  Installed tibble 3.1.8.9001 (github::tidyverse/tibble@225f4d9) (29ms)         
#>  1 pkg + 10 deps: kept 9, upd 2, dld 2 (NA B) [29.8s]                          

Look up dependencies

pak::pkg_deps_tree("tibble")
#> tibble 3.1.8 [new][bld][cmp]                                                    
#> ├─fansi 1.0.3 [new][bld][cmp]                                                   
#> ├─lifecycle 1.0.2 [new][bld]                                                    
#> │ ├─glue 1.6.2 [new][bld][cmp]                                                  
#> │ └─rlang 1.0.5 [new][bld][cmp]                                                 
#> ├─magrittr 2.0.3 [new][bld][cmp]                                                
#> ├─pillar 1.8.1 [new][bld]                                                       
#> │ ├─cli 3.4.0 [new][bld][cmp]                                                   
#> │ ├─fansi                                                                       
#> │ ├─glue                                                                        
#> │ ├─lifecycle                                                                   
#> │ ├─rlang                                                                       
#> │ ├─utf8 1.2.2 [new][bld][cmp]                                                  
#> │ └─vctrs 0.4.1 [new][bld][cmp]                                                 
#> │   ├─cli                                                                       
#> │   ├─glue                                                                      
#> │   └─rlang                                                                     
#> ├─pkgconfig 2.0.3 [new][bld]                                                    
#> ├─rlang                                                                         
#> └─vctrs                                                                         
#>                                                                                 
#> Key:  [new] new | [bld] build | [cmp] compile                                   

Explain dependencies

pak::pkg_deps_explain("tibble", "rlang")
#> tibble -> lifecycle -> rlang                                                    
#> tibble -> pillar -> lifecycle -> rlang                                          
#> tibble -> pillar -> rlang                                                       
#> tibble -> pillar -> vctrs -> rlang                                              
#> tibble -> rlang                                                                 
#> tibble -> vctrs -> rlang                                                        

Install a local package and its dependencies

pak::local_install("cli")
#>                                                                                 
#> → Will update 1 package.                                                        
#> → The package (0 B) is cached.                                                  
#> + cli 3.4.0 → 3.4.0 [bld][cmp]                                                  
#>  No downloads are needed, 1 pkg is cached                                      
#>  Got cli 3.4.0 (source) (526.80 kB)                                            
#>  Packaging cli 3.4.0                                                           
#>  Packaged cli 3.4.0 (740ms)                                                    
#>  Building cli 3.4.0                                                            
#>  Built cli 3.4.0 (9.1s)                                                        
#>  Installed cli 3.4.0 (local) (62ms)                                            
#>  1 pkg: upd 1, dld 1 (526.80 kB) [10.5s]                                       

How do I … ?

Start with our our TLDR document to solve specific issues.

Reference

The complete reference of pak functions is the most complete source of information about pak.

I have a(nother) question

Don’t hesitate to ask at the RStudio Community forum. Use the pak tag.

I would like to report a bug

Head to the pak issue tracker.

Features

Fast - parallel downloads and installation, caching, etc.

🦺 Safe - dependency solver, system dependency solver, etc.

🏪 Convenient - packages from multiple sources, time travel, etc.

See the complete list of awesome features.

⬇️ Installation

Pre-built binaries

Install a binary build of pak from our repository on GitHub:

install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/stable/%s/%s/%s", .Platform$pkgType, R.Version()$os, R.Version()$arch))

This is supported for the following systems:

OS CPU R version
Linux x86_64 R 3.4.0 - R-devel
Linux aarch64 R 3.4.0 - R-devel
macOS High Sierra+ x86_64 R 3.4.0 - R-devel
macOS Big Sur+ aarch64 R 4.1.0 - R-devel
Windows x86_64 R 3.4.0 - R-devel

For macOS we only support the official CRAN R build. Other builds, e.g. Homebrew R, are not supported.

Install from CRAN

Install the released version of the package from CRAN as usual:

This potentially needs a C compiler on platforms CRAN does not have binaries packages for.

Other platforms and nightly builds

See the installation page!

📘 License

GPL-3 © RStudio