<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Dipesh Batheja</title>
    <description>The latest articles on DEV Community by Dipesh Batheja (@dipeshba).</description>
    <link>https://dev.to/dipeshba</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4239099%2F7f1e6a23-0d45-4791-9df6-59a9eccf37ea.jpg</url>
      <title>DEV Community: Dipesh Batheja</title>
      <link>https://dev.to/dipeshba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dipeshba"/>
    <language>en</language>
    <item>
      <title>Nuxt 3 Is End of Life: Migrate to Nuxt 4 Now or Wait for Nuxt 5?</title>
      <dc:creator>Dipesh Batheja</dc:creator>
      <pubDate>Wed, 11 Nov 2026 12:55:31 +0000</pubDate>
      <link>https://dev.to/dipeshba/nuxt-3-is-end-of-life-migrate-to-nuxt-4-now-or-wait-for-nuxt-5-358m</link>
      <guid>https://dev.to/dipeshba/nuxt-3-is-end-of-life-migrate-to-nuxt-4-now-or-wait-for-nuxt-5-358m</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauvq4ngxyj4v6o3p3612.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fauvq4ngxyj4v6o3p3612.png" alt="Flat illustration of an ageing Nuxt 3 browser window with a warning sign, packages moving along an arrow to a new Nuxt 4 window with a security shield, and Nuxt 5 waiting in a cloud" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; Nuxt 3 reached end of life on 31 July 2026, so it no longer receives security or bug fixes. Nuxt 5 is still unreleased as of mid-November 2026. For most production apps the answer is to migrate to Nuxt 4 now: it is the only supported version, it is a small step from Nuxt 3, and Nuxt's policy keeps it supported for at least six months after Nuxt 5 ships. Waiting only makes sense if a critical module blocks you, a change freeze is in force or the app is about to be retired, and then only with paid extended support and a dated plan.&lt;/p&gt;

&lt;p&gt;If you pay for a Nuxt application rather than write it, the Nuxt 3 end of life can look like a developer's problem. It becomes yours the first time a security questionnaire asks which framework versions you run. This guide is for founders, product owners, agency owners and engineering managers. It covers what the Nuxt 3 EOL changes in practice, whether waiting for Nuxt 5 is a sensible bet, what makes a migration large or small, and how to keep your search rankings through the move.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Nuxt 3 end of life means for an app in production
&lt;/h2&gt;

&lt;p&gt;Your app does not stop working. Nuxt 3 stays on npm and your site keeps serving pages. What changes is what happens when something goes wrong.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8em4iwxfbpirnfayngkg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8em4iwxfbpirnfayngkg.png" alt="Timeline of Nuxt major versions showing Nuxt 2 supported from September 2018 to June 2024, Nuxt 3 from November 2022 to July 2026, Nuxt 4 from July 2025 and still supported, and Nuxt 5 estimated for the fourth quarter of 2026" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  No more security patches
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://nuxt.com/docs/4.x/community/roadmap" rel="noopener noreferrer"&gt;Nuxt roadmap&lt;/a&gt; lists 3.x as unsupported, with an end-of-life date of 31 July 2026. The &lt;a href="https://nuxt.com/blog/v4" rel="noopener noreferrer"&gt;Nuxt 4 announcement&lt;/a&gt; originally promised maintenance only until the end of January 2026, which is why some articles still quote that date. It was later moved to 31 July, and that date has now passed. The independent tracker &lt;a href="https://endoflife.date/nuxt" rel="noopener noreferrer"&gt;endoflife.date&lt;/a&gt; shows the same dates.&lt;/p&gt;

&lt;p&gt;The effect is already visible. On 2 November 2026 the Nuxt team shipped version 4.6.4, described in the &lt;a href="https://github.com/nuxt/nuxt/releases/tag/v4.6.4" rel="noopener noreferrer"&gt;release notes&lt;/a&gt; as a security release fixing eight advisories in Nuxt and three more in Nitro, its server engine. There was no matching 3.x release. Whether or not those issues affect Nuxt 3, nobody upstream is checking or patching that line any more.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compliance and customer questionnaires
&lt;/h3&gt;

&lt;p&gt;Running unsupported software is a recognised risk category. OWASP's Top 10 entry on &lt;a href="https://top10.owasp.org/2021/A06_2021-Vulnerable_and_Outdated_Components" rel="noopener noreferrer"&gt;Vulnerable and Outdated Components&lt;/a&gt; says you are likely vulnerable "if the software is vulnerable, unsupported, or out of date". If you sell to enterprises or hold SOC 2, ISO 27001 or PCI obligations, an end-of-life framework is a finding you will have to explain, with either a migration date or a compensating control.&lt;/p&gt;

&lt;h3&gt;
  
  
  Module support dries up
&lt;/h3&gt;

&lt;p&gt;Module authors build and test against the current major version. Over time, new releases of official and community modules tend to stop supporting the old one, so a Nuxt 3 app ends up pinned to older versions of its dependencies as well. It is the pattern we describe in our post on &lt;a href="https://netling.digital/blog/legacy-system-modernization-mistakes-ai-workflows" rel="noopener noreferrer"&gt;legacy system modernisation mistakes&lt;/a&gt;: the upgrade never gets cheaper by waiting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed in Nuxt 4, in plain language
&lt;/h2&gt;

&lt;p&gt;Nuxt 4 went stable on 16 July 2025 after a year of public testing. The team called it a stability-focused release, and that is fair: there is no new rendering model and no rewrite of how pages are built. The main changes are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A tidier project layout.&lt;/strong&gt; Application code moves into an &lt;code&gt;app/&lt;/code&gt; folder. Nuxt still detects the old layout, so the move is recommended, not forced.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More consistent data fetching.&lt;/strong&gt; The functions that load page data share results more predictably and have slightly different defaults. Most of the real code review goes here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stricter TypeScript.&lt;/strong&gt; App code and server code are type-checked separately, which often surfaces bugs that were already there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Updated metadata handling.&lt;/strong&gt; The library that manages titles and meta tags moved to a new major version, which matters for SEO.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Nuxt team wrote that they hoped "most Nuxt 3 projects can upgrade with a minimum of effort". The &lt;a href="https://nuxt.com/docs/4.x/getting-started/upgrade" rel="noopener noreferrer"&gt;official upgrade guide&lt;/a&gt; rates each change by impact, and most are marked minimal. It also ships a codemod that applies the mechanical changes automatically:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx codemod@0.18.7 nuxt/4/migration-recipe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The guide pins a specific codemod version, so check it for the current one. The codemod handles the repetitive edits. It does not test your app, check your modules or confirm your pages still render the same HTML. That is the part you pay people for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migrate to Nuxt 4 now or wait for Nuxt 5?
&lt;/h2&gt;

&lt;p&gt;There is a serious argument for waiting. TuxCare, which sells extended support for Nuxt 3, &lt;a href="https://tuxcare.com/blog/nuxt-3-eol/" rel="noopener noreferrer"&gt;sets it out clearly&lt;/a&gt;: "If you migrate 3 to 4 now, you're committing to another migration cycle once Nuxt 5 ships." Their alternative is to stay on Nuxt 3 with paid security cover, skip Nuxt 4 and jump straight to Nuxt 5 once it stabilises. To be fair to them, the same article says that "for most Nuxt 3 apps, upgrading to Nuxt 4 is the right move."&lt;/p&gt;

&lt;p&gt;We agree with that last sentence. We have a commercial interest too, since we do migrations, so here is the reasoning for you to judge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Nuxt 5 actually stands
&lt;/h3&gt;

&lt;p&gt;The roadmap lists Nuxt 5 as "Q4 2026 (estimated)". As of 11 November 2026 there is no stable, beta or release-candidate version of Nuxt 5 on the &lt;a href="https://github.com/nuxt/nuxt/releases" rel="noopener noreferrer"&gt;releases page&lt;/a&gt;, and the &lt;a href="https://nuxt.com/docs/5.x/getting-started/upgrade" rel="noopener noreferrer"&gt;Nuxt 5 upgrade guide&lt;/a&gt; says it "is still in development". Its biggest change is Nitro v3, which the guide calls "a major rewrite of the server engine". Nitro v3 itself only reached release-candidate stage at the end of October 2026, according to its &lt;a href="https://github.com/nitrojs/nitro/releases" rel="noopener noreferrer"&gt;release history&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An estimate is not a date. Even once Nuxt 5 ships, community modules need time to catch up with a rewritten server engine before a production app can safely move.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Nuxt 4 is not a wasted step
&lt;/h3&gt;

&lt;p&gt;Three facts weaken the "two migrations" objection:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The support window is defined.&lt;/strong&gt; Nuxt commits "to support each major version of Nuxt for a minimum of six months after the release of the next major version". Since Nuxt 5 has not shipped, Nuxt 4 is covered until at least May 2027, and later for every week Nuxt 5 slips.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nuxt 4 is the on-ramp to Nuxt 5.&lt;/strong&gt; The &lt;a href="https://nuxt.com/blog/v4-6" rel="noopener noreferrer"&gt;Nuxt 4.6 release post&lt;/a&gt; says "most of what's new in Nuxt 5 is already in 4.6, either on by default or behind a flag". One setting, &lt;code&gt;future.compatibilityVersion: 5&lt;/code&gt;, switches on the Nuxt 5 defaults inside Nuxt 4 so a team can fix what breaks at its own pace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skipping a major doubles the jump.&lt;/strong&gt; Going from 3 to 5 means absorbing the Nuxt 4 changes and the Nitro rewrite in one release, on an app that has had no security fixes in the meantime. Two small, tested steps carry less risk than one large one.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  A decision by app type
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fanjbd3x7m0g3zhjag2n7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fanjbd3x7m0g3zhjag2n7.png" alt="Decision matrix showing whether to migrate to Nuxt 4 now or wait, for seven situations: public marketing and content sites, SaaS dashboards, apps under compliance audits, apps on Nuxt 2, apps blocked by a module, apps in a change freeze, and apps being retired" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Public marketing or content site:&lt;/strong&gt; migrate now. It is public, the job is small and search traffic depends on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SaaS dashboard holding customer data:&lt;/strong&gt; migrate now. An unpatched server layer in front of user accounts is a poor place to economise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App under SOC 2, ISO 27001 or PCI audit:&lt;/strong&gt; migrate now, or buy extended support to cover the gap until you can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Still on Nuxt 2:&lt;/strong&gt; start now and go straight to Nuxt 4.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blocked by a module with no Nuxt 4 version:&lt;/strong&gt; replace the module if you can. If you truly cannot, wait with extended support and review the position each quarter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In a change freeze or regulated release window:&lt;/strong&gt; wait with extended support, and use the time to prepare in place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Being retired within months:&lt;/strong&gt; do not migrate. Limit its exposure and switch it off on schedule.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  If you do wait, wait with cover
&lt;/h3&gt;

&lt;p&gt;Commercial extended support exists for this case. &lt;a href="https://www.herodevs.com/support/nuxt-nes" rel="noopener noreferrer"&gt;HeroDevs&lt;/a&gt; offers Never-Ending Support covering Nuxt 2.x and 3.x, and TuxCare sells a similar service. Both provide patched builds of the framework. They are a reasonable bridge and a poor destination: you pay a subscription to stand still while your modules keep ageing. Put an end date on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What drives Nuxt migration cost and effort
&lt;/h2&gt;

&lt;p&gt;We are not going to print a price here. Nuxt migration cost depends on the codebase, and any number given without seeing yours would be a guess. What we can tell you is what moves the estimate.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F05i0yv0f3hjq99ro5rky.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F05i0yv0f3hjq99ro5rky.png" alt="Chart of five Nuxt migration effort drivers (number of modules, custom modules and plugins, data fetching complexity, testing needed and SEO verification) rated low, medium or high for a small site, a content platform and a SaaS dashboard" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Module count.&lt;/strong&gt; Every module is a compatibility check. Ten well-maintained official modules are easy. Three abandoned community ones are not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom modules and plugins.&lt;/strong&gt; Code that hooks into Nuxt's internals is the code most likely to break, and no codemod understands it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data fetching complexity.&lt;/strong&gt; The more pages load data in unusual ways, the more of the Nuxt 4 changes need human review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test coverage.&lt;/strong&gt; With good automated tests, most of the checking is automatic. Without them, every page is checked by hand or tests are written first. See our post on &lt;a href="https://netling.digital/blog/non-functional-testing-software-scaling" rel="noopener noreferrer"&gt;non-functional testing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starting point.&lt;/strong&gt; Nuxt 3 to 4 is an upgrade. Nuxt 2 to 4 is a migration to a different version of Vue, and a different size of budget.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How that plays out for three typical apps
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A small marketing site&lt;/strong&gt; has few pages, a handful of official modules and little custom code. The work is mostly mechanical, and more of the effort goes into verifying SEO parity than changing code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A content platform&lt;/strong&gt; (a blog, documentation site or headless storefront) has many templates, a CMS integration and heavy prerendering. Effort concentrates in data fetching and page-by-page verification, because organic traffic is the business. If your content lives in a headless CMS, give the integration its own line in the plan (our &lt;a href="https://netling.digital/hire/strapi-developers" rel="noopener noreferrer"&gt;Strapi developers&lt;/a&gt; cover that side).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A SaaS dashboard&lt;/strong&gt; has authentication, complex state, custom plugins and server routes. SEO matters less behind a login, but custom code and stricter TypeScript checks take longer, and test coverage decides how calm the release is.&lt;/p&gt;

&lt;p&gt;A proper estimate starts with an audit: every module, plugin, store and build customisation, marked as compatible, replaceable or removable. That is the first step of the staged playbook we use when clients &lt;a href="https://netling.digital/hire/nuxt-developers" rel="noopener noreferrer"&gt;hire Nuxt developers&lt;/a&gt; from us: audit what you have, prepare in place, migrate in slices, verify page by page, then cut over and clean up. For wider budgeting context, see our guide to &lt;a href="https://netling.digital/blog/custom-web-application-development-cost-2026" rel="noopener noreferrer"&gt;custom web application development cost&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping your search rankings through the move
&lt;/h2&gt;

&lt;p&gt;A framework upgrade should be invisible to Google: same URLs, same content, same or better speed. Rankings are lost when something small changes unnoticed across hundreds of pages, so we compare old and new, page by page, on five points.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7vn54nd24amy8kzzdn6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn7vn54nd24amy8kzzdn6.png" alt="Flat illustration of a Nuxt migration SEO checklist with five checks: rendered HTML, redirects, metadata, structured data and Core Web Vitals" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rendered HTML parity.&lt;/strong&gt; The HTML the server sends must contain the same headings, copy and links as before. Google's &lt;a href="https://developers.google.com/search/docs/crawling-indexing/javascript/javascript-seo-basics" rel="noopener noreferrer"&gt;JavaScript SEO guidance&lt;/a&gt; notes that server-side or pre-rendering "is still a great idea because it makes your website faster for users and crawlers".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redirects.&lt;/strong&gt; Ideally no URL changes at all. If any do, Google's &lt;a href="https://developers.google.com/search/docs/crawling-indexing/site-move-with-url-changes" rel="noopener noreferrer"&gt;site move documentation&lt;/a&gt; recommends mapping every old URL to its new one with permanent server-side redirects, and keeping them "for as long as possible, generally at least 1 year".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metadata.&lt;/strong&gt; Titles, descriptions, canonical tags and hreflang come from the library that changed in Nuxt 4. Compare them across every route.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured data.&lt;/strong&gt; JSON-LD for articles, products, FAQs and breadcrumbs is easy to drop silently. Validate it before and after.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Core Web Vitals.&lt;/strong&gt; Per &lt;a href="https://web.dev/articles/vitals" rel="noopener noreferrer"&gt;web.dev&lt;/a&gt;, a good page has a Largest Contentful Paint within 2.5 seconds, Interaction to Next Paint of 200 milliseconds or less and Cumulative Layout Shift of 0.1 or less, measured at the 75th percentile of page loads. Record your numbers before the migration so you can prove they held.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After launch, watch Search Console and your server error rates for a few weeks. This verification stage is where a specialist &lt;a href="https://netling.digital/hire/nuxt-developers" rel="noopener noreferrer"&gt;Nuxt development agency&lt;/a&gt; earns its fee. The upgrade commands are public. The discipline of checking every template is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Still on Nuxt 2? The longer path
&lt;/h2&gt;

&lt;p&gt;Nuxt 2 &lt;a href="https://nuxt.com/blog/nuxt2-eol" rel="noopener noreferrer"&gt;reached end of life on 30 June 2024&lt;/a&gt;, so these apps have now been without upstream security fixes for more than two years. The path is longer because Nuxt 2 runs on Vue 2, and Nuxt 3 and 4 run on Vue 3. Three pieces of work dominate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vuex to Pinia.&lt;/strong&gt; State management moves to Pinia, the store Vue now recommends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Options API to Composition API.&lt;/strong&gt; Not every component has to be rewritten, but mixins and anything built on Nuxt 2-only features do.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modules and build setup.&lt;/strong&gt; Nuxt 2 modules have to be replaced with versions built for Nuxt 3 and later, some have no direct successor, and the default build tool changes from webpack to Vite.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nuxt Bridge, which the Nuxt docs describe as "a compatibility layer that allows you to use Nuxt 3+ features in Nuxt 2 with an opt-in mechanism", can shorten the path for large apps. For small ones it is often quicker to skip it.&lt;/p&gt;

&lt;p&gt;Do not migrate to Nuxt 3 on the way. It is end of life too. Go straight to Nuxt 4, in slices, with old and new running side by side behind a proxy so releases continue. If your app is plain Vue 2 with Vuex rather than Nuxt, the same staged approach applies, and our &lt;a href="https://netling.digital/hire/vue-developers" rel="noopener noreferrer"&gt;Vue.js developers&lt;/a&gt; handle those upgrades. Agencies with client sites on old versions can run this under their own brand through our &lt;a href="https://netling.digital/services/white-label-web-development" rel="noopener noreferrer"&gt;white-label web development&lt;/a&gt; service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Nuxt 3 still supported?
&lt;/h3&gt;

&lt;p&gt;No. Nuxt 3 reached end of life on 31 July 2026 and no longer receives security or bug fixes from the Nuxt team. Nuxt 4 is the only supported major version.&lt;/p&gt;

&lt;h3&gt;
  
  
  When will Nuxt 5 be released?
&lt;/h3&gt;

&lt;p&gt;The official roadmap lists Nuxt 5 as "Q4 2026 (estimated)". As of 11 November 2026 it has not been released, and its upgrade guide describes it as still in development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should I skip Nuxt 4 and go straight to Nuxt 5?
&lt;/h3&gt;

&lt;p&gt;For most apps, no. Nuxt 4 is supported for at least six months after Nuxt 5 ships, and it lets you switch on Nuxt 5 behaviour early with a compatibility flag. Skipping it means running unpatched software until Nuxt 5 and its modules are stable.&lt;/p&gt;

&lt;h3&gt;
  
  
  How hard is it to upgrade Nuxt 3 to Nuxt 4?
&lt;/h3&gt;

&lt;p&gt;For most apps it is a modest upgrade. The official codemod handles the mechanical changes. Module count, custom code and test coverage decide the rest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I migrate from Nuxt 2 directly to Nuxt 4?
&lt;/h3&gt;

&lt;p&gt;Yes, and you should, since Nuxt 3 is also end of life. It is a larger project because it includes the move from Vue 2 to Vue 3, Vuex to Pinia and a new build setup, so it is best done in stages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;The Nuxt 3 end of life is not an emergency, but it should not be ignored. For most teams the sensible move is to upgrade to Nuxt 4 now while the step is small, switch on the Nuxt 5 compatibility flag when you are ready, and take Nuxt 5 as a routine upgrade once it and your modules have settled. If you have to wait, do it with extended support and a date in the calendar.&lt;/p&gt;

&lt;p&gt;Our own website runs on Nuxt 4, and migrations are the most common reason teams &lt;a href="https://netling.digital/hire/nuxt-developers" rel="noopener noreferrer"&gt;hire Nuxt developers&lt;/a&gt; from us. If you want a written audit and a staged plan before you commit a budget, &lt;a href="https://netling.digital/contact" rel="noopener noreferrer"&gt;tell us about your app&lt;/a&gt; or &lt;a href="https://netling.digital/briefings/new" rel="noopener noreferrer"&gt;send us a project brief&lt;/a&gt;. To hand over upgrades for good, our &lt;a href="https://netling.digital/services/support" rel="noopener noreferrer"&gt;Support service&lt;/a&gt; covers dependency updates, monitoring and fixes for live apps.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://netling.digital/blog/nuxt-3-end-of-life-migrate-to-nuxt-4" rel="noopener noreferrer"&gt;netling.digital&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nuxt</category>
      <category>vue</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>PHP2Shell and PHP 8.2 End of Life: What to Do With Your Client WordPress Sites Before 2027</title>
      <dc:creator>Dipesh Batheja</dc:creator>
      <pubDate>Wed, 11 Nov 2026 12:52:57 +0000</pubDate>
      <link>https://dev.to/dipeshba/php2shell-and-php-82-end-of-life-what-to-do-with-your-client-wordpress-sites-before-2027-3oom</link>
      <guid>https://dev.to/dipeshba/php2shell-and-php-82-end-of-life-what-to-do-with-your-client-wordpress-sites-before-2027-3oom</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafbe2qpf4kw03zoao8gh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fafbe2qpf4kw03zoao8gh.png" alt="Flat illustration of a website window with the PHP logo behind a patched security shield, a calendar showing 31 and an hourglass" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; PHP2Shell is a pair of critical PHP flaws (CVE-2026-109618 and CVE-2026-109619) that are being exploited now. Every WordPress site needs to be on a fixed build today: PHP 8.5.12, 8.4.27, 8.3.36 or 8.2.35, or a patched package from your host. Separately, PHP 8.2 end of life is 31 December 2026, after which it gets no security fixes at all, and several managed hosts remove it earlier in December. Treat both as one job: confirm the patch this week, then move every site you look after to PHP 8.3 at minimum, and ideally 8.4, before the year ends.&lt;/p&gt;

&lt;p&gt;Agencies look after more WordPress sites than they have usually counted in one place, and most business owners have one on hosting someone else chose years ago. This guide covers PHP2Shell for WordPress sites in plain language, what PHP 8.2 end of life changes, how to sort a portfolio of client sites, and a routine for upgrading each one without breaking it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Two deadlines, one job
&lt;/h2&gt;

&lt;p&gt;The first deadline has already passed. On 21 October 2026 the PHP project released emergency security updates and &lt;a href="https://www.php.net/archive/2026.php" rel="noopener noreferrer"&gt;asked all users to update immediately&lt;/a&gt;. Any site still on an older build is exposed today.&lt;/p&gt;

&lt;p&gt;The second deadline is 31 December 2026. The official &lt;a href="https://www.php.net/supported-versions.php" rel="noopener noreferrer"&gt;supported versions page&lt;/a&gt; lists that as the last day of security support for PHP 8.2. The PHP 8.2.35 release note says it plainly: 8.2 "will receive no further security fixes after that date".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsv7vok007s1lrc5u6s4f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsv7vok007s1lrc5u6s4f.png" alt="Timeline of PHP 8.1 to 8.5 support windows showing PHP 8.1 ended on 31 December 2025, PHP 8.2 security fixes ending on 31 December 2026, PHP 8.3 on 31 December 2027, PHP 8.4 on 31 December 2028 and PHP 8.5 on 31 December 2029, with the PHP2Shell fix date of 21 October 2026 and today marked" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Both are solved in the same place, the PHP version on the server, so run them as one project and test each client site once.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP2Shell in plain language
&lt;/h2&gt;

&lt;p&gt;PHP is the programming language WordPress runs on. PHP2Shell is the nickname for two flaws in PHP itself, not in WordPress, a theme or a plugin. They can let an attacker run their own code on the web server without logging in. The PHP security team rated both 9.2 out of 10 on the CVSS v4.0 scale. Security firm &lt;a href="https://patchstack.com/articles/php-major-vulnerability-alert-10-2026/" rel="noopener noreferrer"&gt;Patchstack&lt;/a&gt;, which credits the name to Wiz Research, reports that at least one of the two issues affects every PHP version back to 5.4.&lt;/p&gt;

&lt;p&gt;Because the flaw sits below WordPress, updating WordPress core or plugins does nothing about it. PHP's release notes are blunt: "There are no complete mitigations, updating is the only safe choice."&lt;/p&gt;

&lt;h3&gt;
  
  
  Which PHP versions are fixed
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn1smbilse7sqbjjn7zqz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn1smbilse7sqbjjn7zqz.png" alt="Lookup table of PHP branches and the release that fixes PHP2Shell: 8.5.12, 8.4.27, 8.3.36 and 8.2.35 for supported branches, source-only backports for PHP 8.1, 8.0 and 7.4, and no fix from the PHP project for 7.3 and older" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.5:&lt;/strong&gt; fixed in 8.5.12&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.4:&lt;/strong&gt; fixed in 8.4.27&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.3:&lt;/strong&gt; fixed in 8.3.36&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.2:&lt;/strong&gt; fixed in 8.2.35&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.1, 8.0 and 7.4:&lt;/strong&gt; no official release, only minimal source-code backports for people who build PHP themselves. Some hosts and Linux distributions ship their own patched packages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 7.3 and older:&lt;/strong&gt; nothing from the PHP project.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We checked php.net on 11 November 2026, and these are still the current releases. A related issue, CVE-2026-115560, is waiting for the next regular PHP release. PHP calls the setup it needs unlikely in practice, but the "fixed" version numbers will move again soon. Patching is never done once.&lt;/p&gt;

&lt;h3&gt;
  
  
  What "exploited in the wild" means for an ordinary site
&lt;/h3&gt;

&lt;p&gt;On 26 October 2026 the US cybersecurity agency CISA added both flaws to its &lt;a href="https://www.cisa.gov/known-exploited-vulnerabilities-catalog" rel="noopener noreferrer"&gt;Known Exploited Vulnerabilities catalog&lt;/a&gt;, its list of bugs that attackers are known to be using, and gave US federal agencies until 29 October to deal with them.&lt;/p&gt;

&lt;p&gt;That does not mean somebody has singled out your site. Attacks like this are automated sweeps of the whole internet, and they find a five-page brochure site as easily as a busy store. Being small is no protection.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who actually applies the patch
&lt;/h3&gt;

&lt;p&gt;There is no "update PHP" button in the WordPress dashboard. Who patches depends on the hosting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Managed WordPress hosting:&lt;/strong&gt; the host patches PHP for you. Kinsta, for example, &lt;a href="https://kinsta.com/blog/php2shell-kinsta-wordpress/" rel="noopener noreferrer"&gt;said&lt;/a&gt; its customers "don’t need to install any patches or make changes to their websites" because the fix was applied across its platform. Look for a statement like this from your own host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared hosting with a control panel:&lt;/strong&gt; the host updates PHP, but you usually choose which branch each site uses. On a very old branch, the host may have had nothing to install.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A VPS, cloud server or anything self-managed:&lt;/strong&gt; you, or whoever set the server up, must install the update. If that person has moved on, nobody is doing it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most agencies have all three across their client list.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check a WordPress site's PHP version
&lt;/h2&gt;

&lt;p&gt;WordPress shows the PHP version itself. Log in as an administrator and go to Tools, then Site Health, then the Info tab, and open the Server section. The &lt;a href="https://wordpress.org/documentation/article/site-health-screen/" rel="noopener noreferrer"&gt;Site Health documentation&lt;/a&gt; describes each panel, and the Status tab warns you when the site "is running an outdated version of PHP, which requires an update".&lt;/p&gt;

&lt;h3&gt;
  
  
  Why the exact patch release matters
&lt;/h3&gt;

&lt;p&gt;"PHP 8.2" is not an answer. PHP 8.2.34 is vulnerable and 8.2.35 is fixed, and they look identical in most hosting dashboards. You need the full three-part number.&lt;/p&gt;

&lt;p&gt;There is a catch. Hosts that patch end-of-life branches themselves usually keep the old version number, so a site showing 8.1 or 7.4 may or may not be patched. You cannot tell from the dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  What to ask the host
&lt;/h3&gt;

&lt;p&gt;Send the same three questions for every hosting account and keep the replies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which exact PHP build is this site running, and does it include the fixes for CVE-2026-109618 and CVE-2026-109619?&lt;/li&gt;
&lt;li&gt;On what date was the fix applied, and did it cover staging and inactive environments too?&lt;/li&gt;
&lt;li&gt;On what date will you remove PHP 8.2, and what happens to sites still on it?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  PHP 8.2 end of life: why this is the same story
&lt;/h2&gt;

&lt;p&gt;PHP 8.2 received a proper PHP2Shell fix for one reason: it was still inside its security support window. PHP 8.1 left that window on 31 December 2025, according to PHP's &lt;a href="https://www.php.net/eol.php" rel="noopener noreferrer"&gt;end-of-life list&lt;/a&gt;. Ten months later its users got a source patch and a suggestion to ask their vendor. PHP 8.2 users will be in that position from 1 January 2027.&lt;/p&gt;

&lt;p&gt;OWASP's Top 10 entry on &lt;a href="https://top10.owasp.org/2021/A06_2021-Vulnerable_and_Outdated_Components/" rel="noopener noreferrer"&gt;Vulnerable and Outdated Components&lt;/a&gt; says you are likely vulnerable "if the software is vulnerable, unsupported, or out of date". CISA's &lt;a href="https://www.cisa.gov/news-events/alerts/2026/10/21/critical-vulnerabilities-php-require-immediate-patching" rel="noopener noreferrer"&gt;PHP2Shell alert&lt;/a&gt; went further and advised taking systems offline if they cannot be updated or run PHP 8.1 or earlier. We covered the same pattern for JavaScript frameworks in our post on the &lt;a href="https://netling.digital/blog/nuxt-3-end-of-life-migrate-to-nuxt-4" rel="noopener noreferrer"&gt;Nuxt 3 end of life&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How many WordPress sites are affected
&lt;/h3&gt;

&lt;p&gt;We read the figures behind the WordPress.org &lt;a href="https://wordpress.org/about/stats/" rel="noopener noreferrer"&gt;statistics page&lt;/a&gt; on 11 November 2026:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fguautsevvvt9rjx6y8mh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fguautsevvvt9rjx6y8mh.png" alt="Bar chart of the share of WordPress sites on each PHP version: 6.5% on PHP 8.5, 10.8% on 8.4, 28.0% on 8.3, 22.5% on 8.2, 9.1% on 8.1, 3.3% on 8.0, 14.4% on 7.4 and 5.3% on 7.3 or older" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;45.3%&lt;/strong&gt; of WordPress sites run PHP 8.3 or newer, which keeps security support into 2027 and beyond.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;22.5%&lt;/strong&gt; run PHP 8.2, which loses it on 31 December 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;32.2%&lt;/strong&gt; run PHP 8.1 or older, which is already unsupported. PHP 7.4 alone accounts for 14.4%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Put together, 54.7% of WordPress sites will be on an unsupported PHP version on New Year's Day unless someone moves them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your host may switch before PHP does
&lt;/h3&gt;

&lt;p&gt;Managed hosts do not wait for 31 December. Three published schedules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pressable&lt;/strong&gt; &lt;a href="https://pressable.com/knowledgebase/php-update-faqs/" rel="noopener noreferrer"&gt;retires PHP 8.2 on 8 December 2026&lt;/a&gt; and automatically moves remaining sites to the next PHP version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WP Cloud&lt;/strong&gt; &lt;a href="https://wp.cloud/preparing-for-the-removal-of-php-8-2/" rel="noopener noreferrer"&gt;removes PHP 8.2 on 15 December 2026&lt;/a&gt; at 12:00 UTC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WordPress VIP&lt;/strong&gt; starts &lt;a href="https://customerhub.wpvip.com/lobby/2026/01/21/planning-your-2026-php-8-3-update/" rel="noopener noreferrer"&gt;updating non-production environments to PHP 8.3 on 16 November 2026 and production on 7 December 2026&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An untested switch on the host's timetable, in the busiest retail month of the year, is the outcome to avoid. Find your host's date and work back from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which PHP version to move to
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.3 is the minimum.&lt;/strong&gt; WordPress's own &lt;a href="https://wordpress.org/about/requirements/" rel="noopener noreferrer"&gt;requirements page&lt;/a&gt; recommends "PHP version 8.3 or greater". Security support runs to 31 December 2027, so it buys one year.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.4 is the target.&lt;/strong&gt; Security support runs to 31 December 2028: two quiet years instead of one. The WordPress core team's &lt;a href="https://make.wordpress.org/core/handbook/references/php-compatibility-and-wordpress-versions/" rel="noopener noreferrer"&gt;PHP compatibility table&lt;/a&gt; lists WordPress 7.0 and 7.1 as supporting it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PHP 8.5 is fine for well-kept sites.&lt;/strong&gt; It is covered until 31 December 2029, but only 6.5% of WordPress sites run it so far, so less common plugins have had less real-world use on it. PHP 8.6 is not out yet (the first stable release is planned for 19 November 2026) and is too new for client sites.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What tends to break
&lt;/h3&gt;

&lt;p&gt;A current WordPress release is rarely the problem. The risk is everything added to it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Abandoned plugins.&lt;/strong&gt; Patchstack's &lt;a href="https://patchstack.com/whitepaper/state-of-wordpress-security-in-2026/" rel="noopener noreferrer"&gt;State of WordPress Security in 2026&lt;/a&gt; counted 11,334 new vulnerabilities in the WordPress ecosystem in 2025, 91% of them in plugins, and found that 46% had no fix from the developer in time for public disclosure. A plugin nobody maintains has not been tested on PHP 8.4 either.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Old premium themes.&lt;/strong&gt; Bought once, customised heavily and never updated, because updating would wipe the changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom code.&lt;/strong&gt; Snippets in the theme, a bespoke plugin from a previous developer, or an integration with a booking or payment system.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The size of the jump matters. From 8.2 to 8.3 or 8.4, problems are mostly warnings about outdated code. From 7.4 you cross a major version in which PHP became stricter and removed old features, and that is where white screens come from. If the site no longer has a developer, that is the moment to &lt;a href="https://netling.digital/hire/wordpress-developers" rel="noopener noreferrer"&gt;hire a WordPress developer&lt;/a&gt; to take it over.&lt;/p&gt;

&lt;h2&gt;
  
  
  Triage for a portfolio of client sites
&lt;/h2&gt;

&lt;p&gt;Start with a spreadsheet: one row per site, with the host, who controls the server, the exact PHP version, the WordPress version and whether a staging copy exists. You will reuse this list every year.&lt;/p&gt;

&lt;p&gt;One rule applies to every row: the site must be on a fixed PHP build this week, whatever branch it is on. Then put each site in one of three groups.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1l29rqze9lyk9bxylgbf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1l29rqze9lyk9bxylgbf.png" alt="Flat illustration of client website windows being sorted into three trays: patch now, needs work and retire" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Patch now.&lt;/strong&gt; Healthy sites on current WordPress with maintained plugins and theme. Confirm the fixed build, test on staging and switch to PHP 8.4. Each site is a small job.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Needs work.&lt;/strong&gt; Sites that throw errors on staging, or that are still on 7.4, 8.0 or 8.1 because something broke the last time anyone tried. Get a patched package from the host as a stopgap, then schedule development time to replace the dead plugin, repair the theme or fix the custom code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retire.&lt;/strong&gt; Old campaign microsites, sites for clients who stopped paying, forgotten staging copies and demos. Nobody will fund fixing them, so archive each one as static pages or take it offline. An unpatched site nobody owns puts everything else on the same server at risk.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Within each group, start with stores, membership sites and anything holding personal data, then servers you manage yourself, then sites on a host with a December cut-off.&lt;/p&gt;

&lt;h2&gt;
  
  
  The per-site upgrade routine
&lt;/h2&gt;

&lt;p&gt;For each site in the first two groups, the routine is the same:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Back up.&lt;/strong&gt; Take a full backup of files and database and confirm it restores.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy to staging.&lt;/strong&gt; Use the host's staging feature or a private copy. Never test on the live site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update first.&lt;/strong&gt; Bring WordPress core, plugins and the theme up to date on staging before touching PHP, so you change one thing at a time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check compatibility.&lt;/strong&gt; Check each plugin and the theme for a recent update and stated support for your target PHP version. Have a developer review custom code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch staging and read the error log.&lt;/strong&gt; Turn on &lt;a href="https://developer.wordpress.org/advanced-administration/debug/debug-wordpress/" rel="noopener noreferrer"&gt;WordPress debug logging&lt;/a&gt;, then click through the pages that matter: forms, checkout, login, search and the editor. A page that looks fine can still be logging errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switch live at a quiet time.&lt;/strong&gt; Keep the previous version available as a rollback for a few days.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor.&lt;/strong&gt; Watch the error log, form submissions and orders for a week, then update your spreadsheet.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;On a "needs work" site, step 4 becomes a small development project. Our post on &lt;a href="https://netling.digital/blog/non-functional-testing-software-scaling" rel="noopener noreferrer"&gt;non-functional testing&lt;/a&gt; explains why untested changes carry the risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Talking to clients, and where this fits in a care plan
&lt;/h2&gt;

&lt;p&gt;Clients do not need the CVE numbers. They need three things: a serious flaw was found in the software underneath every WordPress site, theirs has been checked and patched, and its PHP version is being retired in December, so you recommend moving it now. Send that before they read about PHP2Shell elsewhere.&lt;/p&gt;

&lt;p&gt;Be clear about what is included. On a care plan, the patch check and a routine PHP switch should sit inside it. Replacing an abandoned plugin or repairing an old theme is development work, and it is fair to quote for it separately. If the client has no plan, this is an honest moment to offer one.&lt;/p&gt;

&lt;p&gt;PHP retires a branch every December: 8.1 in 2025, 8.2 this year, 8.3 in 2027. A care plan that lists an annual PHP review alongside core, theme and plugin updates turns a yearly scramble into a calendar entry. It is also predictable, recurring work that is easy to hand to a delivery partner, as we explain in our post on &lt;a href="https://netling.digital/blog/white-label-agency-partnership-growth" rel="noopener noreferrer"&gt;white-label partnerships for agencies&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you do not have the hands
&lt;/h3&gt;

&lt;p&gt;Thirty sites, each needing a backup, a staging test and a log review, is real work on top of a full pipeline. It is the maintenance and takeover work our WordPress team does: core, theme and plugin updates, bug fixes and small changes, including for sites another developer built and left behind. Agencies use our &lt;a href="https://netling.digital/hire/wordpress-developers" rel="noopener noreferrer"&gt;white-label WordPress development&lt;/a&gt; for it, with our developers working in your tools, under NDA, and never contacting your clients unless you ask. One-off clean-ups can run on hourly billing, and ongoing care can run on a monthly retainer with timesheets you can bill from. For work beyond WordPress, see our &lt;a href="https://netling.digital/services/white-label-web-development" rel="noopener noreferrer"&gt;white-label web development&lt;/a&gt; service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is PHP2Shell?
&lt;/h3&gt;

&lt;p&gt;PHP2Shell is the nickname for two critical vulnerabilities in PHP, CVE-2026-109618 and CVE-2026-109619, fixed on 21 October 2026. They can let an attacker run code on a web server without logging in, and CISA lists both as actively exploited.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does PHP2Shell affect WordPress sites?
&lt;/h3&gt;

&lt;p&gt;Yes. WordPress runs on PHP, so any WordPress site on an unpatched PHP build is exposed, whatever plugins or theme it uses. Updating WordPress does not fix it. The host, or whoever manages the server, has to update PHP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which PHP version fixes PHP2Shell?
&lt;/h3&gt;

&lt;p&gt;PHP 8.5.12, 8.4.27, 8.3.36 and 8.2.35. PHP 8.1, 8.0 and 7.4 received source-code backports only, so sites on those branches depend on a patched package from their host or Linux distribution. PHP 7.3 and older received nothing from the PHP project.&lt;/p&gt;

&lt;h3&gt;
  
  
  When is PHP 8.2 end of life?
&lt;/h3&gt;

&lt;p&gt;PHP 8.2 security support ends on 31 December 2026, after which it receives no fixes from the PHP project. Some managed WordPress hosts remove it earlier: Pressable on 8 December 2026 and WP Cloud on 15 December 2026.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which PHP version should a WordPress site use now?
&lt;/h3&gt;

&lt;p&gt;PHP 8.3 at minimum, which WordPress itself recommends, and PHP 8.4 for most sites because it has security support until 31 December 2028. Test on a staging copy first, since old plugins, themes and custom code are what usually break.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Confirm every site is on a patched build this week, sort your sites into patch now, needs work and retire, and move the first two groups to PHP 8.3 or 8.4 before your host's December cut-off does it for you.&lt;/p&gt;

&lt;p&gt;If you would rather hand the list to someone, you can &lt;a href="https://netling.digital/hire/wordpress-developers" rel="noopener noreferrer"&gt;hire WordPress developers&lt;/a&gt; from us for a one-off clean-up or an ongoing retainer, under your own brand if you are an agency. &lt;a href="https://netling.digital/contact" rel="noopener noreferrer"&gt;Tell us how many sites you look after&lt;/a&gt; or &lt;a href="https://netling.digital/briefings/new" rel="noopener noreferrer"&gt;send us a brief&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Image credit: the PHP logo in the featured image is by Colin Viebrock, used unmodified under &lt;a href="https://creativecommons.org/licenses/by-sa/4.0/" rel="noopener noreferrer"&gt;CC BY-SA 4.0&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://netling.digital/blog/php2shell-php-8-2-end-of-life-wordpress" rel="noopener noreferrer"&gt;netling.digital&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>php</category>
      <category>security</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
