Next.js 15.1 is unusable outside of Vercel
103 comments
·June 12, 2025jowday
aitchnyu
How was Vercel able to frog-boil normal React users with vendor lock-in? React was supposed to be Meta's baby and open source was supposed to defeat vendor lock-in.
whoisyc
They exert immense influence over the React ecosystem, even its documentation.
Example:
https://react.dev/learn/creating-a-react-app
If you are new to React and just figuring out how to get it running, you will likely end up on this page. The first recommendation is Next.js.
The real best way for a beginner to start is IMO Vite. Comes with everything you need to get started and lets you choose what to do next. Curiously, the link to Vite only appears at the very bottom of the page and is implied to be only for those not already served by other options. Wink wink nudge nudge.
koakuma-chan
> They exert immense influence over the React ecosystem, even its documentation.
Not necessarily, it's just (sadly) the best React framework out there.
Why is no one building a better framework?
ryandvm
I never understood why Facebook was so invested in React. Why can't a 2 trillion dollar company afford to build mobile apps for two platforms?
pas
because they pushed shiny new features that are reaaaallly good for a certain set of commercial users (think webshops, where time to first contentful paint equals time to money)
and the tech is not bad, it's just meh (immature and a bit misguided) after all
by flipping the whole thing upside down, defaulting to server-side, a lot of previously hard problems became easy (the usual glueing of different APIs - user, CMS, metadata, "security", adtech, blablabla - translate to `const user = await auth();` and so on, and still after processing the request emitting a React page is kind of nice, Server Actions are also nice because Next manages the API URLs for you), and since mobile technology (phones and networks) evolved a lot it's not a problem to do a request for each page (especially on webshops where Next prefetches the ha$$y path))
but it's still a very subpar backend framework :/
darajava
Can you suggest alternatives? I've used Next and Svelte[kit] in prod and have been very unhappy with both.
shoeb00m
Because create-react-app was awful
bravesoul2
Does Vite at least create enough competition?
keb_
100%. Used it last year for the first time in a long time and was surprised by how awful the experience was. Docs were vague and hard to navigate. My web application seemed slow by default. We also had a hell of a time trying to deploy it with Docker to AWS using the sample Dockerfiles provided by Vercel (not sure if this is still the case).
koonsolo
Did you pinpoint the <Image /> issue, or are you just assuming it must be NextJs?
I work with NextJs, <Image> and RTF, and never encountered such problem.
jowday
The most confusing part is that it only happened really intensely on just one developer's machine.
I'll admit that the way we were using the image tag was a little unusual, but still something that was imminently supported by a plain HTML image tag.
My point is more that Next is such a bizarre black box that things like this were a regular occurrence.
To clarify: yes, it was the next Image tag. The moment we switched to using a plain image tag it resolved itself.
dimitrisnl
Oof. I'm sure Vercel might patch this issue. But I had had enough of these little annoyances. For example, the documented way to identify prefetches in the middleware has been broken for weeks (months?).
A lot of small issues that keep adding up. I'm not going to shill something else here, but I have a bit of Next.js fatigue lately. Still love the JS ecosystem though.
Anyway, thanks for bringing this up!
woutr_be
I moved away from Next.js, and switched to Astro. Originally I just wanted to go back to basics, but didn't want to bother with having to set up all my routes, templating, serving static assets, build tasks. Astro just handles all that, and it's SSR by default.
I also feel that Astro uses React/Vue as it was intended, as an interactive layer on top of HTML. It also made me realize how little I needed JS frameworks to begin with.
Next just started to feel like to much magic, the server actions felt weird, and just lots of things that required the "NextJS way".
dimitrisnl
I tried various astro sites, and as a user, a few things keep bugging me. - Visit their docs https://docs.astro.build/en/basics/astro-pages/ - Click `Routes` in the navigation
Now: 1. There's a flicker in the content where the sidebar moves on the left 2. The title displays `docs.astro.build` for a split second before it says "Routing | Docs"
Especially the second is quite annoying. I see it in every Astro site.
woutr_be
That seems to be mostly because of the way they've implemented their docs. It's definitely not something I have with my own sites.
The flicker seems to be because the collapsible nav items are done on the client, and closed by default.
I'm not sure where the title issues are coming from.
koakuma-chan
Here is one Astro site https://mayo.clumsy.fish/ with no flickers. Astro is pretty good but after trying RSCs I'm not going back.
drag0s
I'm still using Next.js in my work and projects because I still think it may be the best way to ship React to production, but it used to be something fun, enjoyable and productive. sometimes I feel a bit sad about the direction it's going in since the move from pages to the app router.
dimitrisnl
The best way to ship React to production is with Vite. It opens up tons of options (Tanstack, RR, Simple SPA, whatever) and you don't even bring the hosting provider into the discussion.
tisdadd
This - I spent quite some time fighting the new Next.js conventions not working for me making a legit web app instead of traditional site, switched to vite and was like yay, things work again and so fast. Normally I am all about embracing the framework, but kept thinking for what was happening I could use PHP instead and host anywhere.
skyeto
Curious, anything specific that you'd highlight compared to a setup like Remix that make it easier to ship with Next?
koakuma-chan
RSC
dimitrisnl
Well, they have consistent naming for a start.
dimitrisnl
Another follow-up. Some libraries[1] started to break from 15.1.8 onwards, so you had to downgrade to the vulnerable versions the author mentioned as well.
[1]: https://github.com/hashicorp/next-mdx-remote/issues/488
ekojs
I share the sentiment. I think we will only be using Next.js for static sites/prebuilt SPA in the future.
csomar
Actually Next.js with App router (and with Pages being pushed out) is really bad for SPAs. See this thread: https://github.com/vercel/next.js/discussions/64660
miyuru
> I think we will only be using Next.js for static sites/prebuilt SPA in the future.
With whats mentioned in the blog post I would not use it even from static builds.
Zealotux
You probably have better alternatives for that: Astro, React Router 7, TanStack.
Aeolun
Next has become a joke. It’s mildly frustrating that with Remix’s inexplicable transformation into react-router, there’s few great react frameworks left (for me), I’m back to plain vite with tanstack router.
zackify
I’m surprised this post is able to stay up on hackernews.
One time I simply made a post about how a page was simpler to code and understand in Remix.
You may not believe this but I had 3+ chat requests from multiple employees at vercel.
Across multiple social media accounts. All asking to take it down or meet and discuss with them.
jowday
Lee Robinson from Vercel is gonna show up in this thread as soon as he wakes up, don’t worry.
d13z
Same here, I wrote an article about why my company chose astro over NextJS and I was immediately added by a Vercel guy on LinkedIn.
cianuro_
What a poor approach to try and protect the brand.
csomar
You should write about that? Good thing I am out of the social media sites these days.
nonninz
I'm not sure if you are implying that you aren't using remix anymore after the rebranding, or that it's not a framework anymore?
Because React Router 7 definitely works as a framework [1] and it works like a charm.
Source: Backend developer with 15 years experience, lately switched to full stack, using RR7 after advice from a very good friend, still getting amazed every day.
EspadaV9
I've been trying and learning TanStack Router with a new project and it's been really nice, so nice that I then added TanStack Query, and then also added TanStack Form.
ggregoire
TanStack Query is the best library in the entire frontend ecosystem IMO.
I'm still using React Router tho (as a dumb SPA router, not the new "framework" features). I might take a look at TanStack Router one day.
freeqaz
What are the best alternatives? Why Vite?
I use Next for a handful of small projects, and SEO was always touted as the big benefit to me.
I can just generate a bunch of static files, copy to S3, and be done. Is that not true anymore?
input_sh
Have you tried reading the article? It specifically addresses your SEO question.
nonninz
React Router 7, formerly known as Remix.
ImprobableTruth
What's the issue with the remix -> react-router transition? As far as I can tell it's just a branding thing.
hn_throw2025
I started learning Remix, which was then relaunched as RRv7. Now Remix is going to be revived, and based on Preact instead[0].
I have given up and started learning NextJS. At least it has marketshare, while Remix will never gain traction because it keeps getting torpedoed by a couple of pivot artists.
throwingrocks
Remix or React Router + Vite is still great.
randomuxx
I’ve worked with Next.js professionally for the past 3 years, and it’s been torture. (hosted on Vercel, and the company used almost every single service Vercel sold. Worst vendor locked-in ever)
I replied to Dan’s previous HN post about RSC, sharing how I had a terrible experience and he was right to highlight: "I think RSC itself is pretty solid by this point but frameworks around it (primarily Next.js) are still somewhat rough."
React is fairly mid overall, and Next.js is only accelerating its bad reputation. Stay away!
sali0
Next and RSCs have become some of the most frustrating things I've worked with on frontend. Dealing with FE is already annoying enough, but having to wrestle the magic of Next and then vendor lock-in to Vercel to top it off.
Team is trying out Tanstack router + vite this week. Excited to build a regular ass CSA.
koakuma-chan
> Next and RSCs have become some of the most frustrating things I've worked with on frontend
What is frustrating about RSCs? They work really well for me and I'm still using Next.js only because of RSCs.
harrisi
I've been saying for years that everyone should put much more consideration into using anything that Vercel has its hands in, such as React, Next, and Svelte. Their goal is to lock people in the same way Heroku did, but even more aggressively by tying people to their full stack solutions from the language to the runtime to the machines.
Not that they're the only company to be weary of. I recently found out that Cloudflare's CLI tool for development and deployment only supports macOS 13.5+, which is less than two years old. I couldn't track down why exactly, but it's a sad state of affairs when two years is considered obsolete.
In fairness, you can still use an older version of wrangler, but it's a previous major version. Documentation and features are misaligned, and will only get worse. They could also break compatibility with it on their end in the future.
Meanwhile, new versions of other tools like vim, neovim, emacs, llvm, etc. all still work fine on OS X. I'd argue it's because they have no incentive to lock people in.
koakuma-chan
Everybody should be talking about how it takes Next.js 10 seconds to compile a route in development mode. Rust compiler is smoking in the corner.
christophilus
It’s unusable. The worst devx I’ve experienced since… dunno.
I can’t think of a stack I’ve worked with that I loathed more since that one and only time looked at helping someone fix their Sharepoint site.
aj_g
For real. It makes me feel like I'm coding in C++ again. I have the suspicion that many Next aficionados are using M12 Macs with 512GB RAM and don't know how bad the DX is on anything less than a bleeding edge machine.
bravesoul2
Yeah it's at least 200 millisharepoints of bad.
const_cast
We've gone so far that the promise of a simple scripting language like JS has multiple build and compile steps, and they're taking longer than a god damn C++ compiler.
Who knew that if we just threw Clang in a browser we'd somehow have a more pleasant experience?
On a related note, we use PHP at work. Same fucking problem. It's a scripting language, should be painless no? Wrong. PHP has awful performance characteristics, so we need to generate some code ahead of time. So we have a custom build step that uses Composer. That custom build step is SLOW. Probably because it was created by shitty PHP programmers and not the people who wrote GCC.
tshaddox
And bizarrely, next dev —-turbo isn’t any faster on my code base at work.
koakuma-chan
I confirm. --turbo doesn't do anything.
tonyhart7
rust compiler actually do compiling, are you sure that next js compiler do the same thing?
celicoo
It's really sad what Next.js has become. I still use it, but I have to maintain my own fork with patches. The next.config.js file is an ugly escape hatch that lets you change default behavior for things that should be properly extensible instead of being hidden behind "feature flags" in the first place. Honestly, the framework is a solid D grade at this point — complete spaghetti code.
bravesoul2
I don't know. I felt NextJS got too complicated for me years ago and may have had a sweet spot back then when it felt magic. Now id just use a boring web server for most things. Chuck on a front end framework when needed for a SPA. If you choose classic or SPA things are far more simple.
keb_
I'm gonna go out on a limb and say most people who are building dynamic web applications don't need server-side rendering.
pas
people who were[0] "not even wrong" about understanding how an SPA maps naturally to the server-client boundary are now free to cook their fine pasta-based product however they think is best.
[0] still are ... ¯\_(ツ)_/¯
5Qn8mNbc2FNCiVV
This seems blown out of proportion. Anyone who knows how streaming in React works knows, that you can't stream your HTML line by line. And there was the need to not block first paint (HTML, not JS) just because of metadata. It's reasonable to have a list of user agents that are exempt from that behavior since those are also not the bulk of your traffic where you want to show something as fast as possible.
How would you instead solve this, with the requirement that some users have metadata that takes a while to load?
6ak74rfy
What's the recommend full-stack setup, if not NextJS?
My background: I have ~15 years of software development experience, but practically all of it in backend stuff. (Well, I did some AngularJS a decade ago but that's it.) So, when I recently wanted to build a fullstack app for the first time for a side project, I looked around and learnt NextJS was the way to go. (Gemini said that, then Cline's official documentation said the same.) I am early in the process, so happy to learn of solid alternatives.
I am planning to host everything on some VPSes through Docker, because that's what I am comfortable with. So, no Vercel or Netlify.
ggregoire
If you don't need server rendering, I'd just recommend React without framework, and Vite [1] to run the app in dev and build the app in prod, then host the build (basically a HTML page with a JS file) on AWS S3 or similar static hosting platforms. That's the solution I've been using for 10+ years without any problem.
For the backend you can use whatever you are comfortable with. I mostly use PostgREST [2] nowadays. I recommend to use react-query [3] to call your APIs on the client side.
[1] https://vite.dev
[2] https://docs.postgrest.org
[3] https://tanstack.com/query/latest/docs/framework/react/overv...
pfych
This is the way to go for 99.9% of React apps, I've been using a similar setup for almost 7 years now.
Plain React, Vite, React-Router, & SWR. Is simple & works great for almost every use case.
consumer451
What are you building? I am working on a classic SaaS webapp, and I have found that using React/Refine.dev/Vite has been great. Refine.dev let me focus on my features, and not basic CRUD page stuff.
6ak74rfy
I am building an AI application (of course). It'll have an agentic workflow in the backend and exposes a chat style interface to its users. So, not a lot of CRUD stuff.
d13z
This might be confirmation bias but I'm very happy that we picked Astro over NextJS. Support for Standalone server is a must for our case since we run the biggest classifieds site in Germany and vercel costs are impossible to pay.
Here is an article I wrote of why we chose it https://d13z.dev/blog/07-why-kleinanzeigen-picked-astro-over...
Don’t ever use Next. Terrible developer experience, vendor lock in, weird undocumented conventions that make building anything other than some kind of B2B SaaS CRUD site full of undocumented foot guns. My favorite thing I’ve encountered is the Next <Image /> tag somehow dropping the FPS on a webgl scene on the same page to 2 FPS.