Comment by esperent
3 days ago
Next.js:
- so many rendering modes - SSG, SSR, ISR, streaming SSR, PPR, client and server components.
- de facto Vercel lock in: edge runtime, middleware, image optimization, ISR, and lots more are massively complex to set up or less performant off Vercel.
- fragmented ecosystem between app and page router.
- so much boilerplate with the app router: layout.js, loading.js, error.js, page.js
Not everything here is bad - in fact some parts are excellent. There's just so much of it, so many ways of doing any single thing and already so much legacy code in a system that's only a few years old, and it's growing in complexity with every release.
Next.js feels like a tech demo that exists to demonstrate a bunch of highly optimised paths to frontend development. Yes, my page probably will load faster if I did so and so, but all the work required for it is not worth the 2ms saved.
I'm sure someone will chime in with "skill issue", and that's true to some extent, but you gotta admit it's an over-engineered "solution".
Next was so good at first with just the page router and ISR. That solved like 90% of common front-end headaches, especially compared to the hodgepodge of other React Frankensteins at the time.
Then they pivoted to the overengineered insanity that is RSC and the app router.
I have yet to see a project or developer use that to its potential. I don't know who they're targeting anymore, feels like some sort of mythical 100x developer who loves hyper optimizing every paragraph differently.
I work in support (for another company) now and several times a week I see Next users confused by all the different options. Their documentation isn't great at explaining all the differences either. They're moving way too fast and leaving all the developers behind and adding more and more black box magic optimized for Vercel hosting.
Enshittification as always, I suppose.
Maybe it's time to fork it into something simpler and stabler? I would be perfectly happy with Next from four or five years ago. Prev.js?