Skip to content
52 changes: 52 additions & 0 deletions sites/upsun/src/create-apps/depreciation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
---
title: "Image Lifecycle & Deprecation Policy"
sidebarTitle: Image Lifecycle
description: Understand the support status and lifecycle timelines for all Upsun runtimes and services.
---

{{% vendor/name %}} images follow a clear lifecycle to ensure your applications run on secure, supported, and well-maintained runtimes and services. This policy helps you understand how long an image remains supported, when upgrades are required, and how we communicate lifecycle changes.

Maintaining safe and up-to-date applications is a shared responsibility:
{{% vendor/name %}} provides secure and stable image updates, while users are expected to track support timelines and upgrade before end-of-life.

## Image Lifecycle Stages

Each {{% vendor/name %}} image moves through four lifecycle stages:

| **Stage** | **Description** | **{{% vendor/name %}} Support** | **User Action** |
| ---- | ---- | ---- | ---- |
| **Active** | Any version currently in upstream active support. These versions receive ongoing maintenance updates. They move to Deprecated once upstream ends active support and security-only support begins | Full support | No action needed |
| **Deprecated** | Upstream version leaves active support. Upsun still maintains the image, but it will be retired soon. | Full support |Start preparing migration |
| **Retired** | Upstream security support ends. Image is frozen, provided as-is and not maintained. The image will be decomissioned in 180 days | Limited support | Upgrade as soon as possible |

Check failure on line 20 in sites/upsun/src/create-apps/depreciation.md

View workflow job for this annotation

GitHub Actions / vale

[vale] sites/upsun/src/create-apps/depreciation.md#L20

[Vale.Spelling] Did you really mean 'decomissioned'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'decomissioned'?", "location": {"path": "sites/upsun/src/create-apps/depreciation.md", "range": {"start": {"line": 20, "column": 119}}}, "severity": "ERROR"}
| **Decommissioned** | Image is no longer available.
Builds using it will fail. | - | Upgrade required to continue deploying |

These lifecycle stages are aligned with upstream support timelines for each ecosystem. {{% vendor/name %}} only supports:
- LTS versions for ecosystems with formal LTS (e.g., Node.js), and
- Versions receiving upstream security updates for ecosystems without LTS (e.g., Python, PHP).

## Deprecation Timeline

A typical image progresses through the following steps:

### 1. Active → Deprecated

An image becomes Deprecated as soon as the upstream runtime or service ends active support:
- {{% vendor/name %}} continues maintaining the image.
- Upgrade nudges appear in the Console, CLI, or API where applicable.

### 2. Deprecated → Retired

An image becomes Retired as soon as upstream security support ends.
During this Retired phase:
- The image is frozen and no longer maintained.
- It remains available for a **180-day grace period**.
- Deploying with this version is allowed but strongly discouraged.
- Users must migrate to avoid service interruption.

#### 3. Retired → Decommissioned (after 180 days)

Once the 180-day Retired period ends:
- {{% vendor/name %}} reviews usage of the retired image.
- The image is fully decommissioned afterward.
- New and existing projects can no longer build with it.
8 changes: 7 additions & 1 deletion sites/upsun/src/languages/dotnet.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,18 @@ description: |

## Supported versions

{{% images-lifecycle %}}

You can select the major and minor version.

Patch versions are applied periodically for bug fixes and the like.
When you deploy your app, you always get the latest available patches.

{{< image-versions image="dotnet" status="supported" environment="grid" >}}
- 8.0: `Active`.
- 7.0: `Deprecated`.
- 6.0: `Retired`.

<!-- {{< image-versions image="dotnet" status="supported" environment="grid" >}} -->

{{% language-specification type="dotnet" display_name=".Net Core" %}}

Expand Down
9 changes: 8 additions & 1 deletion sites/upsun/src/languages/elixir.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,19 @@ description: "{{% vendor/name %}} supports building and deploying applications w

## Supported versions

{{% images-lifecycle %}}

You can select the major and minor version.

Patch versions are applied periodically for bug fixes and the like.
When you deploy your app, you always get the latest available patches.

{{< image-versions image="elixir" status="supported" environment="grid" >}}
- 1.18: `Active`.
- 1.15: `Deprecated`.
- 1.14: `Retired`.


<!-- {{< image-versions image="elixir" status="supported" environment="grid" >}} -->

{{% language-specification type="elixir" display_name="Elixir" %}}

Expand Down
11 changes: 10 additions & 1 deletion sites/upsun/src/languages/go.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,21 @@ description: "{{% vendor/name %}} supports building and deploying applications w

## Supported versions

{{% images-lifecycle %}}

You can select the major and minor version.

Patch versions are applied periodically for bug fixes and the like.
When you deploy your app, you always get the latest available patches.

{{< image-versions image="golang" status="supported" environment="grid" >}}
- 1.25: `Active`.
- 1.24: `Deprecated`.
- 1.23: `Retired`.
- 1.22: `Retired`.
- 1.21: `To be decommissionned`.
- 1.20: `To be decommissionned`.

<!-- {{< image-versions image="golang" status="supported" environment="grid" >}} -->

{{% language-specification type="golang" display_name="Go" %}}

Expand Down
14 changes: 12 additions & 2 deletions sites/upsun/src/languages/java/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,28 @@ layout: single

## Supported versions

{{% images-lifecycle %}}

You can select the major version. But the latest compatible minor version is applied automatically and can’t be overridden.

Patch versions are applied periodically for bug fixes and the like. When you deploy your app, you always get the latest available patches.

### OpenJDK versions:

{{< image-versions image="java" status="supported" environment="grid" >}}
<!-- {{< image-versions image="java" status="supported" environment="grid" >}} -->

These versions refer to the headless packages of OpenJDK.
To save space and reduce potential vulnerabilities, they don't contain GUI classes, which can't be used on the server.

{{% language-specification type="java" display_name="Java" %}}
- 21: `Active`. Will deprecate on `2028-09-30`
- 19: `To be decommissionned`.
- 18: `To be decommissionned`.
- 17: `Active`. Will deprecate on `2026-09-30`
- 11: `Deprecated`. Will retire on `2032-01-31`
- 8: `Deprecated`. Will retire on `2030-12-31`


<!-- {{% language-specification type="java" display_name="Java" %}} -->

```yaml {configFile="app"}
applications:
Expand Down
8 changes: 7 additions & 1 deletion sites/upsun/src/languages/nodejs/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,17 @@ You can also develop a microservice architecture mixing JavaScript and other app

## Supported versions

{{% images-lifecycle %}}

You can select the major version. But the latest compatible minor version is applied automatically and can’t be overridden.

Patch versions are applied periodically for bug fixes and the like. When you deploy your app, you always get the latest available patches.

{{< image-versions image="nodejs" status="supported" environment="grid" >}}
- 24: `Active`. Will retire on `2026-10-20`
- 22: `Deprecated`. Will retire on `2027-03-30`
- 20: `Deprecated`. Will retire on `2026-04-30`

<!-- {{< image-versions image="nodejs" status="supported" environment="grid" >}} -->

### Specify the language

Expand Down
10 changes: 9 additions & 1 deletion sites/upsun/src/languages/php/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,19 @@ Also, see how you can [modify your PHP runtime when using the composable image](

## Supported versions

{{% images-lifecycle %}}

You can select the major and minor version.

Patch versions are applied periodically for bug fixes and the like. When you deploy your app, you always get the latest available patches.

{{< image-versions image="php" status="supported" environment="grid" >}}
- 8.5: `Active`. Will deprecate on `2027-12-31`
- 8.4: `Active`. Will deprecate on `2026-12-31`
- 8.3: `Active`. Will deprecate on `2025-12-31`
- 8.2: `Deprecated`. Will retire on `2027-06-30`
- 8.1: `Deprecated`. Will retire on `2026-06-30`

<!-- {{< image-versions image="php" status="supported" environment="grid" >}} -->

Note that from PHP versions 7.1 to 8.1, the images support the Zend Thread Safe (ZTS) version of PHP.

Expand Down
11 changes: 10 additions & 1 deletion sites/upsun/src/languages/python/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,20 @@

## Supported versions

{{% images-lifecycle %}}

You can select the major and minor version.

Patch versions are applied periodically for bug fixes and the like. When you deploy your app, you always get the latest available patches.

{{< image-versions image="python" status="supported" environment="grid" >}}
- 3.13: `Active`. Will deprecate on `2026-10-01`
- 3.12: `Deprecated`. Will retire on `2028-10-31`
- 3.11: `Deprecated`. Will retire on `2027-10-31`
- 3.10: `Deprecated`. Will retire on `2026-10-31`
- 3.9: `Retired`. Could be decomissioned from `2026-04-30`

Check failure on line 24 in sites/upsun/src/languages/python/_index.md

View workflow job for this annotation

GitHub Actions / vale

[vale] sites/upsun/src/languages/python/_index.md#L24

[Vale.Spelling] Did you really mean 'decomissioned'?
Raw output
{"message": "[Vale.Spelling] Did you really mean 'decomissioned'?", "location": {"path": "sites/upsun/src/languages/python/_index.md", "range": {"start": {"line": 24, "column": 28}}}, "severity": "ERROR"}
- 3.8: `To be decommissioned`

<!-- {{< image-versions image="python" status="supported" environment="grid" >}} -->

### Specify the language

Expand Down
10 changes: 9 additions & 1 deletion sites/upsun/src/languages/ruby.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,22 @@ description: |

## Supported versions

{{% images-lifecycle %}}

You can select the major and minor version.

Patch versions are applied periodically for bug fixes and the like.
When you deploy your app, you always get the latest available patches.

### Ruby

{{< image-versions image="ruby" status="supported" environment="grid" >}}
- 3.4: `Active`. Will deprecate on `2027-03-31`
- 3.3: `Active`. Will deprecate on `2026-03-31`
- 3.2: `Deprecated`. Will retire on `2026-10-31`
- 3.1: `To be decommissioned`
- 3.0: `To be decommissioned`

<!-- {{< image-versions image="ruby" status="supported" environment="grid" >}} -->

{{% language-specification type="ruby" display_name="Ruby" %}}

Expand Down
2 changes: 2 additions & 0 deletions sites/upsun/src/languages/rust.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ banner:

## Supported versions

{{% images-lifecycle %}}

You can select the major version. But the latest compatible minor version is applied automatically and can’t be overridden.

Patch versions are applied periodically for bug fixes and the like. When you deploy your app, you always get the latest available patches.
Expand Down
3 changes: 3 additions & 0 deletions themes/psh-docs/layouts/shortcodes/images-lifecycle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{{ .Site.Params.vendor.name }} runtimes follow a clear lifecycle to keep your applications secure and modern. Each version moves through four stages: **Active**, **Deprecated**, **Retired**, and **Decommissioned**.

See the [full lifecycle policy for details and timelines](/create-apps/depreciation.html)
Loading