A curated list of awesome tools to assist R 📦 development.
Note before:
- Not all tools are available on CRAN; some might be available only via GitHub or GitLab.
- Only tools helpful for package development are included, and not other resources (like books, talks, presentations, etc.).
If you wish to suggest any additional tools, please make a PR request or raise an issue here: https://github.com/IndrajeetPatil/awesome-r-pkgtools
Please note that the awesome-r-pkgtools
project is released with a
Contributor Code of
Conduct.
By contributing to this project, you agree to abide by its terms.
Tools (including their hard dependencies) useful across all stages of package development.
-
{devtools}
: https://devtools.r-lib.org/ -
{usethis}
: https://usethis.r-lib.org/
-
{pkgkitten}
: https://dirk.eddelbuettel.com/code/pkgkitten.html -
{rcompendium}
: https://frbcesab.github.io/rcompendium/ -
{fusen}
: https://thinkr-open.github.io/fusen/ ({rmarkdown}
-based) -
{pkgverse}
: https://pkgverse.mikewk.com/ (for package universe)
-
{available}
: https://cran.r-project.org/web/packages/available/index.html (to check if a package name is available to use) -
{collidr}
: https://cran.r-project.org/web/packages/collidr/ (to check for namespace collisions)
-
{roxygen2}
: https://roxygen2.r-lib.org/ -
{Rd2roxygen}
: https://cran.r-project.org/web/packages/Rd2roxygen/index.html (in case you inherit a project where documentation was not written using{roxygen2}
) -
{sinew}
: https://yonicd.github.io/sinew/ (generate{roxygen2}
skeletons) -
{roclang}
: https://cran.r-project.org/web/packages/roclang/ (helpers for diffusing of content across function documentation) -
{Rdpack}
: https://cran.r-project.org/web/packages/Rdpack/index.html (for inserting references, figures, and evaluated examples in Rd docs) -
{roxygen2md}
: https://roxygen2md.r-lib.org/ (using Markdown syntax in package documentation) -
{rd2list}
: https://github.com/coolbutuseless/rd2list (converts Rd docs to a human-readable list) -
roxygen2Comment
: https://github.com/csgillespie/roxygen2Comment (Rstudio addin for adding and remove{roxygen2}
comment)
-
{katex}
: https://docs.ropensci.org/katex/ -
{mathjaxr}
: https://cran.r-project.org/web/packages/mathjaxr/index.html
-
{knitr}
: https://yihui.org/knitr/ -
{rmarkdown}
: https://rmarkdown.rstudio.com/ -
{prettydoc}
: https://cran.rstudio.com/web/packages/prettydoc/index.html (creates lightweight yet pretty vignettes)
{lifecycle}
: https://lifecycle.r-lib.org/index.html
-
{pkgdown}
: https://pkgdown.r-lib.org/ (static website for package documentation) -
{gitdown}
: https://github.com/ThinkR-open/gitdown (software changes as a gitbook)
-
{badger}
: https://cran.r-project.org/web/packages/badger/index.html -
{hexSticker}
: https://cran.r-project.org/web/packages/hexSticker/index.html -
hexwall
: https://github.com/mitchelloharawild/hexwall (to create a wall of hexstickers)
{xaringan}
: https://github.com/yihui/xaringan
-
{docreview}
: https://thisisnic.github.io/docreview/ (to check quality of docs) -
{spelling}
: https://docs.ropensci.org/spelling/ (to spell check) -
{gramr}
: https://github.com/jasdumas/gramr (for grammar suggestions)
-
{testthat}
: https://testthat.r-lib.org/ -
{vdiffr}
: https://vdiffr.r-lib.org/ (visual regression testing) -
{mockthat}
: https://nbenn.github.io/mockthat/ (function mocking for unit testing to third-party packages) -
{roxytest}
: https://github.com/mikldk/roxytest (inline{testthat}
tests with{roxygen2}
) -
{exampletestr}
: https://rorynolan.github.io/exampletestr/ (tests based on package examples) -
{shinytest}
: https://rstudio.github.io/shinytest/ (testing Shiny apps) -
{testdown}
: https://github.com/ThinkR-open/testdown (turn{testthat}
results into a{bookdown}
project) -
{autotest}
: https://docs.ropensci.org/autotest/ -
{tinytest}
: https://cran.r-project.org/web/packages/tinytest/index.html -
{testit}
: https://cran.rstudio.com/web/packages/testit/index.html -
{testthis}
: https://cran.r-project.org/web/packages/testthis/ -
{xpectr}
: https://github.com/LudvigOlsen/xpectr -
{unitizer}
: https://cran.r-project.org/web/packages/unitizer/index.html -
{r-hedgehog}
: https://github.com/hedgehogqa/r-hedgehog (property based testing)
{goodpractice}
: http://mangothecat.github.io/goodpractice/ (Swiss army knife for good practices)
-
{covr}
: https://covr.r-lib.org/ (computes code coverage) -
{covrpage}
: https://yonicd.github.io/covrpage/ (provides summaryREADME
of code coverage and corresponding tests)
-
{lintr}
: https://github.com/jimhester/lintr -
{roger}
: https://cran.r-project.org/web/packages/roger/index.html -
{cleanr}
: https://cran.r-project.org/web/packages/cleanr/index.html
{dupree}
: https://github.com/russHyde/dupree
-
{bench}
: https://cran.r-project.org/web/packages/bench/index.html -
{profvis}
: https://cran.r-project.org/web/packages/profvis/index.html
{cloc}
: https://github.com/hrbrmstr/cloc
-
{styler}
: https://styler.r-lib.org/ (especially relevant if you follow{tidyverse}
style guide) -
{formatR}
: https://yihui.org/formatr/ -
AlignAssign
: https://github.com/seasmith/AlignAssign (RStudio addin)
-
{deepdep}
: https://cran.r-project.org/web/packages/deepdep/index.html (to visualize and explore package dependencies) -
{itdepends}
: https://github.com/r-lib/itdepends (to assess usage, measure weights, visualize proportions, and assist removal of dependencies) -
{DependenciesGraphs}
: https://github.com/datastorm-open/DependenciesGraphs (to visualize package dependencies) -
{functiondepends}
: https://cran.r-project.org/web/packages/functiondepends/ -
{pkgndep}
: https://cran.r-project.org/web/packages/pkgndep/ (checks the heaviness of the packages used) -
{oysteR}
: https://sonatype-nexus-community.github.io/oysteR/ (secure package against insecure dependencies) -
{attachment}
: https://github.com/ThinkR-open/attachment
-
{rhub}
: https://cran.r-project.org/web/packages/rhub/index.html (to runR CMD check
on CRAN architectures) -
{checkhelper}
: https://thinkr-open.github.io/checkhelper/ (submission help) -
{foghorn}
: https://cran.r-project.org/web/packages/foghorn/index.html (check results and submission portal status) -
{urlchecker}
: https://github.com/r-lib/urlchecker (URL checks)
-
{cranlogs}
: https://r-hub.github.io/cranlogs/ (computing CRAN download counts) -
{packageRank}
: https://cran.r-project.org/web/packages/packageRank/index.html (visualizing CRAN download counts)
CI/CD: continuous integration and either continuous delivery or continuous deployment
-
actions
: https://github.com/r-lib/actions (for GitHub Actions) -
r-appveyor
: https://github.com/krlmlr/r-appveyor (for AppVeyor) -
{tic}
: https://docs.ropensci.org/tic/ (for Circle CI and GitHub Actions)
-
{debugme}
: https://github.com/r-lib/debugme
-
{checkmate}
: https://mllg.github.io/checkmate/ (argument checks) -
{assertthat}
: https://cran.r-project.org/web/packages/assertthat/index.html -
{assertive}
: https://www.r-pkg.org/pkg/assertive -
{pkgcond}
: https://github.com/RDocTaskForce/pkgcond (better error messages for package users)
-
{codemetar}
: https://docs.ropensci.org/codemetar/ -
{pkgapi}
: https://github.com/r-lib/pkgapi -
{packagemetrics}
: https://github.com/sfirke/packagemetrics (for comparing among packages) -
{devtoolbox}
: https://martinctc.github.io/devtoolbox/index.html -
{pkgattrs}
: https://rich-iannone.github.io/pkgattrs/ -
{foreman}
: https://github.com/yonicd/foreman -
{sessioninfo}
: https://github.com/r-lib/sessioninfo
{revdepcheck}
: https://r-lib.github.io/revdepcheck/
-
{containerit}
: https://o2r.info/containerit/ -
{usethat}
: https://tidylab.github.io/usethat/
Thank the contributors or maintainers of packages you rely on.
-
{thankr}
: https://cran.r-project.org/web/packages/thankr/index.html -
{allcontributors}
: https://docs.ropensci.org/allcontributors/
-
{Rcpp}
: https://cran.r-project.org/web/packages/Rcpp/index.html -
{cpp11}
: https://cpp11.r-lib.org/index.html
{hellorust}
: https://github.com/r-rust/hellorust
{rClr}
: https://github.com/rdotnet/rClr
-
{TODOr}
: https://github.com/dokato/todor (RStudio addin to list things that you need to do or change) -
{prefixer}
: https://github.com/dreamRs/prefixer (prefix function with their namespace ) -
{gitignore}
: https://cran.r-project.org/web/packages/gitignore/index.html (to fetch gitignore templates) -
{touchstone}
: https://lorenzwalthert.github.io/touchstone/ (benchmarking pull requests)