# Switching between Discourse release channels / versions

**URL:** https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014
**Category:** Self-Hosting
**Tags:** how-to
**Created:** [June 30, 2014, 1:55pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014 "2014-06-30T13:55:27Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [June 30, 2014, 1:55pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/1 "2014-06-30T13:55:27Z")

</div>

> 🔖 This guide explains how to configure the release channel of your Discourse instance.
> 
> 🙋 Required user level: System Administrator
> 
> ⚠ Console access is required.

Managing your Discourse instance’s channel determines the frequency and type of updates you receive. This guide explains the channels available and provides a step-by-step approach to changing the branch on your setup.

## Summary

Discourse offers several channels for tracking software updates: `latest`, `release`, and `esr`. This documentation explains the purpose of each, their key features, and how to configure them in your Discourse instance. For an illustration of the channels, see [releases.discourse.org](https://releases.discourse.org/).

## Supported channels

### `latest`

ℹ **Recommended Default**  
This channel provides the latest bug fixes and compatibility updates for plugins. Every passing commit from the `main` branch is tested by the build server and added to the `latest` branch after successful verification.

- Suitable for sites that want to stay up to date.
- Sites can update manually at any time.

### `release`

ℹ **For Sites That Prefer Monthly Releases**

The `release` channel tracks the most recent monthly release of Discourse. Each month, a release branch (e.g. `release/2026.2`) is cut from `latest`, providing a stable snapshot.

- Released approximately once per month.
- Each release receives critical fixes for two full release cycles.

### `esr`

ℹ **Extended Support Release**

The `esr` tag tracks the latest Extended Support Release, intended for sites prioritizing long-term stability and security over frequent updates.

- Declared approximately every 6 months from the monthly releases.
- Receives security fixes and critical backports for an extended period.
- May have limited compatibility with community plugins and theme components.

> ⚠ **Note:** Not receiving regular maintenance updates can leave some features outdated or visually inconsistent.

### Deprecated aliases

For backwards compatibility, the following old branch/tag names still work but are considered deprecated:

- `tests-passed` → `latest`
- `beta` → `release`
- `stable` → `esr`

### Other branches or references

> ⚠ Tracking other branches (e.g., specific `release/YYYY.M` branches or commit SHAs) is possible but requires expertise. These branches only receive critical fixes for a limited period.

## Instructions for configuring your channel

Follow these steps to configure the desired branch in your Discourse instance:

1. **Access the configuration file**  
Open the `app.yml` configuration file by running the following commands in your console:

```plaintext
cd /var/discourse
nano containers/app.yml

```

The `nano` editor will open the configuration file.  
2. **Edit the tracking branch**  
Locate the version parameter by searching for the word “version” in the file:

```plaintext
params:  
## Which Git revision should this container use? (default: latest)  
#version: latest

```

- Uncomment the version line.
- Replace `latest` with your desired branch or tag name (e.g., `esr`).Example:

```plaintext
params:  
## Which Git revision should this container use? (default: latest)  
version: esr  

```

1. **Save and exit**

- Press `Ctrl+O` to save your changes.
- Press `Enter` to confirm.
- Use `Ctrl+X` to exit the editor.

1. **Rebuild the container**  
Once the changes are made and saved, rebuild the container to apply the new configuration:

```plaintext
./launcher rebuild app

```

> ⚠ Rebuilding will cause temporary downtime

> Last edited by @david 2026-08-03T13:03:06Z
> 
> > **Check document**
> >
> > Perform check on document:

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [March 27, 2026, 7:20pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/34 "2026-03-27T19:20:55Z")

</div>

4 posts were merged into an existing topic: [Help deploying older versions of Discourse](https://meta.discourse.org/t/help-deploying-older-versions-of-discourse/399409/15)

---

<div class="post-metadata">

### Author: ![ghorbani](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ghorbani/32/388549_2.png) [@ghorbani](https://meta.discourse.org/u/ghorbani)
#### Post date: [August 3, 2026, 12:21pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/35 "2026-08-03T12:21:14Z")

</div>

> [@Discourse](#):
>
> ```bash
> cd /var/discourse
> git pull
> nano containers/app.yml
> 
> ```

Is `git pull` a necessary step, or is it redundant and remains from the legacy documentation, similar to the case of updating Discourse ([Manually update Discourse and Docker image to latest](https://meta.discourse.org/t/manually-update-discourse-and-docker-image-to-latest/23325) )?

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [August 3, 2026, 12:23pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/36 "2026-08-03T12:23:05Z")

</div>

In my experience git pull is _occasionally_ useful - e.g. a must have when we switched from yarn to pnpm …

Normally you don’t need to bother for a regular rebuild.

---

<div class="post-metadata">

### Author: ![ghorbani](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ghorbani/32/388549_2.png) [@ghorbani](https://meta.discourse.org/u/ghorbani)
#### Post date: [August 3, 2026, 12:28pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/37 "2026-08-03T12:28:00Z")

</div>

Good to know! Thank you for the info.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [August 3, 2026, 12:30pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/38 "2026-08-03T12:30:43Z")

</div>

what I usually do 😅 is try to rebuild, and if it fails for some not-so-obivous reason give git pull a go first - takes a moment.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [August 3, 2026, 12:53pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/39 "2026-08-03T12:53:44Z")

</div>

In theory it should never be needed. Launcher will automatically detect an out-of-date copy, and do the `git pull` itself:

> <https://github.com/discourse/discourse_docker/blob/ed9f680b0df1de28f062de1769d89d22b2644d1b/launcher#L840-L855>

---

<div class="post-metadata">

### Author: ![ghorbani](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ghorbani/32/388549_2.png) [@ghorbani](https://meta.discourse.org/u/ghorbani)
#### Post date: [August 3, 2026, 12:57pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/40 "2026-08-03T12:57:40Z")

</div>

Thank you for the details. Indeed, it makes sense. I’ll give it a shot without `git pul` and let you know how it turns out.

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [August 3, 2026, 12:58pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/41 "2026-08-03T12:58:19Z")

</div>

That’s weird. The code in question dates from 2015, my forum dates from 2018, and yet I’m pretty sure there have been several instances discussed here where git pull was needed.

For myself, I will always git pull, if I remember - it costs me nothing.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [August 3, 2026, 12:59pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/42 "2026-08-03T12:59:41Z")

</div>

It does get mentioned a lot, I think because of these very-historic documents. I don’t _think_ I’ve ever seen evidence of it actually helping.

But yes, there’s no harm in running it manually as well 🤷

---

<div class="post-metadata">

### Author: ![Ed\_S](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ed_s/32/134015_2.png) [@Ed\_S](https://meta.discourse.org/u/Ed_S)
#### Post date: [August 3, 2026, 12:59pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/43 "2026-08-03T12:59:46Z")

</div>

> [@Discourse](#):
>
> ```plaintext
> ## Which Git revision should this container use? (default: latest)  
> #version: latest
> 
> ```

As the yml file uses `version` and not `supported tracking branch` would it be good to add `(version)` to the topic title?

---

<div class="post-metadata">

### Author: ![ghorbani](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ghorbani/32/388549_2.png) [@ghorbani](https://meta.discourse.org/u/ghorbani)
#### Post date: [August 3, 2026, 1:01pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/44 "2026-08-03T13:01:55Z")

</div>

I was also a bit shocked by the date at first. But checking the version history, the latest update is May 18.

 ![image](https://global.discourse-cdn.com/meta/original/4X/b/a/9/ba9c35acbb5dcc69892274b7ce60bbdbcf155a95.png)

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [August 3, 2026, 1:03pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/45 "2026-08-03T13:03:38Z")

</div>

I made a pass on updating the OP to use our modern “channel” terminology, and remove some of the unnecessary `git pull` references.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [August 3, 2026, 1:09pm UTC](https://meta.discourse.org/t/switching-between-discourse-release-channels-versions/17014/46 "2026-08-03T13:09:32Z")

</div>

There must be at least an edge case because it’s definitely “got me over the hump” on very rare occasions

Could it be when the main script changes in limited circumstances?
