vellumverse installs and loads the vellum graphics ecosystem in one step, the way tidyverse does for data science. Its packages carry a shared metaphor:
| package | role | analogy |
|---|---|---|
| vellum | low-level graphics backend, a Rust scene graph, unit/layout engine, and PNG/SVG/PDF renderer | grid |
| vellumplot | pipe-first grammar of graphics that compiles a plot spec into a vellum scene | ggplot2 |
| vellumwidget | client-side interactive HTML widgets for the scenes they produce |
plotly/htmlwidgets
|
vellum is the parchment, vellumplot is the pen, and vellumwidget is the annotation revealed on the page.
Installation
The ecosystem compiles a Rust crate (in vellum), so you need a Rust toolchain (cargo/rustc) alongside R. Then:
# install.packages("pak")
pak::pak("r-vellum/vellumverse")Usage
library(vellumverse)
#> ── Attaching packages ──────────────────────────────────── vellumverse 0.1.0 ──
#> ✔ vellum 0.1.0 ✔ vellumplot 0.1.0 ✔ vellumwidget 0.1.0That single call attaches all three core packages, so you can go from a data frame to an interactive plot in one pipeline:
library(vellumverse)
df <- data.frame(wt = mtcars$wt, mpg = mtcars$mpg, model = rownames(mtcars))
vplot(df) |> # vellumplot: grammar of graphics
mark_point(x = wt, y = mpg, color = mpg,
tooltip = model, data_id = model) |>
scale_color_continuous() |>
as_widget() # vellumwidget: interactive widgetvplot(), mark_point(), and the scales come from vellumplot; as_widget() comes from vellumwidget; both compile down to a vellum scene.
Helpers
vellumverse_packages() # the packages vellumverse bundles
vellumverse_conflicts() # functions masked across the ecosystemTo load the packages without the startup banner, set options(vellumverse.quiet = TRUE) before attaching.
