A framework end-of-life calendar for product leaders

Support end dates for five widely used web frameworks and runtimes, as of 18 October 2026, each linked to the project's own release page, and what end of life means for security fixes and hiring.

By Zefana · · Essay

A timeline from January 2026 to the end of 2028, with a line at 18 October 2026. Node.js 20 ended on 30 April 2026, 22 ends on 30 April 2027 and 24 on 30 April 2028. Python 3.10 ended on 1 October 2026, 3.11 ends in October 2027 and 3.12 in October 2028. Angular long-term support for 20 ends on 28 November 2026, for 21 in June 2027 and for 22 in June 2028. Laravel security fixes for 11 ended on 12 March 2026, for 12 they end on 24 February 2027 and for 13 on 17 March 2028. .NET 8 and 9 both end on 10 November 2026, and .NET 10 on 14 November 2028.

  • Every framework and runtime your product stands on has a published date after which its makers stop fixing it.
  • Past that date, a newly found security hole in that version stays open, and the people you hire inherit the gap.
  • The table below gives the dates for five widely used projects, as of 18 October 2026, each linked to the project’s own page.

Most product leaders know roughly how old their stack is. Fewer have the exact dates in front of them, and the dates are what decide when an upgrade stops being a choice. This is a calendar to read against your own list of what your product runs on. It is not a forecast: every date below is the one the project itself publishes, and you should open the linked page before you plan around it, because projects revise their own schedules.

What end of life means

End of life is the day a project stops releasing fixes for a version. The code keeps running. Nothing switches off. What stops is the flow of repairs.

Most projects step down in stages before that day. The Node.js release schedule moves a long-term release from Active LTS to Maintenance, where it gets critical bug fixes and security updates, and then to End-of-Life. The Python developer guide describes a security phase, in which only security fixes are accepted, followed by end of life, when the release cycle is frozen and no further changes are allowed. Laravel’s support policy gives each major version bug fixes for 18 months and security fixes for 2 years. Angular’s release page gives each major version 12 months of active support and 12 months of long-term support, in which only critical fixes and security patches are released.

So the date that matters most for risk is the last one: the day security fixes stop.

The calendar, as of 18 October 2026

Each date links to the page that states it. Where a page gives only a month, so does the table.

Project Version Support ends Status on 18 October 2026
Node.js 20 30 April 2026 Ended
Node.js 22 30 April 2027 Maintenance LTS
Node.js 24 30 April 2028 Active LTS
Python 3.10 1 October 2026 Ended
Python 3.11 October 2027 Security fixes only
Python 3.12 October 2028 Security fixes only
Angular 20 28 November 2026 Long-term support
Angular 21 June 2027 Long-term support
Angular 22 June 2028 Active
Laravel 11 12 March 2026 Security fixes ended
Laravel 12 24 February 2027 Security fixes only
Laravel 13 17 March 2028 Bug and security fixes
.NET 8 10 November 2026 Maintenance
.NET 9 10 November 2026 Maintenance
.NET 10 14 November 2028 Active

For Angular the date is the end of long-term support. For Laravel it is the end of security fixes; bug fixes stop earlier. For the others it is the date the project gives as end of life or end of support.

Reading the table

A few things in the table are easy to miss.

Two .NET versions end on the same day. On the .NET releases page, .NET 8 and .NET 9 both reach end of support on 10 November 2026. A product on either has the same deadline, and a move to .NET 10 serves both.

Some dates are months, not days. The Python developer guide gives only the month for versions still in support and says that dates shown in italic are scheduled and can be adjusted. Angular’s page gives months for its later versions. Read these as “during that month”, and check the page again as the month gets close.

Older versions are already gone. Angular’s page states that versions 2 to 19 are no longer supported. Node.js lists every release before 22 as End-of-Life on its release schedule. If you find one of those in your own list, the date in this table is not the one to plan around: that date has passed.

The table is a snapshot. It shows what each page stated on 18 October 2026. Pages change when projects release new versions or adjust their plans, so the linked page is always the authority, not this essay.

What it means for security fixes

Past end of life, the next security problem found in that version stays open. Projects fix vulnerabilities in the versions they still support. A version outside that window does not get the fix, even when the same flaw sits in its code.

That changes the conversation with your customers. A buyer’s security questionnaire may ask whether you run supported software. Before the date, the answer is yes. After it, the honest answer needs an explanation and a plan, and the plan is an upgrade that now has a deadline you did not choose.

It also changes what an upgrade costs. A version that is one step behind is usually a contained piece of work. A version that has sat past its end of life while the libraries around it moved on tends to need several steps at once, because the other packages your product uses stop supporting it too.

What it means for hiring

An unsupported framework is also a hiring question. Experienced engineers tend to prefer current tools, because that is where their skills keep their value and where the documentation, answers and libraries are being written. An old version narrows the pool of people who know it well and who want to keep working on it.

The people you already have feel it too. Time spent keeping an ageing version standing is time not spent on the product, and it can show up as slower features and as engineers who would rather work elsewhere.

None of this is a reason for panic. It is a reason to know the date and to decide, calmly and early, what you will do about it.

Put the dates on your own roadmap

The calendar only helps once it is matched against what your product actually runs.

Make your own list. Ask your team for every framework and runtime in production, with the exact major version of each. Include the quiet ones: the admin tool, the scheduled job, the internal service nobody has touched in a while.

Write the date next to each line. Use the project’s own page, as this table does. If a project you use is not in this table, its own site will have a release or support page.

Decide, line by line. For each version, choose whether to upgrade, replace or retire it, and put that decision on the roadmap with an owner. A date you have planned for is a steady course. A date that arrives unplanned becomes an emergency.

Check again at each new major version. A new release is a natural moment to see whether a page has changed.

Where we come in

This calendar does not check anything for you, and nothing on this page tells you which of your systems are affected. Your list is yours to make.

When the list shows a framework at or near its end, the move is what we can take on, described in Move off an ageing framework without stopping the product. Your product keeps moving forward, week after week. We work within the access you grant, and nothing more. The work lands in your own code repository. You decide what ships. Nothing reaches your users without your approval.

It starts with a conversation, with no obligation.

See every date with its status today: the end-of-life calendar

Read next

More on this topic: Rebuilding and modernising

All writing

Lift your eyes and let us carry the rest.

Talk to us and see what carrying your product forward looks like.

Book a conversation

Prefer to write directly? contact@zefana.com