I just got small online conversation about jQuery, hahaha.
Every year, some developer discovers that jQuery still maintained and yet it is still installed on 73.5% of websites and immediately rushes to write a blog post about how “shocking” this is. The comments fill up with people acting like they’ve discovered some dark secret of the web.
Here’s the reality check: jQuery isn’t competing with React, Vue, or Angular anymore. It stopped competing years ago. And that’s exactly why it’s not going anywhere.
The False Competition
Let me clear something up right away - nobody is choosing between jQuery and React for their new SPA project in 2025. That’s not how this works. The frameworks won the “build complex applications” war years ago, and jQuery never wanted to fight that battle anyway.
The real question isn’t “Should I use jQuery instead of React?” It’s “Should I add React to this existing thing that already works?”
Where jQuery Actually Lives (Spoiler: It’s Everywhere)
The WordPress Reality
WordPress powers 43.4% of all websites. WordPress themes and plugins are built with jQuery. When you need to add a carousel to your blog or make your contact form a bit fancier, you’re not going to rewrite the entire site in Next.js.
// This is reality for millions of developers
$('.menu-toggle').click(function() {
$('.mobile-menu').slideToggle();
});
Is this the most cutting-edge code? No. Does it work perfectly and require zero build process? Yes.
The “Sprinkle of JavaScript” Problem
Most websites aren’t applications. They’re content sites that need tiny bits of interactivity:
- Image galleries
- Form validation
- Modal popups
- Smooth scrolling
- Tab switching
For these use cases, importing React is like using a sledgehammer to hang a picture frame.
<!-- This is what most websites actually look like -->
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
</head>
<body>
<!-- Your static HTML content -->
<script>
$('.gallery img').click(function() {
// Show lightbox or whatever
});
</script>
</body>
</html>
The Maintenance Nightmare You’re Avoiding
Here’s what nobody talks about: maintaining JavaScript build pipelines. Every year, something breaks:
- Node version updates
- Webpack configs become obsolete
- Dependencies have security vulnerabilities
- Build tools get deprecated
Meanwhile, that jQuery code from 2018? Still works exactly the same. No updates needed.
The Bundle Size Reality Check
“But jQuery is 30KB!” Yeah, and your hero image is 2MB. Let’s get some perspective here.
# Things that are bigger than jQuery:
Your hero image: 2MB
Your custom font files: 150KB
Your CSS framework: 50KB
jQuery: 30KB (gzipped)
Your favicon: Sometimes 20KB+
If 30KB is breaking your performance budget, you need to audit your images, not your JavaScript libraries.
The Unsung Hero of Modern JavaScript
Before we talk about where jQuery fits today, let’s give credit where it’s due. jQuery didn’t just solve DOM manipulation problems - it fundamentally shaped what JavaScript became.
The Dark Ages (Pre-jQuery)
If you are already dive into web dev from 2005 you know that cross-browser JavaScript was a nightmare. Want to add an event listener? Better check if it’s IE or everyone else:
// The horror of pre-jQuery JavaScript
if (element.addEventListener) {
element.addEventListener('click', handler, false);
} else if (element.attachEvent) {
element.attachEvent('onclick', handler);
} else {
element.onclick = handler;
}
CSS selectors in JavaScript? Forget about it. AJAX? Hope you enjoy writing XMLHttpRequest boilerplate for every browser.
jQuery’s Revolutionary Impact
Then John Resig dropped jQuery in 2006 and suddenly this became possible:
// Revolutionary for its time
$('#element').click(handler);
$('.class-name').fadeIn();
$.ajax('/api/data').done(function(data) {
$('.results').html(data);
});
This wasn’t just convenient - it was unthinkable before jQuery. The library didn’t just abstract browser differences; it introduced concepts that are now fundamental to how we think about JavaScript:
- CSS selector-based DOM queries (now native
querySelector) - Chainable method calls (now everywhere in JS)
- Implicit iteration over collections
- Promise-like patterns for async operations
The DNA of Modern JavaScript
Look at modern JavaScript APIs and you’ll see jQuery’s fingerprints everywhere:
// jQuery's influence on native JavaScript
document.querySelector('#element') // jQuery's $() concept
document.querySelectorAll('.class') // jQuery's CSS selectors
fetch('/api').then(data => {}) // jQuery's AJAX patterns
[1,2,3].map().filter().reduce() // jQuery's chaining concept
Even React’s JSX syntax owes a debt to jQuery’s “select and manipulate” philosophy, just applied to virtual DOM instead of real DOM.
Where jQuery Still Fits Today
Understanding this history helps explain why jQuery persists. It’s not just legacy code - it’s the foundation that modern JavaScript was built on. And for many use cases, going back to the foundation still makes perfect sense.
Backend Developers Who Occasionally Touch Frontend
Not everyone is a frontend specialist. Sometimes you’re a Django/Rails/Laravel developer who needs to add some client-side validation. jQuery’s syntax is immediately understandable because it established the patterns everyone learned:
// This makes sense to anyone who learned web development
$('#contact-form').submit(function(e) {
if ($('#email').val() === '') {
alert('Please enter an email');
e.preventDefault();
}
});
Agency and Freelance Work
When you’re building 20 different client websites a year, you reach for the tool that helped establish modern web development patterns. jQuery works everywhere because it was designed to work everywhere from day one.
The Legacy That’s Not Really Legacy
Here’s the thing about jQuery “legacy” code - much of it was written using patterns that jQuery pioneered and that are still valid today. When people call jQuery code “outdated,” they’re often just seeing the foundation that everything else was built on.
The Things jQuery Can’t Do (And Shouldn’t Try)
Let’s be clear about jQuery’s limitations:
Complex State Management
// This gets messy fast
let userState = {};
$('.user-name').text(userState.name);
$('.user-email').text(userState.email);
// Now update this in 12 different places...
Component Reusability
You can’t easily create reusable UI components with jQuery. Every implementation is its own snowflake.
Large Team Development
Without proper structure, jQuery codebases become spaghetti code that’s impossible to maintain across large teams.
Modern Development Workflow
No hot reloading, no component dev tools, no TypeScript integration out of the box.
The Modern jQuery Approach
If you’re working with jQuery in 2025, here’s how to do it right:
Keep It Simple and Focused
// Good: Simple, focused functionality
$('.accordion-header').click(function() {
$(this).next('.accordion-content').slideToggle();
});
// Bad: Trying to build an entire app
// (Don't do this)
Use It Alongside Modern Tools
// Perfectly fine to mix approaches
import { createStore } from 'some-state-library';
const store = createStore();
$('.update-button').click(function() {
store.dispatch({ type: 'INCREMENT' });
$(this).text(`Count: ${store.getState().count}`);
});
Know When to Stop
If you find yourself writing more than 200 lines of jQuery for a single feature, you probably need a proper framework.
The Uncomfortable Truth
Here’s what the framework evangelists don’t want to admit: most websites don’t need the complexity of modern JavaScript frameworks. They need a few interactive elements sprinkled onto otherwise static content.
jQuery is perfect for this. It’s the PHP of JavaScript libraries - not the most elegant, not the most modern, but it gets the job done reliably with minimal fuss.
The Bottom Line
jQuery isn’t dead because it’s not trying to be React. It’s trying to be jQuery - a simple, reliable way to manipulate the DOM without setting up a build process or learning component lifecycles.
Will you use jQuery for your next big SPA? No, and you shouldn’t. Will you use it to add a mobile menu toggle to a WordPress site? Probably, and that’s perfectly fine.
The web is big enough for both jQuery and modern frameworks. They solve different problems for different people in different contexts.
Now if you’ll excuse me, I need to go add $(document).ready() to yet another client project, and I’m not apologizing for it.