Vendoring is the act of making your own copy of the 3rd party packages your project is using. It is often used in the go language community.

cpp_vendor(path = ".")



The path to the package root directory


The file path to the vendored code (invisibly).


This function vendors cpp11 into your package by copying the cpp11 headers into the inst/include folder of your package and adding 'cpp11 version: XYZ' to the top of the files, where XYZ is the version of cpp11 currently installed on your machine.

If you choose to vendor the headers you should remove LinkingTo: cpp11 from your DESCRIPTION.

Note: vendoring places the responsibility of updating the code on you. Bugfixes and new features in cpp11 will not be available for your code until you run vector_cpp11() again.


# create a new directory
dir <- tempfile()

# vendor the cpp11 headers into the directory

list.files(file.path(dir, "inst", "include", "cpp11"))
#>  [1] "altrep.hpp"           "as.hpp"               "attribute_proxy.hpp" 
#>  [4] "data_frame.hpp"       "declarations.hpp"     "doubles.hpp"         
#>  [7] "environment.hpp"      "external_pointer.hpp" "function.hpp"        
#> [10] "integers.hpp"         "list_of.hpp"          "list.hpp"            
#> [13] "logicals.hpp"         "matrix.hpp"           "named_arg.hpp"       
#> [16] "protect.hpp"          "r_bool.hpp"           "r_string.hpp"        
#> [19] "r_vector.hpp"         "R.hpp"                "raws.hpp"            
#> [22] "sexp.hpp"             "strings.hpp"         

# cleanup
unlink(dir, recursive = TRUE)