|
| 1 | +--- |
| 2 | +title: "rextendr 0.4.0" |
| 3 | +description: | |
| 4 | + A new version of rextendr has arrived. |
| 5 | +author: Blake Vernon |
| 6 | +date: "2025/08/26" |
| 7 | +image: images/extendr-release-040.png |
| 8 | +image-alt: "The rextendr logo, letter R in middle of gears." |
| 9 | +categories: [Release, Updates] |
| 10 | +--- |
| 11 | + |
| 12 | +The extendr team is excited to announce the release of |
| 13 | +[rextendr](https://extendr.github.io/rextendr/dev) `0.4.0`, along with two |
| 14 | +follow-up patch releases, that bring significant improvements to the R package |
| 15 | +ecosystem for Rust integration. Those include enhanced CRAN compatibility, |
| 16 | +improved developer experience, and streamlined package scaffolding. A great deal |
| 17 | +of work also went into re-factoring code, focusing support on later versions of |
| 18 | +R, and reducing package dependencies to streamline maintenance and ensure the |
| 19 | +long-term viability of the project. |
| 20 | + |
| 21 | +::: callout-note |
| 22 | +## What is rextendr? |
| 23 | + |
| 24 | +For those new to the project, rextendr is an R package similar to `usethis` and |
| 25 | +`devtools` for supporting development of Rust-powered R packages, with the Rust |
| 26 | +crate `extendr` handling most of the heavy lifting behind the scenes. |
| 27 | +::: |
| 28 | + |
| 29 | +## CRAN compatibility |
| 30 | + |
| 31 | +The standout feature of the current release is found in rextendr's workhorse |
| 32 | +function `use_extendr()`, which now provides CRAN-ready scaffolding out of the |
| 33 | +box. This is achieved through a set of targeted updates. |
| 34 | + |
| 35 | +- **Enhanced build configuration** - `use_extendr()` now creates |
| 36 | + `tools/msrv.R` to ensure that developers have a CRAN compatible version of |
| 37 | + Rust installed. It also provides updated `configure` scripts for |
| 38 | + pre-compilation checks and setup on various operating systems. |
| 39 | +- **Explicit system requirements** - `use_extendr()` now sets the package |
| 40 | + `DESCRIPTION`'s `SystemRequirements` field to "Cargo (Rust's package |
| 41 | + manager), rustc" per CRAN requirements. It also adds `xz` so packages can |
| 42 | + build on Posit Package Manger. |
| 43 | +- **Friendly updating** - `use_extendr()` can now be called on existing |
| 44 | + extendr-powered R packages to update or generate new scaffolding. Prompts |
| 45 | + allow the user to specify which updates or changes to accept or reject. This |
| 46 | + is especially useful as rextendr continues to adapt to developer needs and |
| 47 | + evolving CRAN policies. |
| 48 | + |
| 49 | +## Developer tools |
| 50 | + |
| 51 | +Release of 0.4.0 and its patches also comes with a host of new developer |
| 52 | +tooling. |
| 53 | + |
| 54 | +- **Greater IDE support** - new functions `use_vscode()` and `use_positron()` |
| 55 | + generate `.vscode/settings.json` with suitable defaults, thus enhancing |
| 56 | + developer experience in VSCode and Positron. One of the big ones here is the |
| 57 | + addition of `rust-analyzer.linkedProjects`, which ensures that rust analyzer |
| 58 | + can find the Rust project inside the R package directory. |
| 59 | +- **Cargo functions** - rextendr added or updated a few helper functions to |
| 60 | + invoke Cargo commands from R. These include `rust_sitrep()` to provide Rust |
| 61 | + toolchain diagnostics, `use_crate()` to add dependencies to `Cargo.toml`, |
| 62 | + and `read_cargo_metadata()` to fetch project information. |
| 63 | + |
| 64 | +## WebR support |
| 65 | + |
| 66 | +A very exciting development in the project is greater support for WebR, with |
| 67 | +extendr-powered R packages now compatible with WASM, meaning the packages can be |
| 68 | +used in the browser without an R installation. A nice side-effect of these |
| 69 | +enhancements is that compiled extendr-packages are now substantially reduced in |
| 70 | +size. |
| 71 | + |
| 72 | +## A new extendr badge! |
| 73 | + |
| 74 | +The extendr community has grown quite a bit in the last two years, maybe as much |
| 75 | +as the codebase! We wanted to make sure that new developers could boast about |
| 76 | +their extendr-powered packages - and, if we're being honest, increase visibility |
| 77 | +for the project - by adding an extendr badge to their README files, which can |
| 78 | +now be done with `use_extendr_badge()`. This results in: |
| 79 | + |
| 80 | +[](https://extendr.rs/extendr/extendr_api/) |
| 81 | + |
| 82 | +## What These Changes Mean for Developers |
| 83 | + |
| 84 | +These improvements provide a host benefits to new developers: |
| 85 | + |
| 86 | +- **Simplified CRAN submission process** - Running `use_extendr()` now creates |
| 87 | + package scaffolding that's ready for CRAN submission with minimal additional |
| 88 | + configurations. Invariably, developers in the R community will experience |
| 89 | + many frictions and pain points on the way to publishing on CRAN, but |
| 90 | + rextendr will not be one of them. |
| 91 | +- **Reduced maintenance overhead** - The new updating mechanism provided by |
| 92 | + `use_extendr()` means that developers can now generally count on the extendr |
| 93 | + team to help implement changes that meet CRAN requirements and take |
| 94 | + advantage of new developments in Rust. |
| 95 | +- **Better integration with R infrastructure** - Developers can now build with |
| 96 | + confidence knowing that their packages will be robust across platforms and |
| 97 | + package managers. |
| 98 | + |
| 99 | +## To learn more... |
| 100 | + |
| 101 | +Check out our recently updated \[website\](<https://extendr.rs/>) and |
| 102 | +documentation! We are still a ways away from having complete documentation, but |
| 103 | +we're getting there! Did you notice our new domain? |
0 commit comments