.NET 8 End of Life on 10 November 2026 (and .NET 9, and Python 3.10): What to Do With Your Apps

Microsoft stops patching .NET 8 and .NET 9 on the same day. Python 3.10 stopped getting fixes on 1 October. If your business runs a web app, an API or an internal tool built in the last few years, one of these is probably underneath it. Here is how to check, and your options.

Oct 17, 2026

An application block on a cracking foundation next to a calendar, lifted by a glowing crane onto a new solid foundation

.NET 8 and .NET 9 both reach end of support on 10 November 2026, the same Patch Tuesday. From then on Microsoft provides no fixes, updates or technical help for either, and the upgrade target is .NET 10, supported until November 2028. Python 3.10 already reached end of life on 1 October 2026. These are the runtimes under a large share of the web apps, APIs and internal tools businesses commissioned in the last few years. The apps keep running after the date. What stops is security patches for the runtime underneath them, so every new vulnerability stays open, and audits, insurers and enterprise customers increasingly flag end-of-life runtimes as findings. Below: the dates, how to check what you run, your options, and what to do when nobody maintains the app anymore.


The dates

From Microsoft's .NET support policy and the Python developer guide:

RuntimeTypeEnd of support
.NET 8Long-term support10 November 2026
.NET 9Standard-term support10 November 2026
.NET 10Long-term support14 November 2028
Python 3.10—1 October 2026 (passed)
Python 3.11—October 2027
Python 3.12—October 2028
Python 3.13—October 2029

Microsoft's own words on what end of support means: "the date when Microsoft no longer provides fixes, updates, or online technical assistance", and "your use of out-of-support .NET versions may put your applications, application data, and computing environment at risk".

Skip .NET 9. It ends support the same day as .NET 8, so it buys nothing. Go to .NET 10.

How to check what you run

  • .NET: look for TargetFramework in the project files (net8.0, net9.0), or the base image in the Dockerfile (mcr.microsoft.com/dotnet/aspnet:8.0).
  • Python: the base image in the Dockerfile, the runtime setting of cloud functions, or the version in pyproject.toml or requirements.txt.
  • Hosting: cloud platforms deprecate old runtimes on their own schedules, so a serverless function on Python 3.10 may stop deploying before it stops running.

If nobody on your side can answer in an afternoon, that is the most important finding of the exercise.

Your options

1. Upgrade in place. For a healthy, tested application with a team that knows it, moving from .NET 8 to .NET 10, or Python 3.10 to 3.12 or 3.13, is usually a contained piece of work: update the framework, update dependencies, fix what breaks, run the tests, deploy.

2. Upgrade with a takeover. For an application whose original developer or agency is gone, the runtime upgrade is the easy part. The hard part is that nobody knows what else will break: dependencies that are also out of date, no tests, no reproducible deployment. That needs an audit first, then the upgrade, then someone responsible afterwards.

3. Replace a component. Occasionally the upgrade reveals that one part of the app is better rewritten. That should be a decision made from the audit, for that component, not a reflex to rewrite everything.

What doesn't work is waiting. The date passes, nothing visibly breaks, and the app quietly accumulates unpatched vulnerabilities until an audit, a customer's security questionnaire or an incident forces the work at the worst possible moment.

What we do

We take over applications other teams built, and keep them current. Our own stack is Go and PostgreSQL, and we're upfront about it: for .NET or Python applications, our job is the audit, the upgrade path and the maintenance around it, not claiming to be a .NET shop. The audit reads the code, maps what depends on what, lists what is out of support (runtime, framework, libraries) and what is exposed, and gives a costed order of work. Then, if you want, we do the upgrade and keep it current.

For the software we run ourselves, keeping runtimes and dependencies current is routine, not a project: Dependabot watches every repository, a scheduled scan re-checks every live application's main branch, and anything it finds becomes a ticket. Details on our security page.

Related: Windows Server 2016 end of life, what the CISA KEV list means for your software, and software maintenance and support services.