Warning: Rant ahead.
When NextJs first became popular, it was a remarkably easy way to build full stack application and soon became the my default choice. But after using it for years, I have decided to move away from it.
Problems
It has become too complex
Over time NextJs has introduced tons of complexity, with latest one being Server Actions. Learning curve is much higher now and going through NextJs documentation has become a herculean task. USP of simplicity is gone.
Too many breaking changes
Page router to app router has created so many problems. Like API level configs don't work anymore and now we need to learn about Server Actions to achieve this.
Customisation
Any use case which differs from what NextJs creators intended to do is simply painful. NextJs has decided that API requests can have 1Mb request body, I have an API which uses request body of > 1 Mb (passing a base64 image), achieving that has no good alternative.
Page router has some config options but app router doesn't or they are not documented. The only way to achieve it is either create a custom server (What's the point of NextJs then) or learn about Server Actions, which may or may not provide a solution.
At this point, you start wondering what was the problem with the simple express server.
My Conclusion
Any highly opinionated framework should be simple to work with, nobody wants something which is restrictive and needs a high learning curve. The only use cases someone should consider using NextJs is
- Extreme need for Server Side Rendering
- Hobby project with known and simple scope