It has been a busy last couple of months for tidymodels.org. The site got a visual refresh, the Find pages were rebuilt from scratch, every article was modernized to use the base pipe and current parsnip and keras APIs, and, maybe most importantly, the whole rendering pipeline now keeps itself up to date automatically whenever a tidymodels package hits CRAN. Here is a roundup of what changed, grouped by theme.

A rebuilt Find experience#

The Find pages were one of the oldest parts of the site, and they were starting to show their age. The old DT-based tables were hard to scan and didn’t filter cleanly, so we rebuilt them from scratch as Quarto custom listings backed by generated items.yml files. They now have proper faceted multi-select filter dropdowns, which makes narrowing down to the model or function you need much faster.

Along the way we filled in coverage that had been missing from search: quantile regression models, bonsai, and the rest of the tidymodels org packages all made it onto the official package list and into Find. We also fixed the parsnip table’s horizontal overflow and split the old make_function_list.R into separate generators so the underlying data is easier to maintain.

Automatic re-rendering when packages update#

This is the deepest change of the year, even though it is the least visible. The site used to require a manual re-render whenever a tidymodels package was updated on CRAN. That was easy to forget, and slow when it did happen because every page got re-rendered together. The pipeline is now much more targeted.

Every article declares its non-tidymodels package dependencies in r-packages: YAML front matter, and a build script turns that into a package-to-pages map. From there, CI knows exactly which pages a given CRAN release could affect.

A scheduled workflow then checks CRAN every weekday morning, figures out which packages changed and which pages depend on them, installs only those packages, re-renders only those pages, and opens a PR for review (or files an issue if anything fails). Contributors can also trigger renders by commenting /render on a PR, which is a big quality-of-life win for anyone who doesn’t want to install the full toolchain locally. You can see the system at work in the steady drip of bot-authored re-render PRs, including package-specific ones for broom, parsnip, and bonsai.

To keep that daily cadence practical, we also audited the longest-running pages and trimmed render time where we could, and set up Spark, Java 17, and a cached Keras virtualenv in CI.

Cleaner, more reproducible output#

A surprising amount of churn in rendered output came from things like timestamps and small h2o non-determinism. We cleaned up the session-info blocks to remove the date and other noise, set reproducible seeds for h2o, and normalized its output more carefully. A re-render now produces a meaningful diff instead of being drowned in cosmetic differences.

Modernized article code#

The articles got a top-to-bottom code refresh. Every %>% became |>, deprecated parsnip and recipes functions were swapped for their current equivalents, and parsnip engine setters were fully specified so they don’t break when defaults shift. The keras article was migrated to the new keras3 engine, and the parsnip predictions article, which had been broken for a while, was restored from the old parsnip vignette.

Code linking with downlit#

Function names in code blocks across the site are now hyperlinked to their documentation with downlit. The tricky part was that library(tidymodels) doesn’t get auto-expanded the way library(tidyverse) does, so a small post-render script seeds the package list explicitly. That is what makes step_*, tune(), and friends light up everywhere.

Site content and UX#

The most visible work this year was a steady stream of design polish. We rebuilt the landing page so it actually showcases what tidymodels is and where to start, swapped in the new Posit logo, and moved blog references from the old tidyverse blog to opensource.posit.co. Hex stickers across the site were converted from PNG to SVG so they stay crisp at any size, and the dev articles got hexes of their own.

The team listing was refreshed to reflect who is working on tidymodels today, and we reserved image dimensions on the About page to fix a layout shift where author photos popped in late. The Learn, Books, and Resources pages picked up a batch of smaller fixes: updated Learn categories and more feedback UI such as hover states on article cards and sidebar links. Edgar contributed a dedicated cheatsheets page, and Julia’s long-standing PR to publish the priorities survey results finally landed.

Behind the scenes#

Plenty of repo hygiene rounded out the year. The Quarto config was split into local and production profiles, fonts are now self-hosted (Lato and Source Code Pro) instead of pulled from Google, and the README got a proper contributing section.

Head over to tidymodels.org to see it all in action, and if you spot something to improve, contributions are very welcome over on GitHub.