A fair review · 8 essays
What aged in jQuery
jQuery taught a generation to write for the web, and jQuery 4.0 is a serious modernisation. But the web it was built to tame has changed. Here is what aged — measured, sourced and fair — and what jsKjs does instead.
This series isn't a takedown. jQuery solved real problems — inconsistent DOM APIs, broken event models, painful XHR — so well that browsers adopted its ideas: querySelectorAll, classList, fetch, closest(). jQuery 4.0.0 (January 2026) removed a decade of deprecated APIs and dropped very old browsers.
Some of its foundations, though, were designed for constraints that no longer exist, and some problems it never tried to solve — state, declarative requests, modern motion — became the reason people now load three more libraries next to it. Each essay below names one, explains why it made sense at the time, and shows the jsKjs alternative in code.
The weight of compatibility
jQuery 4.0.0 is 26.8 KB gzipped and still supports IE11.
Read essay 1 →A selector engine the browser already has
jQuery 4 inlines its Sizzle-derived selector engine for custom pseudos like :visible.
Read essay 2 →jqXHR and the almost-promise
jQuery AJAX predates native Promises: jqXHR and $.Deferred became Promises/A+ compliant only in 3.0, and jQuery 4's slim build removes Deferred entirely.
Read essay 3 →Data in the wrong place
Older jQuery kept element data and handlers in a central cache that could leak when nodes were removed outside jQuery.
Read essay 4 →No model, only the DOM
jQuery has no concept of state: the DOM is the model, and every change is manual synchronisation.
Read essay 5 →.animate() stopped at numbers
jQuery .animate() tweens numeric CSS only — no transforms or colours without plugins, two easings without jQuery UI, and a queue model for sequencing.
Read essay 6 →A handler for every endpoint
Every jQuery AJAX interaction needs JavaScript: bind, serialize, request, parse, render, handle errors.
Read essay 7 →Footguns: HTML strings and deep merges
jQuery's HTML-string APIs and deep $.extend led to CVE-2020-11022/11023 (XSS) and CVE-2019-11358 (prototype pollution).
Read essay 8 →