Skip to main content

Which Categories Have the Most Package Churn?

·PkgPulse Team

TL;DR

CSS tooling and build tools have the highest churn rates in the JavaScript ecosystem — almost every major category has been disrupted 2-3 times in the past 5 years. State management and validation have also seen massive churn. The low-churn categories: HTTP clients (stable incumbents), testing (Vitest consolidating), and utility libraries (lodash-level inertia). High churn means you should look at a category's consolidation trajectory before committing to a package.

Key Takeaways

  • CSS tooling: highest churn — styled-components → emotion → Tailwind → Panda CSS
  • Build tools: high churn — webpack → Rollup → esbuild → Vite → Rspack/Rolldown
  • State management: high churn — Redux → MobX → Recoil → Zustand/Jotai
  • HTTP clients: low churn — axios dominant for 10+ years, won't die easily
  • High churn categories signal: wait 6-12 months before committing to a new package

High-Churn Categories

CSS Tooling — Extreme Churn

# History of CSS-in-JS churn:
# 2016: styled-components launched → dominated React styling
# 2018: emotion emerged → similar API, better performance
# 2019: Tailwind CSS launched → completely different paradigm
# 2021: Stitches launched → better TS support than styled-components
# 2022: Tailwind overtook CSS-in-JS in new projects
# 2023: RSC broke CSS-in-JS → styled-components/emotion don't work in RSC
# 2023: Panda CSS → CSS-in-JS that works in RSC (build-time)
# 2024: StyleX (Meta) → zero-runtime CSS-in-JS alternative
# 2026: Tailwind v4 (Rust-based) → dominant, but Panda CSS growing

# Currently declining:
# styled-components: -40% YoY
# emotion: -35% YoY
# Stitches: stagnant (maintainer moved on)

# Growing:
# Tailwind CSS: +25% YoY
# Panda CSS: +340% YoY (from smaller base)
# UnoCSS: +120% YoY

# Prediction: CSS tooling will churn again when:
# - Web standard (CSS @scope, @layer) makes frameworks less necessary
# - Next major paradigm shift after RSC stabilizes

Build Tools — High Churn

# Build tool churn history:
# 2013: Grunt / Gulp → task runners
# 2014: Webpack → first bundler everyone used
# 2017: Parcel → zero-config alternative
# 2018: Rollup → tree-shaking pioneer
# 2020: Snowpack → ESM-native dev server
# 2020: esbuild → 100x faster, Go-based
# 2021: Vite → ESM dev server + Rollup for production
# 2022: Turbopack (Next.js) → Rust-based for Next.js
# 2023: Rspack → Rust-based Webpack replacement
# 2024: Rolldown → Rust-based Rollup replacement (Vite's future core)
# 2026: Vite (using Rolldown) + Rspack duopoly forming

# What's stable:
# Vite: has won for new projects
# Rspack: has won for Webpack migrations
# Webpack: still huge install base, not dying

# Pattern: churn happens when:
# 1. A 10x performance improvement is achievable (Rust > JS)
# 2. A paradigm shift occurs (ESM native > bundled)
# 3. Platform requirements change (Edge runtime, RSC)

State Management — High Churn

# State management churn history:
# 2015: Flux architecture → too complex
# 2015: Redux → dominant, battle-tested
# 2017: MobX → OOP reactive state
# 2019: Context API → React built-in, "Redux killer" (wasn't)
# 2019: Recoil (Facebook) → atomic state
# 2021: Zustand → simple, no boilerplate
# 2021: Jotai → atomic, Recoil replacement
# 2021: Valtio → proxy-based, automatic subscriptions
# 2022: XState v5 → state machines for complex flows
# 2023: TanStack Store → new from TanStack team
# 2024: nanostores → framework-agnostic atomic state

# Current landscape:
# Redux Toolkit: still dominant in enterprise
# Zustand: growing fast, winning new projects
# Jotai: stable, well-liked
# MobX: declining but stable base
# Recoil: Facebook deprioritized, slowly dying

# Why churn happens here:
# No "right" way to manage state
# Each new library is 10-50% simpler than its predecessor
# Churn will continue as RSC changes what "client state" means

Low-Churn Categories

HTTP Clients — Stable

# HTTP client landscape is remarkably stable:
# 2015: request → dominant
# 2015: axios → slowly replaced request
# 2018: node-fetch → lightweight for simple use
# 2023: native fetch built into Node.js

# What happened: native fetch absorbed the new project use case
# axios: still 35M/week downloads, not dying
# ky: growing as the "modern axios" for fetch-based clients
# But no massive upheaval — the category is solved

# Why low churn:
# "Make HTTP request" is a well-defined problem
# The APIs aren't changing radically
# Axios works fine; no 10x improvement available
# Native fetch reduced pressure to find alternatives

Testing Frameworks — Consolidating

# Testing churn history:
# 2014: Mocha + Chai + Sinon → the "build your own" era
# 2014: Jasmine → BDD-style testing
# 2016: Jest → batteries-included, from Facebook
# 2020: Testing Library → behavior-first testing
# 2021: Vitest → Vite-native, ESM-first, Jest-compatible

# Current state: consolidating around Vitest + Testing Library
# Jest: massive install base, not dying but growth slowing
# Vitest: taking all new Vite projects
# Playwright / Cypress: E2E duopoly (Playwright growing)
# Mocha/Jasmine: declining legacy

# Why lower churn now:
# Vitest solved the "Jest is slow on ESM projects" problem
# Testing Library solved the "test implementation not behavior" problem
# No obvious next disruption coming

Utility Libraries — Very Low Churn

# Lodash launched in 2012 and is still one of the most downloaded packages
# Why:
# - Feature-complete: does exactly what utility libraries need to do
# - Breaking change free: v4 API has been stable since 2016
# - Every project that uses it: migrating away requires active effort
# - The utility being replaced exists in lodash "forever"

# What IS slowly eating lodash's lunch:
# - Native JS (Array.flat, Object.entries, optional chaining)
# - Smaller specific-function alternatives
# But lodash itself: stable at 28M+ weekly downloads

# Other stable utility categories:
# - String utilities (case-changing)
# - Number formatting
# - Date parsing (day.js/date-fns duopoly)
# These are "solved" domains with stable APIs

Reading Churn as a Buying Signal

How to use category churn data when evaluating packages:

High churn category → caution:
→ Ask: Is this category still in flux?
→ Ask: Is there a "Vite moment" coming that will displace this?
→ Strategy: Choose the current clear winner, not an aspirational alternative
→ Or: Wait for consolidation if you're not locked in yet

Medium churn category → normal evaluation:
→ Standard health score check
→ Compare top 2-3 alternatives
→ Choose the one with best trajectory, not just best features today

Low churn category → stable:
→ Incumbent is likely fine
→ Only switch if a 10x improvement package exists
→ Don't fix what isn't broken

Current status:
→ CSS tooling: high churn, Tailwind has won but Panda CSS growing
→ Build tools: consolidating, Vite won for new, Rspack for migrations
→ State management: consolidating, Zustand winning new projects
→ Testing: consolidating, Vitest winning
→ HTTP: stable
→ ORM: churning (Prisma vs Drizzle)
→ Auth: churning (Clerk vs Auth.js vs Lucia)
→ AI tooling: early high churn (Vercel AI SDK winning)

The Consolidation Curve

How npm categories evolve over time:

Phase 1: Proliferation
→ Problem recognized
→ 5-15 packages emerge trying to solve it
→ No clear winner
→ Example: CSS-in-JS 2016-2019

Phase 2: Early consolidation
→ 1-3 packages emerge as clear leaders
→ Smaller packages lose momentum
→ Example: CSS-in-JS 2019-2021 (styled-components + emotion leading)

Phase 3: Paradigm shift
→ External factor changes the rules (RSC broke CSS-in-JS)
→ Or a dramatically better approach emerges (Vite vs webpack)
→ Previous leaders disrupted
→ Example: CSS-in-JS 2022-2024 (Tailwind disruption)

Phase 4: New consolidation
→ New winner emerges for the new paradigm
→ Previous winner still has install base (legacy)
→ Example: CSS 2024+ (Tailwind dominant)

Phase 5: Stability
→ Category solved
→ Leader has high lock-in
→ New entrants can't disrupt easily
→ Example: lodash, semver

Reading the phase:
→ Buy in Phase 4 or 5 (winner is clear, risk is low)
→ Be careful in Phase 1-3 (you might bet on the wrong horse)

Track package health, download trends, and category dynamics at PkgPulse.

Comments

Stay Updated

Get the latest package insights, npm trends, and tooling tips delivered to your inbox.