Is Knockout.js EOL? Status, Risks & How to Stay Secure

php2shell patches (CVE-2026-109618 and CVE-2026-109619) for EOL PHP are out now. With sales replies slower than usual due to high demand, the fastest route to patched packages is to buy ELS for Runtimes online (opens in new tab). Read the patch FAQ

Go straight to an AI summary of this blog post instead

  • Summarize this post with Perplexity
  • Summarize this post with Gemini

Key Takeaways

  • Knockout.js has never been officially declared end of life. The project shipped two maintenance releases, v3.5.2 and v3.5.3, in March 2026, after more than six years without one.
  • “Not dead” is not the same as “supported.” There is no LTS, no security SLA, no published EOL schedule, and no published vulnerability-disclosure policy. You cannot plan a patch cadence around a project that has never committed to one.
  • The one CVE filed against Knockout, CVE-2019-14862, is a medium-severity XSS fixed in 3.5.0. Its vulnerable code path only executes on Internet Explorer 7 and older, so on a modern browser fleet it is primarily a scanner, SBOM, and audit problem rather than an active exploitation risk.
  • A maintained successor now exists. TKO, the Knockout 4.x line, reached its first stable release in April 2026 and ships a Knockout-compatible build, but its adoption is still a rounding error next to Knockout 3.x.
  • Realistic options: vendor-backed support, self-managed patching, hardening in place, or a phased migration. A big-bang rewrite is rarely the right first move.

Knockout.js sits in an awkward spot that catches a lot of teams off guard. It has never been declared dead, yet between late 2019 and early 2026 its release activity was almost entirely dormant. Then two new releases landed in March 2026, with no roadmap or announcement behind them. If you run a DNN (formerly DotNetNuke) site or an internal .NET application built around it, that mix of long silence and sudden activity is exactly the problem: you are depending on something you cannot predict.

This article gives you a straight read on Knockout’s status, the version timeline, the risks that actually matter for production systems, and practical paths forward. The honest position up front: the danger here is not a dramatic unpatched library. It is the gap between “still installable” and “predictably maintained”, and that gap is where audit findings accumulate and where teams discover they have no dependable route to a fix.

Is Knockout.js Officially End of Life?

No, not formally. Knockout.js has never been officially declared end of life, and versions 3.5.2 and 3.5.3 both shipped in March 2026. Trusted Types support arrived in 3.5.2 and carries forward into 3.5.3, which is the current release. Descriptions of Knockout as flatly abandoned no longer match its release history.

Many community-maintained JavaScript projects never publish a formal EOL notice at all. There is no upstream commercial vendor and no support contract with an expiration date. What you get instead is a slow fade: fewer Git commits, a growing pile of open issues, longer gaps between releases. Knockout is best described as intermittently maintained rather than dead.

The distinction matters for how you treat it. Formally EOL software has a known cutoff date you can plan against. An intermittently maintained library gives you no such date, which is harder to manage, not easier.

Reality Check: Knockout recorded roughly 158,000 npm downloads in the week ending July 24, 2026. Widely used software with no documented security-response commitment is a difficult risk to carry: teams depend on it, but nobody has promised when, or whether, a vulnerability will be addressed.

Key Knockout.js Milestones and Version Dates

If you came here looking for a clean LTS table with EOL dates, here is the uncomfortable answer: Knockout has never operated an LTS model and has never published end-of-life dates. Every release date below was checked against the official Knockout downloads page.

Version Release Date Support Status and Notes
1.0.0 July 5, 2010 First public release. No EOL declared.
2.3.0 July 9, 2013 Final 2.x release. No EOL declared. Covered by TuxCare ELS.
3.0.0 October 25, 2013 Major release. No EOL declared.
3.2.0 August 12, 2014 Affected by CVE-2019-14862. No EOL declared. Covered by TuxCare ELS. 
3.4.2 March 6, 2017 Last stable release affected by CVE-2019-14862. Covered by TuxCare ELS.
3.5.0 February 21, 2019 First stable release not affected by CVE-2019-14862.
3.5.1 November 5, 2019 Last release before the six-year gap.
3.5.2 March 8, 2026 Added Trusted Types support. Deprecated on npm in favor of 3.5.3.
3.5.3 March 24, 2026 Current release. No EOL declared.

The shape of that timeline is the real story. Nothing shipped between 3.5.1 in November 2019 and 3.5.2 in March 2026, a gap of more than six years. Then two releases arrived in the same month, and 3.5.2 was deprecated on npm barely two weeks later, with a notice stating that it contained breaking changes fixed in 3.5.3. Those regressions included bindings failing entirely when Knockout ran in strict mode.

Two releases after a six-year gap do not establish a predictable security cadence. That is not a criticism of the maintainers, who fixed a long list of real bugs. It is a statement about what production teams can rely on: there is no published commitment to a response time, so there is nothing to plan against.

Watch Out: The six-year gap means you cannot assume the next fix is coming soon, or at all. Treat any Knockout security need as something you may have to resolve yourself.

Risks of Running an Unsupported Knockout.js Version

Intermittent maintenance is not a deadline you can keep pushing. It is a condition you are already in, and it shapes the risk profile of every system running the component, whether or not you have touched the code recently. The risks below are the ones that show up in real incidents and real audits.

The one known CVE, and what it actually affects

One CVE has been filed against Knockout: CVE-2019-14862, a medium-severity cross-site scripting issue with a CVSS 3.1 base score of 6.1, classified under CWE-79. It affects stable releases through 3.4.2 and is not present in 3.5.0 or later.

The mechanism is worth understanding, because it changes what you should do about it. Knockout treated the name attribute specially in its attr binding and passed element names into the DOM through string concatenation. That code path exists only as a workaround for Internet Explorer 6 and 7, and it executes only when Knockout detects an IE version of 7 or below. Knockout maintainers were unable to reproduce the issue in any modern browser, and the vulnerability’s exploit-prediction score has remained below one percent.

So on a current browser fleet, the practical exposure is close to zero. The cost is different in kind: every software composition analysis run, SBOM, and customer security questionnaire will show an unresolved advisory against your version, and “our users do not run Internet Explorer 7” is a compensating-control argument you have to make and document rather than a fix you can point to. The advisory was also referenced in Oracle Critical Patch Updates in July 2020, January 2021, and April 2022, and tracked by Red Hat, so it appears in a lot of downstream inventories.

One correction worth carrying, because it circulates: CVE-2019-14863 is sometimes attributed to Knockout. It is an AngularJS advisory concerning unsanitized xlink:href attributes, and it has nothing to do with Knockout. Knockout has one CVE, not two.

Upgrading is still the right move where you can. The obstacle is rarely technical: Knockout is often embedded in a DNN installation or a vendor-controlled single-page application that the customer cannot easily modify, and no upstream pressure has ever forced the issue.

Audit findings and stalled security reviews

Compliance assessments care less about whether your frontend works than about whether you can show a defined process for finding and fixing vulnerabilities in third-party code. The specifics differ by framework, and it is worth being precise about them. PCI DSS v4.0.1 is the most concrete: it requires an inventory of third-party components, patch timelines for known vulnerabilities, and, under Requirement 12.3.4, a documented review with management sign-off for software that is no longer receiving security fixes. If Knockout renders any part of a payment page, the script inventory and integrity requirements apply on top of that. SOC 2 prescribes no fixed control list; auditors test the vulnerability-management process you claim to operate. The HIPAA Security Rule is risk-analysis based rather than prescriptive, and FedRAMP requires continuous monitoring with defined remediation windows.

Unsupported software does not automatically fail any of these. What it does is generate a finding you then have to answer, and a dependency with no documented security-response process is difficult to defend even when no vulnerability is currently open against it. The same question tends to arrive from customers during procurement, which is where an unanswerable questionnaire item can quietly hold up a contract.

This is the kind of gap that vendor-backed patching for open-source components is built to close. TuxCare’s Endless Lifecycle Support for Knockout.js is one option teams reach for when an upgrade is not on the table.

The surrounding stack usually carries more risk

The published Knockout package declares no runtime dependencies. It is a standalone library, so unlike a sprawling Node or PHP application, it has no deep transitive tree hiding vulnerabilities.

The risk is in what Knockout is bolted to. In older applications it commonly sits alongside jQuery 1.x, Bootstrap 3, RequireJS, and an aging DNN or SharePoint shell. Depending on the versions in use, those components may carry their own known vulnerabilities and their own maintenance constraints. Knockout then becomes the pin that holds the arrangement in place, because upgrading it often means touching everything around it.

That is how one intermittently maintained library turns into a stack-wide constraint.

Your Options When Knockout.js Lacks Predictable Support

You have four realistic moves. Three of them keep you on Knockout and are covered here; the fourth, a phased migration, is the section that follows. The right choice depends on how much you can change the application and how long you need to keep it alive. None of them is “do nothing,” because doing nothing just moves the cost to your next audit or your next incident.

Buy vendor-backed support

The question here is whether you can keep Knockout running safely without touching application code. For most teams stuck inside a vendor CMS, you can, and vendor-backed support is the lowest-friction path.

Extended lifecycle support means a third party takes on the security maintenance the upstream project does not guarantee: monitoring for new vulnerabilities, backporting fixes, and giving you a contractual response timeline. That turns a component with no support commitment into one you can account for in an audit.

Because Knockout declares no runtime dependencies, the coverage question is simpler than it is for most libraries. TuxCare’s Endless Lifecycle Support currently covers Knockout.js versions 2.3.0. 3.2.0 and 3.4.2, delivering CVE fixes through npm from TuxCare-hosted repositories. If you cannot upgrade the application and need a documented source of security fixes, this can support your risk-management and compliance work without an immediate migration.

Self-managed patching

Do you have the in-house JavaScript security expertise to own this? If so, you can pin a known-good version, monitor for new issues, and backport fixes into your own fork.

The trade-off is that you become the maintainer. That means monitoring the NVD, the GitHub Advisory Database, the upstream repository, and downstream vendor advisories for anything touching Knockout or the components around it, then writing and testing patches and carrying that cost indefinitely. It works well for teams with strong frontend security skills and a small, well-understood footprint.

It works badly when the knowledge lives in one engineer’s head. The day they leave, your maintained fork quietly becomes another unmaintained dependency.

Harden and contain in place

Can you reduce the blast radius enough to buy time while planning a real exit? Often yes, and this is the most underused option.

In practice: where compatibility allows, upgrade to 3.5.3, the current release, which is not affected by CVE-2019-14862 and carries the project’s latest fixes. Then implement a restrictive Content Security Policy, and consider a web application firewall as an additional detection and filtering layer. Neither control substitutes for patching a vulnerable library, but together they meaningfully shrink the attack surface while you decide what comes next.

Expert Tip: Trusted Types support arrived in Knockout 3.5.2 and carries into 3.5.3, which creates a policy named knockout for its internal operations. If you set require-trusted-types-for ‘script’ in your CSP, Knockout works with it automatically — but if you also use the trusted-types directive as an allowlist, include Knockout in it. Otherwise, the policy silently fails to register, and Knockout’s HTML handling breaks under enforcement. Trusted Types reached cross-browser availability in February 2026, so test against older clients. It reduces exposure to DOM-based XSS sinks; it does not eliminate every form of XSS.

Planning a Long-Term Knockout.js Exit Strategy

This is a planning exercise, not a migration tutorial. The goal is sequencing decisions rather than writing migration code, and it is the same across every approach: avoid an unnecessarily large big-bang rewrite, which concentrates delivery risk and delays every incremental security improvement behind one enormous milestone.

Pick the target and the interop model

Which framework do you move to, and how will old and new code coexist during the transition? There are two broad answers, and the newer one deserves a look before you commit to a rewrite.

The first is TKO, the official Knockout 4.x line. It reached its first stable release in April 2026 and publishes a deliberately migration-friendly Knockout-compatible build alongside a modular, TSX-oriented one, plus a documented 3.x-to-4.x upgrade path. For a team that wants to stay in the Knockout programming model, that is the shortest route to actively maintained code. The caveat is adoption: TKO’s compatibility build is drawing on the order of a hundred npm downloads a week against Knockout’s six figures, so validate it against your own test suite and treat it as a small project rather than an established platform.

The second is a mainstream framework. Knockout binds to specific DOM nodes, which helps here: you can often mount React, Vue, or Svelte components inside an existing Knockout page and run old and new side by side, provided each framework owns a clearly separated portion of the DOM. Choose the target based on your team’s existing skills and the hiring market, not on benchmarks. The interop boundary, where Knockout hands a chunk of the DOM to the new framework, is the part to design carefully; a messy boundary is what causes these migrations to stall for months.

Sequence with the strangler-fig pattern

The strangler-fig pattern replaces selected parts of a system incrementally, route by route or feature by feature, while the remaining legacy application keeps running. Start with the highest-churn or highest-risk slices: the ones you touch often, or the ones that handle sensitive input. That front-loads the value, because you are de-risking the code that changes most often.

Low-traffic, stable screens can stay on Knockout the longest, and some may never be worth migrating.

Instrument and measure the exit

Define “done” in numbers before you start: percentage of bindings migrated, number of Knockout-dependent routes remaining, bundle size, and CVE exposure across the frontend stack. Use feature flags to ship migrated slices behind a toggle, and run a dependency scanner on every build so you can watch the risk count drop.

Pro Tip: Put a Knockout line item in your dependency scanner’s report and graph it month over month. A migration that is reportedly going well but whose Knockout usage never drops is not going well, and the graph makes that impossible to ignore.

Keep Your Knockout.js Apps Secure with TuxCare

Knockout is not dead, but planning around a project with no published schedule and no security SLA leaves you carrying a risk you cannot size. Whether you keep it running or plan your way off it, the open question is who owns the security response in the meantime.

If you cannot rewrite right now, vendor-backed support can provide ongoing Knockout.js security fixes and the documentation an assessor will ask for, without forcing an immediate migration. TuxCare’s Endless Lifecycle Support covers Knockout.js versions 2.3.0, 3.2.0 and 3.4.2, with CVE fixes delivered through npm, which buys you room to exit on your own schedule rather than in the middle of an incident.

FAQs

Is Knockout.js still safe to use in production in 2026?

It can be, once the application has been assessed and appropriately secured. Version 3.5.3 is current and is not affected by CVE-2019-14862, but Knockout publishes no security SLA and no predictable release cadence. Treat it as an explicitly managed dependency rather than a default choice for new development.

How do I know which version of Knockout.js my application is running?

Check ko.version in your browser console, or run npm ls knockout if it is an npm dependency. For bundled platforms such as DNN, inspect the Knockout file header or your package manifest directly, since the library is often shipped with the platform rather than installed.

Will modern browsers stop supporting Knockout.js?

There is no announced browser cutoff, and current browsers run Knockout without issue, since it is plain JavaScript. Over a longer horizon, changes to browser APIs or stricter default security policies could create compatibility problems for old applications. The nearer-term risk is the library and its surrounding stack aging without patches, not browsers dropping support.

Can Knockout.js coexist with a modern framework during migration?

Usually, yes. Because Knockout binds to specific DOM nodes, you can mount React, Vue, or Svelte components alongside it and migrate one route or feature at a time, as long as each framework owns a clearly separated part of the DOM.

Does Knockout.js have known CVEs?

One: CVE-2019-14862, a medium-severity cross-site scripting vulnerability affecting stable releases through 3.4.2. Version 3.5.0 and later are not affected. CVE-2019-14863 is occasionally attributed to Knockout, but it is an AngularJS advisory.

Summary
Is Knockout.js EOL? Status, Risks & How to Stay Secure
Article Name
Is Knockout.js EOL? Status, Risks & How to Stay Secure
Description
Knockout.js was never declared end of life, and it shipped two releases in March 2026. Here are the real risks, and four ways to keep it secure.
Author
Publisher Name
TuxCare
Publisher Logo

Join 4,500+ Linux & Open Source Professionals!

2x a month. No spam.

Table of Contents
Get the open-source security answers you need

Join 4,500+ Linux & Open Source Professionals!

2x a month. No spam.