---
title: "R version support"
output: 
  rmarkdown::html_vignette:
    toc: true
vignette: >
  \usepackage[utf8]{inputenc}
  %\VignetteIndexEntry{R version support}
  %\VignetteEngine{knitr::rmarkdown}
---

R evolves every year. Each update brings many bug fixes and performance 
improvements, but also sometimes changes the default value of some parameters
(such as switching from `stringsAsFactors = TRUE` to `FALSE` in R 4.0.0).

While there is benefit in supporting older R versions, doing so adds 
maintenance burden, especially in a large ecosystem like **easystats** that
contains 10 packages that are supposed to seamlessly work together. Therefore,
**easystats** is supported (meaning each package is thoroughly tested) on the
**current R** version, the future one (**R-devel**) and the **previous five**
versions.

The [current planned release schedule for large R updates](https://developer.r-project.org/) 
is once a year in Spring. Accordingly, this table shows the corresponding latest
R version and the oldest supported version:

| Year | Latest R version | Oldest supported R version |
|------|------------------|----------------------------|
| 2023 | 4.3              | 3.5                        |
| 2024 | 4.4              | 3.6                        |
| 2025 | 4.5              | 4.0                        |
| 2026 | 4.6              | 4.1                        |
| 2027 | 4.7              | 4.2                        |
| 2028 | 4.8              | 4.3                        |

(Of course, if the R release schedule changes or R releases a "5.0" version, the
numbers in the table will change.)

## Implications

The implications are simple:

* If you are a user and your R version is below the oldest supported one, you
  must update it to use the **easystats** packages. Alternatively, you can
  also download a version of the package that is compatible with your R version
  from the [CRAN archive](https://cran.r-project.org/src/contrib/Archive/) and
  then install it locally. Finally, the package `{remotes}` gives a way to install
  an old version of a package. For instance, 
  `remotes::install_version("insight", version = "0.10.0")` installs a version
  of `{insight}` that is compatible with R 3.5.0.

* If you are a developer and your package depends on one of the **easystats**
  packages, the oldest version that your package supports corresponds to the 
  oldest version supported by **easystats**. Note that this should be reflected
  in your DESCRIPTION file with `Depends: R (>= x.y.z)`.