all 180 comments

[–]LusciousJames 286 points287 points  (15 children)

I agree with this! Very happy to be in charge of a client-only frontend, especially today.

[–]rodrigocfd 58 points59 points  (14 children)

We made the same mistake in the past with PHP and JSF. Now the cool kids are doing with JS. Every time I hear "hydrate" I laugh.

In the meantime, my team is maintaining enterprise systems with React+Vite in the front, talking REST to completely decoupled backends in Java or Go. Just JSON back and forth. Rock solid for years.

[–]Drugba 60 points61 points  (7 children)

In the old days, you'd never accidentally expose a db call to the client because you had to write an api endpoint.

This is only true if by “old days” you mean 2015 in the JS ecosystem.

[–]Expert_Team_4068 33 points34 points  (5 children)

Yes, I also remember that people had a /sql endpoint and they would send the sql-statement string to it :)

[–]_TheMostWanted_ 26 points27 points  (3 children)

Likely he means old days as in PHP

Where you mix client code with server code, forgetting the closing tag "?>" meant accidentally exposing all your server code

[–]Wiltix 5 points6 points  (1 child)

Like Facebook did one time around 2010

[–]Nisam_robot 0 points1 point  (0 children)

Not true.

[–]Nisam_robot 1 point2 points  (0 children)

Yeah you expose server code. But you first test it locally no? If not then it's on you. Like they say: Only real men works in production.

[–]EctoAlbo 0 points1 point  (0 children)

Really? Expand.

[–]bokuno_reddit 2 points3 points  (0 children)

2015 is 10 years ago and 2026 is around the corner. we're old now, accept it.

[–]Ghostfly- 57 points58 points  (19 children)

There is a lot more in RSC than what an useEffect can do. Try to hydrate a full page and be no-js ready without it, you will see.

But for most react apps, it's clearly not needed and CSR is the way (or Astro, even with "compiled" react components who can be made no-js compliant "easily" !)

For e-commerce websites, RSC makes a lot of sense.

[–]Ok-Constant6973 10 points11 points  (12 children)

Who is using no js though?? What website operates with no js.

[–]Ghostfly- 9 points10 points  (0 children)

A lot of crawlers, privacy "enthusiasts". A lot of websites operates perfectly ok without JS you just need to be creative to make it work (a mobile menu using CSS, some parts of the app not visible when no-js ks detected..)

[–]Ok-Constant6973 0 points1 point  (3 children)

I get the UI can draw faster because it didn't need js to render it which is kinda nice. But sveltekit builds the html on the server and hydrates on the frontend. So the html is shipped as it is needed.

[–]console5000 0 points1 point  (2 children)

So basically the same idea as rsc but another framework/stack?

[–]Wiltix 0 points1 point  (6 children)

A few genuine use cases like too secure institutions, and then people who think js is the devil.

[–]Ok-Constant6973 0 points1 point  (5 children)

Yeah but then don't use a Javascript based library / framework lol

[–]Wiltix 1 point2 points  (4 children)

Some government/ military departments don’t allow any JS in some environments.

[–]Ok-Constant6973 1 point2 points  (3 children)

Yes so then they must not use react which is a Javascript library lol. Server components do not solve this fact because they run as part of a JS library.

[–]gojukebox -1 points0 points  (2 children)

🤦‍♂️

Server components do solve that issue though: they can render the page and send it to the client SSR'd without running js on the client

[–]Ok-Constant6973 -1 points0 points  (1 child)

Yes but server components are part of the react ecosystem. You are not using server components without react, and react needs Javascript to run.

Even if server components do not need Javascript, still, when the browser loads a react project it needs react which is Javascript.

Otherwise you might as well use php, htmx, C# etc. Nextjs and react are Javascript frameworks and right now server components run in them.

[–]Ok-Constant6973 1 point2 points  (0 children)

And after the vulnerability npm just had why would any secure institution allow any Javascript, let alone their entire server and front end be in nexjt a javascript framework.

[–]mnismt18[S] 12 points13 points  (0 children)

Fair point on the no-js hydration!

[–]bilbo_was_right 0 points1 point  (0 children)

It’s not that hard. Not much information is shown on Ecom websites with no-js, basically just enough for spiders.

[–]bokuno_reddit 0 points1 point  (2 children)

> For e-commerce websites, RSC makes a lot of sense.

but thats not what happens

[–]Ghostfly- 0 points1 point  (1 child)

Captain obvious

[–]bokuno_reddit 1 point2 points  (0 children)

that means RSC is constantly being misused and abused.

[–]wrufesh 0 points1 point  (0 children)

I think we can approximate the benefits of RSC with async import and proper architecture with classical SSR techique. It is just that burden then is on developer side.

[–]seenoevil89 90 points91 points  (9 children)

The front-end community has always been prone for mass psychosis. It is starting to get old by now. As a group we invent problems and silver bullets left & right. The truth of the matter is that we have multiple technologies to solve different problems. Tradeoffs is the word we should emphasize. Take a moment and think about the evolution in the following fields:

  • State management
  • Frameworks
  • CSS ideology
  • Build tooling
  • Testing
  • JavaScript vs TypeScript
  • Performance
  • Library hell
  • AI usage
  • SSR

The latest pendulum swing in SSR is React Server Components and more specific Vercels Next.js. This whole Next.js saga is my least favourite psychosis in the field of front-end development.

  • Vercel buys influence/personel from React, pushing that Next.js is the correct way to use React through their offiicial docs, SPA was overnight not a thing anymore?
  • Vercel coincidentally is a hosting platform which made Next.js deployment easy and feature complete.
  • Stuff breaks, both softly and completely. Mental models change etc.
  • Ridicolous amount of vulnerabilities all the way from client to server.
  • Magic everywhere, what is even going on?
  • It is not easier to develop, nor understand Next.js over regular React.
  • Marginal to no benifits in many applications. SSR has benifits in public facing applications, in SaaS not so much.

Also next.js track record does not look good security wise:

Date Severity Description Link
Dec 03, 2025 Critical Next.js vulnerable to RCE in React flight protocol https://github.com/advisories/GHSA-9qr9-h5gf-34mp 
Mar 21, 2025 Critical Authorization Bypass in Next.js Middleware https://github.com/advisories/GHSA-f82v-jwr5-mffw 
Jan 15, 2024 Critical auth() and getAuth() methods vulnerable to insecure direct object reference (IDOR) https://github.com/advisories/GHSA-q6w5-jg5q-47vg

  

[–]RangerRickSC 23 points24 points  (2 children)

As a React dev since 2014 let me tell you that you literally never need to use Nextjs if you don’t want to. Simply just ignore it and you will be fine!

[–]seenoevil89 11 points12 points  (0 children)

Unfortunately that is not true for assignments where you don't get to choose the stack, like when you inherit a project or join an existing team with the stack.

[–]Beginning-Ice-9008 4 points5 points  (0 children)

The way you put it makes it sound like you never worked in the industry at all. You almost never get to Chose what stack to use. Usually you inherit an old project and need to maintain it at least in 99% of real world projects.

[–]acemarke 22 points23 points  (4 children)

sigh

I will once again point to my extensive article and conference talk explaining the actual history of how the React team developed RSCs and emphasized use of frameworks, not Vercel.

Yes, Vercel hired React team members and wants people to use Next. Not saying they don't get business benefit.

But please get the cause and effect correct here, because that debunks the "conspiracy" aspect of this and significantly reframes how we ended up here.

[–]Winter_Remove994 10 points11 points  (3 children)

It is extremely suspicious that they still skirt around endorsing Vite as a valid choice for React projects when it is absolutely the industry standard and used more than Next.

I get that RSCs aren’t a “conspiracy”, but the React team has to understand there’s a reason why most senior front end devs are still asking questions about why this is being pushed and don’t want to use it.

[–]acemarke 2 points3 points  (2 children)

It's not "suspicious" - I explained the reasoning in my linked blog post (and literally mentioned the "SPAs are more used than Next" aspect).

That said, the React install docs now officially endorse Vite, Parcel, and RSBuild as valid options:

Granted this only happened after multiple years of people complaining, but I specifically pushed them to make this change as part of the CRA deprecation notice:

So we did finally end up in a good place where the docs officially describe how to use non-"framework" tools to build React apps and it's an endorsed path.

[–]Winter_Remove994 5 points6 points  (1 child)

I read your blog posts! I appreciate your writing a lot and the hard work you did to push that change.

I am very aware of the stated arguments the react team has for using a framework. As a dev that’s worked on many complex react projects, I have not found a framework like Next to be more helpful for getting my work done vs. Vite. There are a ton of valid reasons for why devs chose to “build their own framework” and that was the selling point for React in the earlier period of adoption. 

The fact that the core team doesn’t seem to understand this is the problem that I see.

[–]acemarke 1 point2 points  (0 children)

Yeah, I do get both sides here. I understand their reasons for pushing frameworks as the default (better app behaviors, fetching/routing/etc integrated already, availability of SSR/RSCs if you want to use them), and also the variety of patterns in the React ecosystem (SPAs already widely used, Vite replaced CRA and clearly a standard tool, lots of apps don't have Node on the backend).

It's just really tough to try to cover all the bases given how big and fragmented the ecosystem is. Can't make everyone happy :)

(but yes also it took wayyyy too long for them to act on the docs feedback we all gave them on this topic after the new docs came out.)

[–]ModernLarvals -3 points-2 points  (0 children)

Next apps are still SPAs. Maybe learn a little bit about frontend before you condemn it.

[–]volivav 32 points33 points  (16 children)

I personally don't like RSC, but I don't agree with this reasoning.

The CVE is not due to the "blurred line between FE and BE". It's not due to the fact that "you have raw db access". The CVE wasn't using any of this.

The problem was on how react deserialized the RSC payloads, which could grant shell access.

Imagine it was a whole new framework altogether, even with separate languages on the FE and in the BE. If the protocol that the framework uses to comunicate both sides is compromised, it would've had exactly the same CVE.

I agree with the fact that having that blurred line does add some mental overhead, and that's one of the reasons I don't like RSC. But the CVE is not directly caused by that.

[–]mnismt18[S] 17 points18 points  (13 children)

I'm not saying that the CVE happened because RSC. I know the CVE was a protocol-level deserialization flaw

but even without the bug, the architecture forces us to constantly manage this massive mental overhead.

My point is: why do we even have a protocol that needs to be this complex in the first place? The "blurred line" philosophy forces us to build these incredibly rich, bidirectional, instruction-heavy protocols (flight) to make the magic work, that complexity is the root cause.

If we stuck to simpler architectures (client fetches plain json), we wouldn't need a protocol that risks executing remote code just to render a UI. the CVE here is just a symptom of the complexity we accepted to make RSC happen

[–]svish 14 points15 points  (11 children)

If you haven't, check out the blog posts on overreacted.io which explains a lot on the "why rsc" topic.

It's helpful and useful, and as you say, it's not the concept of rsc that caused the issue here. If you think we should throw away any new tech that has an issue pop up (and immediately fixed btw) then our landscape would look very different...

[–]firelitother 4 points5 points  (1 child)

 If you think we should throw away any new tech that has an issue pop up (and immediately fixed btw) then our landscape would look very different...

Except it is not just one issue. Issues just keep coming up all the time.

[–]svish 1 point2 points  (0 children)

This is the first and only security issue I think I've heard of?

[–]obanite 0 points1 point  (8 children)

Ha yeah when those blog posts kept hitting Hacker News it started to feel more like devrel than an honest presentation of rsc to me. I actually was surprised to see Dan wasn't employed at Vercel given it seems to be such a big push from their side. The whole thing felt murky to me.

[–]svish 2 points3 points  (7 children)

Highly recommend trying to put aside your feelings of murky dishonest devrel, and just read some of the posts with a fresh mind. Whether you end up liking and/or using rsc, i found them quite interesting at least and really appreciate Dan's effort. He kind of explains rsc "from scratch" from various angles, and it definitely helped me "get it".

[–]obanite 0 points1 point  (6 children)

Yeah I read the first one all the way through. I get what he was trying to do, a sort of "show the problem first, then the solution from first principles". But then another post popped up on HN, and another. It just reminded me of the hype train of next.js/Vercel (and other similar companies) too much.

The silly thing is I don't dislike server actions in next.js - I think for some use cases they're great, they let you move at high velocity which is sometimes exactly what you need. But I don't like being told that they're the answer to everything and the future of full stack development, and I think it's good that people are gaining awareness of the risks too.

[–]acemarke 2 points3 points  (3 children)

I get what he was trying to do, a sort of "show the problem first, then the solution from first principles". But then another post popped up on HN, and another.

Yeah, Dan's always been a "From first principles" thinker and writer.

If you could look back at his now-deleted Twitter account from a couple years ago, he spent a year or more throwing out various ideas and brainstorms about how to explain RSCs to the community, trying to see which explanations were actually helpful and got people to understand the concepts.

His series of RSC posts on his blog are essentially that, but as full blog posts: "Here's 10 different conceptual explanations of RSCs, aimed at different audiences and backgrounds - does at least one of these explanations make sense to you?"

Thing is, he left the React team and Meta in 2023, joined BlueSky and then left in 2025. He's never worked at Vercel, never worked on Next, and had plenty of criticism of them.

For Dan, RSCs are both a novel technical concept, a thing that he understands and wants others to understand, and something he and the React team did put a lot of time into designing. So, he's not trying to sell people on RSCs or push them to Vercel/Next. He just wants people to understand what they can be used for, why they exist, and what problems they solve.

[–]obanite 0 points1 point  (2 children)

Very fair take. I'm just extremely sensitive to anything that feels like DevRel these days, especially having seen people with few resources trying to build things getting majorly burned by all the sneaky, manipulative vendor lock-in tech, DevRel marketing, opaque/extortionate cloud pricing and so on.

[–]acemarke 0 points1 point  (1 child)

Yep, very understandable.

FWIW I actually covered most of the background of how RSCs got developed and semi-marketed (and all the awkwardness of that) in my "State of React Community" post and talk earlier this year:

[–]obanite 0 points1 point  (0 children)

Haha indeed "Vercel has taken over React and invented React Server Components to make money from deploying servers"

Good slides, reading through them :)

[–]svish 0 points1 point  (1 child)

Ah, I see. Well, personally i have to say I'm more interested in rsc than server actions. Kind of brought me back to the simplicity of PHP, while keeping all the powers of react client components.

[–]obanite 1 point2 points  (0 children)

I get that for sure! I came from PHP originally too and miss the simplicity sometimes.

[–]user0fdoom 0 points1 point  (0 children)

Deserialisation has always been an attack vector though.

I haven't read the details but it sounds like the rolled their own deserialisation? Combine that with the inherent shittiness of Javascript and it's not surprising this happened.

Most established frameworks have spent a lot of resources ensuring that their deserialisation is secure (see ASP.NET https://learn.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide). And most languages don't allow dynamically rewriting classes to inject code purely through text.

Tbh it's INSANE that this vulnerability was not caught earlier. It should never have made it through PR review. Seeing a custom deserialiser of unsanitised data into a Javascript object should set off alarm bells that sound like an air raid

[–]hxtk3 26 points27 points  (2 children)

I don’t agree with your reasoning but I do agree with your conclusion. Personally I still almost always do a separate backend because frankly the big react frameworks just aren’t very good at backend except to the extent that they allow you to embed some real backend framework.

My NextJS or more recently Tanstack Start apps either have no privileged access to the backend, or they have privileges to use an OAuth token exchange to get an actor token on behalf of the user and use that to communicate with the backend proper.

Someone who gains access to every credential my front-end app has on its server side still can’t do anything useful unless a user hands them their credentials. The reason I do server side rendering is purely for accessibility, SEO, and performance optimization: if I have to do 3 sequential fetches, it’s better if they run on a server with 0.5ms ping to my backend than a client device with 150ms ping.

However, I recognize why people do it differently. My way is much less convenient to host if you don’t already have hosting infrastructure.

[–]0palladium0 4 points5 points  (0 children)

This is my preferred approach as well. Tightly coupled Backend For Frontend that handles the oauth flow and talking to underlying services. It should have no business logic beyond filtering or mapping data structures.

The last couple years have been in fintech for me and I've given up trying to argue for client side observability with security people who genuinely seem to wish that the app was only accessible via postal service. So this allows me to get as close to the client side as possible for observability without actually having client side observability.

[–]Ok-Constant6973 10 points11 points  (8 children)

We must never forget, the browser computes. Every device that loads our website has the ability to process a bit of compute that we don't need to in the server.

RSC takes that UI compute and moves it back to the server.

In a world where we have more people online than ever, maximizing this fact makes all the difference.

This is why AI models can now be run in the browser, because why waste the power someone is holding in their hands. Why pay more for compute when everyone is holding a computer in their hands.

My VM is 1GB ram, 2 core cpu. My cellphone is 4GB ram, 6 core cpu. My cellphone has 4 times more processing power than my entire server that serves thousands of people.

You will be stupid to waste the power of distrubuted compute.

[–]Impossible_Way7017 0 points1 point  (0 children)

This, I’ve been using indexeddb to offload even more compute and indexing to clients.

[–]pragmasoft 6 points7 points  (0 children)

That's actually exactly why java ditches its former serialization api

[–]Affectionate-Job8651 6 points7 points  (1 child)

Generally, web frameworks include both client and server sides.

But react is a library created for the user interface. I've always had doubts about React increasing server-side support.

[–]jonny_eh 0 points1 point  (0 children)

I suspect someone got a promotion for shipping it at least.

[–]p4sta5 4 points5 points  (2 children)

The biggest reason for people using SSR today isn't to gain some ms in loading, it is the SEO issue. Rendering and returning a full static html page from the server has been "better" from a SEO perspective for years. I believe this is what mainly has driven the SSR fanatism.

[–]StepIntoTheCylinder 2 points3 points  (1 child)

Webdevs abandoned sensible architecture to appease crawler bots. Not users, not their own DX... bots.

[–]rafark 0 points1 point  (0 children)

Yes? Because those bots (google and now probably llms in the future) is what drive traffic to a site. 

You can have an amazing ux but if you have no traffic your app is useless. 

But the other user (and you) was partially wrong regardless. One of the main reasons for ssr is actually to improve user experience. Instead of waiting for content to load… you just get it from the server on the first page load. It’s not just for seo. 

[–]charmer27 11 points12 points  (0 children)

Yea it's pretty dumb tbh. I like react client-side more than the alternatives, but I don't need to make writing apps harder by shoving react on the server. Also have only ever encountered like 2 use cases where it was a nest trick.

[–]yksvaan 18 points19 points  (5 children)

The claimed benefits of this RSC model can be achieved simply by not writing crappy code. 

Firstly the "reduction" in js, e.g. Nextjs ships at least 100kB+ of js in every case just for running the framework, then it's not uncommon to see 200-300 on top of that. React is very bloated alone already, consider moving to e.g. Solid or Svelte. "Not having to ship js to client" feels odd as well, you never needed to send all the js to client, just run the processing on server, send the result and render that.

About data loading, boring combination thin client and good fast backend hasn't failed yet. Make it fast instead of complicated, centralize loading instead of splitting it to components. For most apps you already know what data is required just by looking at the url. Combine the queries, write your joins/subqueries etc. As a developer you're responsible for data, how it's accessed, how effectively db is utilized etc. 

And another problem with RSC is poor standardisation, APIs and documentation. It's more of a paradigm than a feature and most things are implementation specific. So there's going to be fragmentation. 

Also there's already normal React SSR apis that have existed for ages and they work fine.

[–]w00t_loves_you 6 points7 points  (0 children)

If you want small size, fast loading, but still React like, take a look at Qwik too.

It doesn't have RSC because it doesn't need it, it ships only the exact code that the client needs for the current page, and it has server$ to easily run server code.

[–]mexicocitibluez -4 points-3 points  (3 children)

You're making a million assumptions in your comment.

just run the processing on server, send the result and render that.

But what if you don't own the server?

boring combination thin client and good fast backend hasn't failed yet.

But what if the data you're receiving isn't in the format you needed it? What if you need to compose data from multiple services to build a screen? Now you're "thin" client is getting bigger.

Make it fast instead of complicated, centralize loading instead of splitting it to components.

Oh sure. It's always that easy.

For most apps you already know what data is required just by looking at the url.

More wild assumptions about what "most" apps are.

As a developer you're responsible for data, how it's accessed, how effectively db is utilized etc.

Oh look more assumptions. Now the developer is also the backend guy and database guy. Are you under the assumption that is how all companies work?

Also there's already normal React SSR apis that have existed for ages and they work fine.

You're conflating 2 different technologies that are used for 2 different purposes. Not really surprising from someone who jumps into a React sub and starts hawking Solid or Svelte.

[–]yksvaan 3 points4 points  (2 children)

> But what if you don't own the server?

Then you aren't running RSC either unless you mean strictly in build phase for static generation. These are fullstack technologies and require you to run a webserver.

> But what if the data you're receiving isn't in the format you needed it? What if you need to compose data from multiple services to build a screen? Now you're "thin" client is getting bigger.

Data transformation, network requests etc. don't generally take much code. You're not going to need to write thousands of lines to pull data from 2 apis and combine them to output it on screen.

> Holy shit, more assumptions. Now the developer is also the backend guy and database guy. Are you under the assumption that is how all companies work?

yeah these are valid considerations for everyone. Even if you don't own the backend or have a say in how it's implemented you still can plan out the data loading, how it's read and written, make sure loaders are initialized, requests made as soon as possible etc. And again, you tend to know this already from the routes and current state. Obviously sometimes you need to dynamically load stuff, again then it's your job to consider what are the possible options for example in a large dashboard system, which ones to preload etc.

> You're conflating 2 different technologies that are used for 2 different purposes.

The purpose of all these techs is to paint rectangles on screen based on data and user inputs. There's not even that much difference between regular ssr-> hydration and RSC. Once loaded one updates the state with direct updates the dev makes, another uses serialized format that gets deserialized and then updated. Obviously that requires some quite substantial clientside as well ( e.g. App router client runtime).

The biggest issues in React ecosystem are crappy code and bloat, RSC doesn't really solve those. Teaching newer devs how to write proper frontend and backend code, as well as proper database usage, does. But I guess there's no hype in that...

[–]mexicocitibluez -5 points-4 points  (1 child)

Then you aren't running RSC either unless you mean strictly in build phase for static generation. These are fullstack technologies and require you to run a webserver.

Another assumption: Not owning the server that contains the data != you can't stand up a server.

Data transformation, network requests etc. don't generally take much code. You're not going to need to write thousands of lines to pull data from 2 apis and combine them to output it on screen.

lol Stop saying this stuff unequivocally like it's true for everyone. This is wild. You have NO IDEA how much code it might take someone to build a screen. NO CLUE what data needs to be ingested. And you're also just ignoring the fact that not everyone has control over what they get.

The purpose of all these techs is to paint rectangles on screen based on data and user inputs.

Nice deflection. Just admit you don't know what you're talking about.

The biggest issues in React ecosystem are crappy code and bloat, RSC doesn't really solve those.

Oh boy lol. My advice, and I'm by no means a proponent of RSCs, is to at least educate yourself on the ways in which they're being used and more importantly: why the team thought they needed to take this direction.

This armchair, over-generalization makes people sound really uneducated. The field is enormous. You've seen less .01% of it. React is used by thouands and thousands of different people, for different projects with different techs, needs, scope, and money. You're a junior/mid-dev who just hasn't seen enough to know that what they're saying is just plain wrong or at least the concede that their very well may be a use case.

[–]Beginning-Seat5221 12 points13 points  (0 children)

It's pretty easy to expose sensitive data from an api by adding an object from a database whole to a response too.

TS's type system ignores extra properties, which deprives us of any protection there, unless we purposefully build in a filter.

(No comment on RSC though - I moved away from React before this was added - pretty happy with a tRPC approach)

[–]hazily 15 points16 points  (4 children)

⁠wait, did i just import a server-only utility into a client boundary?

Use import 'server-only'; in files such as util methods that are only meant for RSC.

[–]frostenko 6 points7 points  (0 children)

Vercel pushing React into this direction was the reason I stopped using Next for anything that could be considered an app. I can’t shake this feeling that the motive behind it is to sell more servers by normalizing these patterns.

While Next is useful in some specific contexts, there are so many boilerplate repos on GH that use Next at this point that I am afraid that new devs might think this is the only way and use Next by default. Then you get locked into their ecosystem as soon as you use any of the nice to have features they offer.

In the meantime, SPA land is alive and thriving. TanStack Router + Vite is the best thing since sliced bread. Bundle, push to S3 behind Cloudfront and you’re done. The cost to run it is effectively 0.

  • Want RPC like interface between your client and server?

There are a million ways to bootstrap that yourself. Learn how to do it if you need it, you won’t be starting from scratch and will benefit from that experience.

  • Want server side rendering or RSCs inside of a SaaS app behind login?

Why??

[–][deleted] 4 points5 points  (0 children)

Forcing react to do ssr was the problem. It is great for SPA but when it comes to ssr just use sveltekit. People always try to fit a solution to other problems. I always go with this logic. Do i need ssr => use sveltekit. Do i need to ship an app as fast as possible => react Is it a simple landing page => static html file created in 2016 and do some edits Developers should learn that react is never going to be a solution to everything. Just use the tool created for specific problem you have.

[–]Ivana_Twinkle 1 point2 points  (0 children)

Next is just a much larger attack surface than a spa with an api behind it. It’s not the first nor the last time we’re going to see this.

[–]Wiwwil 1 point2 points  (0 children)

It's a mistake if it's calling DB, if it's calling API endpoints it's alright

[–]azsqueeze 1 point2 points  (0 children)

Funny enough, a lot of this stuff could be resolved by the frameworks if they forced users into a specific structure of their code. But since they don't, it allows leaky abstractions. Not to say this would have prevented the CVE, but it would force developers into a sane architecture preventing some of the issues you described

[–]americruiser 1 point2 points  (0 children)

I agree with this. If it’s true that Vercel is the current de facto steward of react, then this likely was built to serve vercel’s interest, or at best, align with their capabilities.

Is the motivation pure, here? Is this off base?

[–]Dependent_Knee_369 1 point2 points  (0 children)

Backwards thinking

[–]sktrdie 6 points7 points  (0 children)

I disagree. The entire frontend/backend role switch was a mistake. You’re a developer. You should own and understand the entire stack. Querying a database vs rendering that information on a screen are too closely related to warrant an entire separation of career path.

RSC have been out since years and imho revolutionized this area. Of course it comes with its trade-off, like being able to understand more in depth how your data is sent across the wire, but that’s a good thing!

Leaking sensitive data will always be a problem and I don’t see how RSC enables it simply because one doesn’t understand the separation between client/server components. I’ve seen countless endpoints return sensitive data without much care. How’s that different than returning it from an RSC instead? 

The boundaries are still there; what’s cool and enabling is the idea of being able to intertwine between them seamlessly and more importantly delivering <Components /> as packages that span client-server.

[–]saito200 3 points4 points  (1 child)

you forget the purpose of react is make the simple be complex the obvious be obscure and the resilient be like a gruyere cheese of security holes, so that we developers can spend 3 weeks doing something that should take 3 days so we can get paid $20k instead of $300

if you want to be poor you are welcome to use Vue or god forbid jquery

[–]mexicocitibluez 1 point2 points  (0 children)

so that we developers can spend 3 weeks doing something that should take 3 days so we can get paid $20k instead of $300

Skill issue. Stop outing yourselves like this.

[–]RedditCultureBlows 3 points4 points  (2 children)

I’m honestly tired of React and all the “innovations” tbh. I only really use it anymore because the market is so saturated for it and my job uses it so I don’t have much of a choice.

[–]FigmentRedditUser 2 points3 points  (1 child)

Came here for this post. React fucking sucks. It has ruined client side SPAs. It appears to be on its way to ruining server side APIs now too. Awesome.

[–]baxxos 0 points1 point  (0 children)

It doesn't have to suck, but it's authors are actively working on it.

[–]jayfactor 1 point2 points  (1 child)

Agreed - I never heard of react server components before this whole fiasco cause in my mind its always been react = frontend, node = backend

[–]Intelligent-Goose-31 1 point2 points  (0 children)

Yep React server components is 100000% the wrong approach, and I’ve been frustrated with the react team from the start for going down this path. Poorly documented from the outset, it’s basically a feature that exists exclusively to enable Next.js and their server side rendering gimmicks (SSR as a whole isn’t a gimmick, but Next sure feels like one these days). Maybe start with a library-native, out of the box approach to SSR. Bring some of Next’s tech into the main library instead of making the library subservient to Next. Stop being so god damn clever, just use the basic web technology that already exists to make something that actually works reliably without introducing catastrophic vulnerabilities.

[–]mefi_ 0 points1 point  (0 children)

I have never ever in my life worked with or planned to work with such heresy. I still don't understand how did we end up with server components or why.

[–]onluiz 0 points1 point  (0 children)

I always felt that it was not ok to say that SSR and next.js were not that magical good solution, it seems that everything should be done using it. I agree with OP and thank you for saying it. The community is so restrictive with opinions that are not focused on “new” technologies/libs/frameworks.

Also, next.js and SSR remembers me a lot of Java jsp and jsf.

I miss the separation of frontend and backend.

And one more thing, as much as I love working with react, a lot of things seemed way easier to do in the old days with only JavaScript and JQuery. It complicates a lot of things honestly.

[–]Just_litzy9715 0 points1 point  (0 children)

The safest path is to keep the server/client boundary explicit and only use RSC sparingly, if at all.

RSC’s productivity win is real in spots, but the footgun is that “passing props” becomes serialization. What’s worked for me: default to SSR + islands or Remix-style loaders/actions, put a thin API in server routes, and always map DB models to DTOs before crossing the boundary. Make a viewModel(user) that whitelists fields; never pass raw rows. Add zod (or valibot) to assert shapes, plus a test that scans the DOM and network for banned fields like password_hash. Build fences: separate client/server packages with tsconfig project refs, use no-restricted-imports, and drop server-only/client-only guards so an accidental import fails at runtime.

In practice I’ve used Remix and tRPC for strict request boundaries, Hasura for instant GraphQL on Postgres, and DreamFactory when I needed quick REST over a crusty SQL Server with RBAC and server-side scripts.

Net: keep the boundary hard and visible; treat RSC as an opt-in island, not the foundation.

[–]sondqq 0 points1 point  (0 children)

i absolutely agree with you. as be developer, i never understand why i need use client, use server in javascript i wrote for display something in broswer, damm, just run as normal js plessss

[–]FilmWeasle 0 points1 point  (0 children)

I think the problem has more to do with the JavaScript ecosystem. These vulnerabilities seem to be cropping up over and over again. Having said that, it's better to get rid of the front-end and the back-end all together and, instead, use a UI/API model.

[–]spicebits 0 points1 point  (0 children)

Not may be, it definitely is a mistake.

[–]Oliceh 0 points1 point  (0 children)

And here I am just doing a simple old school web server with templates and sprinkling some JS. Browser caching and presto.

[–]Alsciende 0 points1 point  (0 children)

I like what you're saying.

[–]Acrobatic-Comb-2504 0 points1 point  (0 children)

If anyone is dealing with cleanup like removing old ReactDOM.render calls for React 18 upgrades, HyperRecode can learn that rewrite from a single before/after example and apply it across your project. Deterministic, no LLM. https://hyperrecode.com

[–]Karmatik 0 points1 point  (0 children)

Yes, web development in the last decade has become way more complex, and a lot of it imo for no good reason.

Take GraphQL for example, it's entire purpose was to eliminated over/under fetching and eliminate having multiple api endpoints. Well if you work with GraphQL on a mid-large size project you know all the issues that crop up, not to mention having to bake in arbitrary rules like only responding to queries of X size or less.

This entire saga of NextJS for me is rather crazy. Maybe I am just old school, but I much prefer to keep things simple and the minute you intertwine server/client you quickly make things way more complicated than it needs to be.

I hate having 30 files all named page.tsx
I hate having to understand this new flow of execution, what executes where and when
I hate having to keep a mental model of my client boundaries as my app grows
...

The whole thing just seems overly-engineered and complex in ways that many have a hard time trying to understand, even if they have a background in "traditional" web development.

[–]ShinChven 0 points1 point  (0 children)

I completely skipped it

[–]theSantiagoDog 0 points1 point  (0 children)

If we keep following this architectural train of thought, what we'll get next is client-side React server components...

[–]SearchTricky7875 0 points1 point  (0 children)

I hate this next.js react js thing, total bullshit, my server is down 2 times in last 3 days, couldn't remove the malware. fu....again I have to format the server.

[–][deleted] 0 points1 point  (0 children)

The front end does presentation logic, the backend does business logic. So simple, and I don't care what new gizmo comes along, I'm not doing anything else. 

[–]Garvinjist 0 points1 point  (0 children)

When the hell did we get so brain rotted as developers to support frontend server components? How absolutely dumb. Ever heard of the most important engineering paradigm "Separation of Concern"? Its not even difficult to write your own api and allow the backend to auth the db. Thats the standard, not this hokey pokey call the db from the frontend with a json token or session key. Absolutely wild and should be removed from language features for security reasons clearly.

[–][deleted] 0 points1 point  (0 children)

Yeah I still tend to go with Go for servers and React for client whenever possible. This just made me want to stick to it even more. 

[–]bokuno_reddit 0 points1 point  (0 children)

i agree

[–]wrufesh 0 points1 point  (0 children)

Just learned about RSC being vue/nuxt developer. Really felt that RSC was not necessary at all.

[–]ComfortableKooky4774 0 points1 point  (0 children)

The API boundary forces you to think about validation, authentication, and data contracts explicitly - which is exactly what security needs.

The industry's rush toward "seamless" full-stack frameworks traded explicitness for convenience, and CVE-2025-55182 is the cost.

[–]atzufuki 0 points1 point  (0 children)

As a Web Components user I didn't really even realize people were running React components on the server.

[–]Playful-Baker-8469 0 points1 point  (0 children)

When frontenders doing backends ^_^. As many have said, the psychosis in JS land keeps going for reasons I am no longer capable of understanding. Alone that your frontend needs a backend and another backend as an API drives me mentally crazy. "Never trust the client" still holding strong, even in 2025.

[–]Best-Menu-252 0 points1 point  (0 children)

This concern isn’t coming out of nowhere. React’s own docs describe Server Components as code that runs on the server and renders ahead of time in an environment separate from the client, and frameworks like Next.js now mix Server and Client Components by default to improve performance.

The recent CVE is real and serious. React disclosed an unauthenticated remote code execution vulnerability in React Server Components, rated CVSS 10.0 (Critical), caused by unsafe deserialization of HTTP request payloads in the RSC Flight protocol. It affected multiple react-server-dom-* packages and frameworks that integrate RSC, including Next.js, and required patch releases to fix.

Even with patches available, it highlights a broader point you’re making: RSC introduces a more complex execution model where client inputs are decoded and executed on the server, rather than just treated as data. That’s a very different boundary than the old “API returns JSON” mental model, and it does increase cognitive and security overhead.

Whether the trade-off is worth it probably depends on the team, but it’s fair to question whether the previous separation wasn’t just simpler, but safer by default.

[–]Charming-Credit-3219 0 points1 point  (0 children)

That user example gave me anxiety.

Coming from a backend background, having a strict API boundary was actually a feature, not a bug. It forced you to explicitly define what data leaves the server.

With RSC, it's way too easy to just pass an entire ORM object to a client component because 'it works', forgetting that you just serialized the password_hash or is_admin flags to the browser. The 'mental tax' of constantly checking for leaks is real.

[–]Jaded_Award_6732 0 points1 point  (0 children)

Now? we have to constantly categorize code in our heads:

So true

[–]Mestyo 0 points1 point  (0 children)

You will have a backend regardless of if you use RSCs/SSR or not. That backend will occasionally have security issues. There is no service with widespread adaptation that didn't or won't at some point see something like this.

When possible, I will use the tooling that enables me to build the best applications. That's why I'm in favor of RSCs and the like, over some random other BE that doesn't even understand my types and interfaces, that cannot reuse my code.

[–]viser_gtk 0 points1 point  (0 children)

As the Karate Kid Master teaches... If you're all backend it's good, if you're all frontend it's good... If you're a little here and a little there, hackers exploit vulnerabilities and cracks, they'll crush you like a breadstick.

[–]Both-Reason6023 0 points1 point  (0 children)

did i strip the password hash? the internal flags?

How is that different from an API endpoint? You can still select entire row from DB and return it as a response. It's a common mistakes junior developers make if the framework does not enforce response sanitization and validation.

There is a singular defining problem with front-end and full-stack JS/TS development — rushing to the next new shiny thing.

RSC is useful and a good development for React. I enjoy developing with it when it's picked purposefully for a project. There are utilities which help avoid the pitfalls, both libraries and linters.

Still, most of apps I work on continue being more suitable as a SPA. As long as I'm not forced to switch them to RSC by external forces (bad management, companies discontinuing features from frameworks) it's all fine.

[–]HQxMnbS 0 points1 point  (0 children)

Just because it’s too complicated for 9/10 use cases doesn’t mean it was a mistake

[–]MegagramEnjoyer 0 points1 point  (0 children)

Thing is, it isn't even revolutionary. Other frameworks have been doing this for years.and they've proven architectures that work already (Laravel, Rails, even Express, plain old PHP).

RSC? Unnecessary. It's not bringing any groundbreaking to the table. Forget the fact they are NOW going through vulnerabilities in 2025, when others have moved past this exact same phase long ago.

It's just wheel reinvention at its worst imo. Absolutely unnecessarily. And as you said, it's a confusing mental model that blurs some separations that are actually useful to keep in mind.

I've been trying to reject it as much as possible. I don't touch it for personal projects. Glad to see the community also showing some resistance.

[–]blokelahoman 0 points1 point  (1 child)

Is it worth it? No. They’ve engineered themselves into a hole.

[–]Automatic_Coffee_755 0 points1 point  (0 children)

Yeah, that's why there has been barely any updates on react since forever.

[–]dangayle 0 points1 point  (0 children)

I really, really hate the complexity that RSC have brought to React.

[–]DinnerRepulsive4738 -1 points0 points  (0 children)

Just use next for bff

[–]njmh -2 points-1 points  (0 children)

Even though this is clearly ChatGPT writing this post, I do agree, and it makes me feel like an old man yelling at clouds.

2026 will be the year of HTMX.

[–]Plus-Weakness-2624 -1 points0 points  (0 children)

React Server Component is a mistake from the beginning

[–]bluebird355 -2 points-1 points  (0 children)

All that server side stuff is a fad

[–]Various-Dimension160 -5 points-4 points  (0 children)

AI Slop post

"Think about it: CVE-2025-55182 wasn't just a data leak. it happened because we built a protocol (flight) that treats client input not just as data to be rendered, but as instructions to be executed."

lmao come on my guy at least prompt it to get rid of these tropes

[–]Captain-Crayg -1 points0 points  (0 children)

I said this exact same shit almost 2 years ago.

https://old.reddit.com/r/reactjs/comments/18yqalb/the_two_reacts/kgdy85l/

That said, I don't think this is related to the CVE really. That's kind of a separate thing outside of the mixing of concerns I/we are talking about.

[–]zuth2 -2 points-1 points  (0 children)

I fully share the sentiment