# tidymodels: one package for modelling in R

> tidymodels is a meta-package that attaches thirteen modelling packages at once, so an R session gets resampling, preprocessing, model specification, tuning and evaluation under one grammar. Attaching it prints the version of every attached package and the conflicts it introduces, which is the quickest way to see what the package costs you.

**tidymodels/tidymodels** — Easily install and load the tidymodels packages

- Repository: https://github.com/tidymodels/tidymodels
- Website: https://tidymodels.tidymodels.org
- Stars: 821 · Forks: 78
- Language: R
- License: NOASSERTION
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/tidymodels-tidymodels

## A meta-package and what that means

tidymodels describes itself as a meta-package for modelling and statistical analysis that shares the underlying design philosophy, grammar and data structures of the tidyverse. The name matters for what the package is: it contains no modelling code of its own.

What it does is depend on a set of related packages, and load them together. The repository description puts it more bluntly, the purpose is to make it easy to install and load the tidymodels packages.

For a user, the practical effect is one install instead of thirteen and one library call instead of a long list. For a maintainer, the meta-package is where the dependency versions are pinned together and where the compatibility matrix between the parts is decided, so a release of tidymodels is really a statement about a tested combination of packages rather than a new feature.

That makes it easy to mistake tidymodels for a modelling framework. It is not. The modelling happens in parsnip, the resampling in rsample, the preprocessing in recipes, the tuning in tune and the metrics in yardstick. tidymodels is the packaging that keeps those in step.

The site for the project is tidymodels.tidymodels.org, and the package is published on CRAN, where its badge shows the current version.

## The thirteen packages attached on startup

The README lists the core set that is loaded on startup, and each entry is a sentence that explains a stage of a modelling workflow.

The data handling end comes first. dplyr contains a grammar for data manipulation, tibble is a modern re-imagining of the data frame, and purrr is a functional programming toolkit.

The modelling core is parsnip, described as a tidy, unified interface to creating models. rsample provides infrastructure for resampling data so that models can be assessed and empirically validated, and dials has tools to create and manage values of tuning parameters. recipes is a general data preprocessor with a modern interface, which can create model matrices that incorporate feature engineering, imputation and other helper tools. tune contains the functions to optimise model hyper-parameters, and workflows has methods to combine pre-processing steps and models into a single object.

Evaluation and output close the loop. yardstick contains tools for evaluating models such as accuracy and RMSE, infer is a modern approach to statistical inference, broom takes the messy output of built-in R functions such as lm, nls or t.test and turns them into tidy data frames, and ggplot2 implements a grammar of graphics.

Read as a pipeline, the list is a complete workflow: resample, preprocess, specify, tune, fit, evaluate, report.

## Installing the released and the development version

The released version comes from CRAN with the ordinary install call.

```r
install.packages("tidymodels")
```

The development version is installed from GitHub, and the README shows it with the pak package, which handles the dependency resolution for source installs.

```r
# install.packages("pak")
pak::pak("tidymodels/tidymodels")
```

The commented line is the instruction to install pak first, since the second line assumes it is there. That is a small detail but it is the difference between a command that works and one that fails with an error about a missing package.

The README also points to a function index at tidymodels.org/find, which lists all tidymodels functions across the different CRAN packages. That is the answer to a practical problem with meta-packages: when you do not know which package a function came from, the index tells you where to look.

The repository layout matches a typical R package, with a DESCRIPTION file, a NAMESPACE, an R directory, tests, vignettes, a man directory for documentation, inst, a pkgdown configuration, a reverse dependency directory, a NEWS file and an R project file, plus a note in the README header that the README itself is generated from an Rmd source file.

## What attaching the package actually tells you

The README shows the console output of attaching the package, and it is more informative than a version banner.

The output starts with a two column table of the attached packages and their versions. In the version shown, that is broom 1.0.12, dials 1.4.3, dplyr 1.2.1, ggplot2 4.0.3, infer 1.1.0, modeldata 1.5.1, parsnip 1.5.0, purrr 1.2.2, recipes 1.3.2, rsample 1.3.2, tailor 0.1.0, tidyr 1.3.2, tune 2.1.0, workflows 1.3.0, workflowsets 1.1.1 and yardstick 1.4.0, with tidymodels itself at 1.5.0.

Below that is a conflicts section, and that is the part to read carefully. The attach output lists four masked functions.

```r
#> ✖ purrr::discard() masks scales::discard()
#> ✖ dplyr::filter()  masks stats::filter()
#> ✖ dplyr::lag()     masks stats::lag()
#> ✖ recipes::step()  masks stats::step()
```

Each of those means a base or package function you may have been relying on now resolves to a different implementation. The dplyr filter against the stats filter is the classic case, since the base function is a time series filter and the dplyr one is a row filter, and code that used stats::filter will fail with a message about arguments if it is not qualified.

Two of the four involve packages that are not in the attached set, scales and stats, so the masking reaches into code that tidymodels itself did not load. The library also provides a conflicts function so a session can check the current state rather than relying on the message at startup.

## Why the pieces are split at all

The alternative to tidymodels is to install the modelling packages individually, which is what most R users did before the meta-package existed and what many still do when they want a lighter session.

The difference in approach is that tidymodels treats the workflow as a set of composable objects rather than a set of functions. A model specification from parsnip is not tied to a particular algorithm, a recipe from recipes describes preprocessing as data rather than as a sequence of calls, rsample produces a set of resamples that can be handed to tune, and workflows bundles preprocessing and model into a single object so that the same pipeline is fitted and predicted with one pair of calls.

That composability is why the package list looks the way it does. dials exists because tuning parameters need a common representation across model families, and yardstick exists because metrics should be computed the same way whatever produced the predictions.

The cost is dependency weight and a fixed version set. Thirteen packages, plus their own dependencies, are attached to every session that loads tidymodels, and the attached versions are whatever the meta-package release pinned. The README's own output makes this visible, which is the honest way to sell it: you can see exactly what you are taking on.

There is a middle path the project itself points at, since each of the packages can be installed and loaded on its own. The meta-package is a convenience and a compatibility statement, not a requirement.

## Getting help, reporting bugs and where the boundaries are

The contributing section tells you where each kind of question belongs, and it is more specific than most R package readmes.

Questions and discussions about the tidymodels packages, about modelling and about machine learning go to the RStudio Community forum, with a category and tag set for tidymodels questions. Bugs, however, most likely belong on the GitHub repository of the individual package that has the problem, and only a bug in the meta-package itself belongs on the meta-package repository.

The last instruction is the one worth internalising. When you install thirteen packages, a bug report against the wrong repository goes nowhere, and the fix is to read which package owns the function.

The README also asks you to learn how to create and share a reprex, a minimal reproducible example, and links the guide for it. For a package whose whole value is that many pieces interact, a minimal example is what makes a bug report actionable.

The project is released with a Contributor Code of Conduct, version 2.1 of the Contributor Covenant, and contributing means agreeing to its terms.

Two other links round out the picture: contributing guidelines for tidymodels packages and a help page, both on the tidymodels site.

## Versions, licence and the shape of the project

The release tags are tidymodels 1.5.0 from 2026-04-23, 1.4.1 from 2025-09-09 and 1.4.0 from 2025-09-05, and the last push was on 2026-09-17.

So the package is on a stable 1.x line with a lifecycle badge that says stable, which is the R package development lifecycle marking that the API is not expected to break in incompatible ways. That matters more for a meta-package than for a normal package, because a break in tidymodels would break the whole stack at once.

The repository carries the quality signals in the badges. There is an R CMD check workflow, which is the standard R package validation, and a codecov badge for test coverage. The tests directory and the vignettes directory are both present, which is where the package's documented examples and longer walkthroughs live.

The licence is the interesting gap. The repository metadata does not classify it, and the repository root carries both a LICENSE file and a LICENSE.md, alongside a NAMESPACE and a DESCRIPTION whose contents the README does not reproduce. The README does not state the terms, so the licence file is the authority, and it is worth reading before you put the package into a commercial pipeline.

One practical habit the README encourages, if it is a habit: check the attach output. When a tutorial you are following produces a different result from the one you get, the versions printed at attach time are the first thing to compare.

## Conclusion

tidymodels suits an R team that has decided to standardise on the tidyverse way of working, because it removes the per project chore of deciding which modelling packages to load and keeps the interfaces consistent across model families, resampling and evaluation. It is the wrong choice if you want only one function from one package, since attaching the meta-package brings thirteen dependencies and four masking conflicts, and the wrong choice if your project has to stay on base R. Verify first that the packages you need are in the attached set, that the masked functions do not break code you already have, and that the CRAN version matches the workflow tutorials you are reading, since the attach output shows the package versions that were current at release.

## FAQ

### What is the tidymodels package?

It is a meta-package for modelling and statistical analysis in R that shares the design philosophy, grammar and data structures of the tidyverse, and it attaches thirteen related modelling packages at once.

### How do I install tidymodels?

The released version is installed from CRAN with install.packages("tidymodels"), and the development version is installed from GitHub with pak::pak("tidymodels/tidymodels") after installing the pak package.

### Which functions does attaching tidymodels mask?

The README shows four: purrr::discard masks scales::discard, dplyr::filter masks stats::filter, dplyr::lag masks stats::lag, and recipes::step masks stats::step.

### Where should I report a bug in a tidymodels package?

Most issues belong on the GitHub repository of the individual package, and only a bug in the tidymodels meta-package itself belongs on the meta-package repository. Questions go to the RStudio Community forum.

## Sources

- [Issues](https://github.com/tidymodels/tidymodels/issues)
- [Project website](https://tidymodels.tidymodels.org)
- [README](https://github.com/tidymodels/tidymodels/blob/main/README.md)
- [Releases](https://github.com/tidymodels/tidymodels/releases)
- [tidymodels/tidymodels on GitHub](https://github.com/tidymodels/tidymodels)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/tidymodels-tidymodels
