Last Call

AI on duty

Get the digest

Runtime

Microsoft

Microsoft ends support for .NET 8 (LTS) and .NET 9 (STS) — after 10 November 2026 neither receives security patches, bug fixes, or technical support

Boarding
53days00hrs00min

departs 10 Nov 2026

Official source .NET and .NET Core Support Policy — dotnet.microsoft.com (official lifecycle table) ↗ (dotnet.microsoft.com)

Quick answers

Is it true that .NET 8 and .NET 9 reach end of support on 10 November 2026?
Yes. Microsoft has officially announced it, effective 10 Nov 2026. Microsoft's official .NET support policy lists both .NET 8 and .NET 9 with an end-of-support date of 10 November 2026.
When does it take effect?
10 Nov 2026. Verified against the vendor's own announcement.
What should I use instead?
Before 10 November 2026, retarget applications from `net8.0` / `net9.0` to `net10.0`, update NuGet package references to their .NET 10-compatible versions, and rebuild.

What this means for you

Microsoft's official .NET support policy lists both .NET 8 and .NET 9 with an end-of-support date of 10 November 2026. .NET 8 is a Long Term Support (LTS) release; .NET 9 is a Standard Term Support (STS) release; they share the same end date. After that date, Microsoft stops shipping security updates, bug fixes, and technical support for both — apps keep running, but any newly discovered vulnerability in the runtime or framework libraries goes unpatched. This affects the very large base of production services, container images, and libraries still targeting `net8.0` or `net9.0`, plus CI images pinned to `mcr.microsoft.com/dotnet/*:8.0` or `:9.0`. It matters most where an unpatched runtime is a compliance or security problem: internet-facing ASP.NET Core apps, anything handling regulated data, and base images baked into other people's builds. The supported successor is .NET 10 (LTS), which Microsoft supports through 14 November 2028.

Where to go

Before 10 November 2026, retarget applications from `net8.0` / `net9.0` to `net10.0`, update NuGet package references to their .NET 10-compatible versions, and rebuild. In Dockerfiles and CI, bump base images from `mcr.microsoft.com/dotnet/aspnet:8.0`, `sdk:8.0`, or `runtime:8.0` (and the `9.0` equivalents) to the `10.0` tags. .NET 10 is an LTS release, so moving there — rather than to another STS — buys the longest runway (support through 14 November 2028). Teams that cannot move in time should at minimum inventory which services still run on 8.0/9.0 and treat any post-date CVE in those runtimes as unpatchable until they migrate.

  • .NET 10 (LTS) — supported through 14 November 2028, the direct upgrade target

Microsoft’s official .NET support policy lists both .NET 8 and .NET 9 with an end-of-support date of 10 November 2026. .NET 8 is a Long Term Support (LTS) release and .NET 9 is a Standard Term Support (STS) release, but on the lifecycle table they land on the same day.

End of support means exactly one thing that matters: after 10 November 2026, Microsoft stops shipping security patches, bug fixes, and technical support for these versions. Your app does not stop running that day. What changes is that the next security vulnerability found in the runtime or the framework libraries never gets fixed on 8.0 or 9.0 — you either carry the risk or upgrade.

This lands on a very large base of code. Anything with <TargetFramework>net8.0</TargetFramework> or net9.0 in its project file, any container built FROM mcr.microsoft.com/dotnet/aspnet:8.0 (or sdk/runtime, and the 9.0 tags), and any library still shipping those target frameworks is in scope. The cases that need attention first are the ones where an unpatched runtime is a compliance or security problem: internet-facing ASP.NET Core services, workloads handling regulated data, and base images that other teams inherit without noticing the version underneath.

The upgrade target is .NET 10, which Microsoft’s table shows as an LTS release supported through 14 November 2028. Retarget projects to net10.0, update NuGet references to their .NET 10-compatible versions, rebuild, and bump the :8.0/:9.0 container tags to :10.0. Because .NET 10 is LTS rather than another STS, moving straight to it buys the longest runway before the next end-of-support date. If you can’t migrate everything by November, at least inventory what still runs on 8.0 and 9.0 so you know precisely what becomes unpatchable.

Entry changelog

  • — last reviewed.
  • — Entry created from Microsoft's official .NET support policy table. Both .NET 8 (LTS) and .NET 9 (STS) are listed with end of support 10 November 2026, and .NET 10 (LTS) with end of support 14 November 2028 — all read directly from the lifecycle table. detect: fingerprints target the going-away target-framework monikers (net8.0, net9.0) and the 8.0/9.0 container image tags, never the net10.0 successor; CLI-validated against a scratch repo before publishing.

Related on the calendar

Put this countdown in your README

Building on Microsoft? Drop this badge into a project’s README or docs — it shows the days left and refreshes on its own every night from this page. Last Call countdown for Microsoft ends support for .NET 8 (LTS) and .NET 9 (STS) — after 10 November 2026 neither receives security patches, bug fixes, or technical support

[![Last Call countdown](https://lastcall.dev/badge/dotnet-8-and-9-end-of-support.svg)](https://lastcall.dev/entries/dotnet-8-and-9-end-of-support)

Spot an error or a changed date? Tell us and it’s corrected the same night.