Next.js is infuriating
Logging and observability pain points
- Many agree with the article that just getting logs out of a production Next.js app—especially via middleware—is far harder than in typical back-end frameworks.
- Debate centers on what “production-quality logging” means: some say stdout + a basic logger is fine; others insist it must include telemetry, rotation, structured logs, and integration with systems like Kibana/Datadog.
- Next.js’s answer (OpenTelemetry +
instrumentation.ts) is seen by critics as overkill and “one more heavy layer” when developers just wantlogger.info()to work; defenders argue OTEL is a sensible, vendor-neutral standard for distributed systems. - Several reports say OTEL + Pino in Next is brittle (dependency flags, import order, globals, experimental packages), reinforcing the sense that observability is a “two-problem” situation now.
Middleware, runtimes, and mental model confusion
- A central complaint: Next.js “middleware” doesn’t behave like middleware in Express/Rails/Rack-style stacks. It’s a single edge hook, not a composable chain on the main server.
- Official guidance to “combine multiple middlewares into one file” feels fundamentally wrong to those expecting conventional, pluggable middleware.
- The edge vs Node vs SSR vs client execution model (plus React Server Components, streaming, and caching) is widely described as hard to reason about; people struggle to know where code runs and when.
- Some say the article misunderstands these boundaries; others respond that if a seasoned dev can’t form a clear mental model, that’s a framework design failure, not “user error.”
Complexity, churn, and documentation
- Many recall Next.js (with the Pages Router) as simple and effective; the App Router + RSC era is seen as a turning point into “resume‑driven” over‑engineering.
- Frequent major versions, API shifts, and partially baked features (middleware, app router, RSC) create upgrade fear and make AI-generated examples unreliable.
- Documentation is criticized as high-level and marketing-friendly, but thin on precise execution details, pitfalls, and non‑Vercel deployment nuances.
Vercel, lock-in, and motivations
- Strong sentiment that Next.js’s rough edges (edge-only middleware, lack of simple logging, awkward self-hosting, image stack quirks) funnel teams toward Vercel’s platform.
- Some frame this as deliberate vendor lock-in and “enshittification”; others counter that Vercel legitimately funds OSS and provides good DX, and that self-hosting Next is possible (e.g., via Docker/Kubernetes).
- There’s broader worry that React’s official endorsement of Next has effectively “captured” the React ecosystem for a single commercial actor.
Comparisons and alternatives
- Multiple people state they’ve migrated away from Next to:
- React Router v7 / “framework mode” (ex‑Remix)
- Vite + React + explicit API servers
- Astro (SSG + islands)
- SvelteKit, Nuxt, SolidStart, Hono/HonoX, Fresh (Deno)
- Inertia.js with Laravel/Rails/Adonis, or plain Django/Rails/Laravel + HTMX/Alpine/Datastar
- Many praise these for simpler mental models, explicit server/client separation, or more conventional middleware and logging stories.
Broader ecosystem criticism
- Thread repeatedly zooms out to critique modern JS/TS and “full-stack React” culture: too many layers, fast-breaking APIs, marketing-driven design, and frameworks optimized for e‑commerce/landing pages rather than complex apps.
- Several back-end and veteran web devs say they’re retreating to “boring tech” (Rails, Django, Spring, Phoenix, Go, plain HTML+CSS+minimal JS) for long‑lived, maintainable systems.