|
| 1 | +--- |
| 2 | +title: "rextendr 0.4" |
| 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 | +## TL; DR |
| 13 | + |
| 14 | +- New domain! Say hi to extendr.rs 👋🏼 |
| 15 | +- [Positron & VS Code Support 👩🏽💻](#positron) |
| 16 | +- [CRAN compatibility out of the box](#cran) |
| 17 | +- [WebR support 🕸️](#webr) |
| 18 | + |
| 19 | +The extendr team is excited to announce the release of |
| 20 | +[rextendr](https://extendr.github.io/rextendr/dev) `0.4`, along with two |
| 21 | +follow-up patch releases, that bring significant improvements to the R package |
| 22 | +ecosystem for Rust integration. These include: |
| 23 | + |
| 24 | +- enhanced CRAN compatibility, |
| 25 | +- improved developer experience, |
| 26 | +- WebR support, |
| 27 | +- and streamlined package scaffolding. |
| 28 | + |
| 29 | +A great deal of work also went into re-factoring code to reduce package dependencies and |
| 30 | +improve the maintainability to ensure the long-term viability of the project. |
| 31 | + |
| 32 | +::: callout-note |
| 33 | +## What is rextendr? |
| 34 | + |
| 35 | +For those new to the project, rextendr is an R package similar to `usethis` and |
| 36 | +`devtools` for supporting development of Rust-powered R packages, with the Rust |
| 37 | +crate `extendr` handling most of the heavy lifting behind the scenes. |
| 38 | +::: |
| 39 | + |
| 40 | +## WebR support{#webr} |
| 41 | + |
| 42 | +A very exciting development in this release is **WebR compatibility out of the box**. All extendr-powered R packages are now compatible with [WebR](https://webr.r-wasm.org/latest/), meaning your packages can run in the browser without an R installation. |
| 43 | + |
| 44 | +WebR support happens without any additional work on your part. Just update your build files with `use_extendr()` and permit rextendr to update your `Makevars{.win}.in`, files in `tools/`, `configure` scripts. |
| 45 | + |
| 46 | +::: callout-tip |
| 47 | +## WebR for existing packages |
| 48 | +WebR support requires that `lto = true` in your release profile. This is handled for new packages, but not existing ones. Be sure to add it to your `Cargo.toml`. |
| 49 | +::: |
| 50 | + |
| 51 | + |
| 52 | +## CRAN compatibility{#cran} |
| 53 | + |
| 54 | +The standout feature of the current release is found in rextendr's workhorse function `use_extendr()`, which now provides **CRAN-ready scaffolding out of the box**. All you need to do is vendor your Rust dependencies with `vendor_pkgs()` and you're ready for CRAN submission. |
| 55 | + |
| 56 | + |
| 57 | +## Positron & VS Code Support{#positron} |
| 58 | + |
| 59 | +With [Positron](http://positron.posit.co/) coming out of beta, we've introduced `use_positron()` and `use_vscode()` to generate (or update) `.vscode/settings.json` tailored to Rust development in R packages. |
| 60 | + |
| 61 | +When you run `use_extendr()`, it now automatically calls `use_vscode()` when VS Code or Positron is detected as your IDE, making the setup completely seamless. |
| 62 | + |
| 63 | +## Enhanced Developer Tools |
| 64 | + |
| 65 | +Release of 0.4.0 and its patches also comes with additional developer tooling: |
| 66 | + |
| 67 | +- **Rust diagnostics**—`rust_sitrep()` provides comprehensive Rust toolchain diagnostics and guides you through fixing any installation issues |
| 68 | +- **Dependency management**—`use_crate()` makes adding Rust dependencies to your `Cargo.toml` as easy as `usethis::use_package()` |
| 69 | +- **MSRV support**—`use_msrv()` helps specify the minimum supported Rust version for your package |
| 70 | +- **Metadata access**—`read_cargo_metadata()` lets you fetch detailed project information from Cargo |
| 71 | +- **Eeasy dependency vendoring**—`vendor_pkgs()` vendors and compresses your Rust dependencies for easy CRAN publication and offline installation |
| 72 | + |
| 73 | +## A new extendr badge! {#badge} |
| 74 | + |
| 75 | +The extendr community has grown quite a bit in the last two years, maybe as much |
| 76 | +as the codebase! First of all, we want to say **thank you** for being a part of the community! |
| 77 | + |
| 78 | +We wanted to make sure that new developers could boast about |
| 79 | +their extendr-powered packages—and, if we're being honest, increase visibility |
| 80 | +for the project—by adding an extendr badge to their README files, which can |
| 81 | +now be done with `use_extendr_badge()`. This results in: |
| 82 | + |
| 83 | +[](https://extendr.rs/extendr/extendr_api/) |
| 84 | + |
| 85 | +If you're using extendr in your package, do us a solid and add the badge to your README! 🥺 |
| 86 | + |
| 87 | + |
| 88 | + |
| 89 | +## There's still more |
| 90 | + |
| 91 | +Check out our recently updated [website](https://extendr.rs/) and |
| 92 | +documentation! For the full changelog see the [NEWS.md](https://github.com/extendr/rextendr/blob/main/NEWS.md). |
0 commit comments