extendr

extendr

🚀 Blazingly Fast & User-friendly R extensions using Rust 🦀

extendr brings the performance, safety, and reliability of Rust to R. Write fast and scalable R packages without worrying about R's C API.

Documentation & Resources

Key Repositories

Repository Description
extendr 🦀 extendr's source code
rextendr 📦 Create and manage your Rust-based R packages
awesome-extendr ⭐ Curated list of extendr packages
extendr.github.io 📚 Documentation website source

Community

  • Discord: Join our community discussions 💬 (Discord invite)
  • Issues: Report bugs and request features in individual repositories 🐛
  • Contributions: See CONTRIBUTING.md in each repository 🤝

Core Components

Rust workspace 🦀 with battle-tested crates:

  • extendr-api - ergonomic, opinionated, and safe interface between R and Rust
  • extendr-engine - launch R sessions from Rust
  • extendr-ffi - hand-crafted bindings to R's C-API

R package 📦 for seamless development:

  • rextendr - a {usethis}-like package that scaffolds extendr-powered R packages

Getting Started

Prerequisites

  • R (≥ 4.2)
  • cargo and rustc (≥ 1.65) - install via rustup

Get Started

We recommend using the development version of {rextendr} from GitHub.

# Install from CRAN
install.packages("rextendr")

# Development version
remotes::install_github("extendr/rextendr")

usethis::create_package("helloextendr")
rextendr::use_extendr()
rextendr::document()

hello_world()
#> [1] "Hello, world!"