Dependency management fatigue, or why I ditched React for Go+HTMX+Templ

React, NPM, and Dependency Fatigue

  • Many commenters resonate with “dependency management fatigue” in the JS/React ecosystem: constant minor/major bumps, peer-dependency conflicts, and tooling churn (webpack → Vite, CJS → ESM, eslint config changes, etc.).
  • People note that even “simple” frontends quickly accrete routers, state managers, query clients, form libs, CSS systems, and build tooling, each with its own breaking changes.
  • Some say things are better than ~10 years ago, but still feel like “climbing out of hell a few circles.”

Is React Itself the Problem?

  • One camp: React core is small, relatively stable, and not the main issue; the real problem is the surrounding culture of adding many third‑party packages and updating them aggressively.
  • Others argue React’s “just a library” positioning forces you into the wider NPM ecosystem, unlike batteries‑included frameworks (Rails, Angular, Next) that centralize decisions and updates.
  • There’s debate over how often React and major React libs truly introduce “Python 2→3 scale” breaks; some report few issues, others describe constant migration work.

Alternatives: HTMX, Go, Rust, Rails, etc.

  • Many share positive experiences replacing SPAs with:
    • Go + HTMX + templ (or Go templates),
    • Rust (Actix/Axum) + Tera/Askama/Maud + HTMX,
    • Django/Rails/Laravel + HTMX/Hotwire/Alpine,
    • PHP APIs + HTMX, or Elm/ClojureScript on the front.
  • Claimed benefits: fewer dependencies, strong standard libraries, stable APIs, SSR by default, simpler mental model (URLs and HTML as the main state), single-binary deployment in some stacks.
  • Some emphasize that learning a stable stack deeply over years is only possible when churn is low.

HTMX and SSR Tradeoffs

  • Supporters say HTMX/SSR collapses an entire SPA layer (client routing, heavy state), leverages mature server frameworks for routing/auth, and can still handle moderately interactive UIs.
  • Skeptics argue complexity is merely shifted: templates get hairy, complex widgets still need JS, and HTMX itself has versions and migration guides.
  • Consensus: HTMX shines for “normal” apps and internal tools; highly interactive apps (e.g., spreadsheet‑like UIs, map canvases) still favor SPA-style frameworks.

Versioning, Security, and Process

  • Some advocate pinning deps and only upgrading for real security issues or needed features; others warn that deferring upgrades leads to painful multi‑year jumps.
  • There’s tension between wanting API evolution and valuing long‑term backwards compatibility; several contrast JS culture with ecosystems that treat breaking changes as a last resort.
  • Many conclude the root solution is cultural: add fewer deps, vet them carefully, and accept that every dependency is long‑term maintenance cost.