Back

www.flaming.codes

Beyond Next.js: The State of Full-Stack JavaScript Frameworks in 2025

5/17/2025Updated 6/15/2025
https://www.flaming.codes/posts/beyond-nextjs-state-fullstack-javascript-frameworks-2025

For one, self-hosting Next.js in a traditional enterprise deployment pipeline is a pain. The framework doesn't lend itself to the common build-once-deploy-anywhere pattern. Because it tightly binds the output to environment variables and runtime settings, you often need a separate build per environment—a frustrating constraint for anyone used to promoting artifacts from staging to production with confidence. Then there's the middleware story. Middleware runs in a weird hybrid runtime that supports some Web APIs and a restricted subset of Node.js. This awkward middle ground feels more like an internal tool built to fit Vercel's infrastructure than a broadly useful feature. In fact, much of Next.js seems increasingly shaped by Vercel's hosting model—which is great if you're all-in on their platform, but less so if you're not. From a developer experience standpoint, things aren't much better. The documentation is sprawling, inconsistent, and full of "old vs new" decisions that beginners have to internalize. Should you use the App Router or Pages Router? getServerSideProps or a server component with fetch? When do you use the use client directive? How does caching even work? The answer, often, is "it depends," followed by hours of documentation spelunking. All of this results in a framework that feels overengineered and unnecessarily complex. For newcomers, the learning curve is steep. You don't just learn React—you also have to learn Next.js's routing model, its rendering modes, its proprietary caching behavior, its deployment quirks, and its middleware runtime.

Related Pain Points5

Vendor lock-in with Vercel makes migration to other hosting providers difficult

8

Features work seamlessly on Vercel but become problematic when deployed elsewhere, creating tight coupling to Vercel's infrastructure. Some developers have inherited projects so tightly coupled to Vercel that migrating to other hosting providers like AWS proved nearly impossible, sometimes requiring complete rewrites.

compatibilityNext.jsVercel

Middleware runs in restricted hybrid runtime with limited APIs

7

Next.js middleware executes in a hybrid runtime that supports only a restricted subset of Web APIs and Node.js, preventing direct database connections, file system access, and session management. This awkward middle ground doesn't align with common development patterns.

compatibilityNext.js

Steep learning curve requires mastering multiple Next.js subsystems

6

Learning Next.js requires mastering not just React, but also its routing model, rendering modes, proprietary caching behavior, deployment quirks, and middleware runtime. This multi-layered complexity creates a steep onboarding barrier for newcomers.

docsNext.jsReact

Documentation requires constant reference and is sprawling

6

Next.js documentation has evolved from a quick reference to a sprawling, inconsistent guide that developers must keep open constantly. The docs present many 'old vs new' decisions (App Router vs Pages Router, getServerSideProps vs server components) without clear guidance, requiring extensive time to understand framework decisions.

docsNext.js

Framework perceived as overengineered for complexity added

5

Many developers perceive Next.js as overengineered, adding unnecessary complexity without proportional benefits. The framework's architectural decisions and accumulated features create bloat that doesn't serve most use cases.

architectureNext.js