--- id: releases sidebar_label: Releases title: Releases --- import useIsBrowser from '@docusaurus/useIsBrowser'; export function LocalTimeOfRelease() { const isBrowser = useIsBrowser(); // An arbitrary Monday at 17:00 UTC. const date = new Date('1970-01-05T17:00Z'); const formatted = date.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', timeZoneName: 'short', timeZone: isBrowser ? undefined : 'UTC', }); // Specify the day of week if it's not a Monday. const dayNames = [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', ]; if (date.getDay() !== date.getUTCDay()) { return `${dayNames[date.getDay()]}s at ${formatted}`; } return formatted; } ## Latest NPM Version We release a latest version every Monday at 17:00 UTC () using the latest commit to `main` at that time. This release is performed automatically by a Github action located in a private repository. This release goes to the standard `latest` tag on npm. See [Versioning](./Versioning.mdx) for how the version number is calculated. If there have been no commits that impact public-facing packages then a patch-level release shall be released. Latest releases shall only ever be "minor" or "patch" releases. ### Release Notes Every release is documented on the [Github Release page](https://github.com/typescript-eslint/typescript-eslint/releases). These release notes will list the PRs included in the release. ## Canary NPM Version We release a canary version for each commit to `main` that passes all required checks. This release is performed automatically by the [`publish_canary_version` step](https://github.com/typescript-eslint/typescript-eslint/blob/5feb2dba9da2bd5e233451b7b0f1c99414b5aef9/.github/workflows/ci.yml#L234-L263). So **you never need to wait for a new stable version to make use of any updates**. This release goes to the `canary` tag on npm and it is versioned as an incremental canary patch release on top of the current `latest` version. I.e. if the current version is `5.6.1`, then the first canary version will be `5.6.2-alpha.0`, the second `5.6.2-alpha.1`, and so on. :::note The only exception to the automated publishes described above is when we are in the final phases of creating the next major version of the libraries - e.g. going from `1.x.x` to `2.x.x`. During these periods, we manually publish `canary` releases until we are happy with the release and promote it to `latest`. ::: ### Installing Canary Versions To try out the latest canary versions of typescript-eslint, install `@typescript-eslint/eslint-plugin@canary` and `@typescript-eslint/parser@canary`. Note that npm may need a `--force` to override version requirements. ```bash npm2yarn npm i @typescript-eslint/eslint-plugin@canary @typescript-eslint/parser@canary --save-dev --force ``` ## Major Releases We currently do not have a set schedule around when major releases shall be performed; instead they are done as the need arises. We keep a backlog of breaking issues as a milestone on GitHub that is named in the form `${major}.0.0`. When we do do a major release, we release a release candidate version to the `rc-v${major}` tag on npm for each commit to the major branch. See [Maintenance > Releases](../maintenance/Releases.mdx#major-releases) for steps to perform a major release. ## Out-of-Band Releases We will do releases "out-of-band" (outside the [latest](#latest) schedule) for rare emergencies. We assess need on a case-by-case basis though generally an emergency is defined as a critical regression specifically introduced in the latest release. These releases are done manually by a maintainer with the required access privileges. ## Back-Porting Releases We **_do not_** back port releases to previously released major/minor versions. We only ever release forward.