learnr2 creates interactive R tutorials that run entirely in the reader’s web browser using Quarto and WebR, via the quarto-live extension. It offers learnr-style authoring conveniences — scaffolding, exercises, hints, solutions, and quizzes — without Shiny, R Markdown, or a server. A rendered tutorial is a self-contained HTML page.
Installation
Install the released version of learnr2 from CRAN:
install.packages("learnr2")Or install the development version from GitHub:
# install.packages("pak")
pak::pak("PPBDS/learnr2")You will also need the Quarto CLI.
Usage
Try the bundled feature-tour tutorial:
library(learnr2)
available_tutorials() # list tutorials bundled with a package
run_tutorial("hello-learnr2") # render + open in your browserScaffold your own tutorial:
create_tutorial("my-tutorial", dir = ".")This creates my-tutorial/my-tutorial.qmd (under the directory you name; there is no default) with the quarto-live extension copied alongside it, so it renders out of the box with Quarto or quarto::quarto_render().
What’s inside a tutorial
- Live code cells — editable, runnable R that executes in the browser.
-
Exercises — cells with blanks, plus
.hintand.solutionblocks. - Automatic grading — powered by gradethis.
-
Quiz questions —
question()/quiz(), graded in the browser with plain JavaScript, including single/multiple choice, free-text, and reflection questions (optionally answered with a pasted screenshot). Answers persist in the browser’slocalStorage. -
Student info and submission —
student_info()collects a name and email;download_answers_button()bundles every saved answer into a JSON file the reader can turn in. No server involved. -
Progressive reveal — sections unlock one at a time behind “Continue” buttons, the table of contents can’t be used to read ahead unless
tutorial_options(allow_skip = TRUE)says so, and every page has a “Start Over” button that clears saved progress.
See the bundled hello-learnr2 tutorial and the reference index for details. Two vignettes cover writing tutorials: “Tutorials in the Age of AI” on how a tutorial should teach, and “Translating learnr Tutorials” on how one is put together, including converting an existing learnr tutorial.