Why jQuery $.support Was Deprecated
The jQuery.support object was introduced to promote
feature detection over browser sniffing, but it was ultimately
deprecated because it was designed for jQuery’s internal framework needs
rather than as a stable, general-purpose API for web developers. As web
standards matured and dedicated tools emerged, maintaining
$.support as a public interface created unnecessary
technical debt, leading to its deprecation in jQuery 1.9 and complete
removal from the public API in jQuery 3.0.
Internal Purpose vs. Public Expectations
Introduced in jQuery 1.3, $.support was intended to
replace the fragile $.browser property, which relied on
User-Agent sniffing. The goal was to test whether the current browser
supported specific features (such as standard event handling or CSS
opacity) before jQuery executed code.
However, the properties attached to $.support were
strictly tailored to what jQuery itself required to patch cross-browser
inconsistencies. When developers began relying on $.support
for their own application logic, conflicts arose. Whenever jQuery
updated its internal implementation to drop an old workaround or add a
new one, properties inside $.support would appear, change
behavior, or vanish entirely between releases. This violated semantic
versioning expectations for public APIs and frequently broke third-party
code.
The Rise of Modernizr and Dedicated Feature Detection
The jQuery development team consistently stated that
$.support was never meant to be a full-fledged
feature-detection library for end users. Creating a comprehensive,
reliable suite of feature tests requires significant overhead and
specialized focus.
Dedicated libraries, most notably Modernizr, filled this gap by offering a standardized, fully documented, and robust suite of feature tests specifically built for public consumption. The jQuery team advised developers to use Modernizr or native JavaScript checks rather than piggybacking on jQuery’s volatile internal flags.
Evolution of Web Standards
During the early days of $.support, browsers varied
wildly in how they implemented the DOM and CSS specifications. As major
browser vendors shifted toward evergreen release models and adopted
unified web standards, many of the quirks that $.support
tested for (such as boxModel, checkClone, or
opacity) ceased to be relevant.
By the time jQuery 3.0 was released, the browser landscape had stabilized significantly. The jQuery team moved internal feature tests into private modules to allow the library to evolve freely without exposing internal implementation details to the global scope.