Sam Selikoff
samselikoff.com
Sam Selikoff
@samselikoff.com
Next.js team @vercel.com

youtube.com/samselikoff
revalidateTag (the new form, with the second arg) allows the next read to be stale, then triggers a background rerender.
October 30, 2025 at 11:32 PM
But the way the team intends it to be thought of is as "updating the UI". It's a "pull" of the freshest data in the context of a mutation that the current session kicked off. So I read it more like, "update the UI for this tag".
October 30, 2025 at 11:32 PM
Right, but updateTag basically triggers a read. So in a Server Action, you get the mutation + fresh RSC render in the same round trip.

The name updateTag was a bit strange to me at first, because as you say it's not really "updating the tag"...
October 30, 2025 at 11:32 PM
Basically refresh() is as if you hit +R, but we can send the updated payload in the same round-trip as your mutation. In the past folks used revalidatePath('/') for this but that was overloaded & had the additional behavior of expiring caches.
October 30, 2025 at 7:01 AM
Yes exactly 👍 updateTag is for updating "tagged cached data" (i.e. data that's been "use cache"'d as well as cacheTag'd).

refresh() is for rerendering the RSC tree. So any dynamic data will be refetched (but any cached data that isn't expired won't be).
October 30, 2025 at 7:01 AM
updateTag is for updating cached data, but if you're just mutating and want the dynamic data on the page to update refresh is what you want
October 30, 2025 at 1:19 AM
Yep understood + agree. Working on a canonical tutorial.

Server-side version of refresh is new, previously folks were using revalidatePath() to accomplish something similar but now that we have it it's the right way to refresh dynamic RSCs. Basically makes your UI look as if you +R.
October 27, 2025 at 5:27 PM
The reason I'd enable cacheComponents even if you're not using "use cache" is because it enables other behaviors like dynamic-by-default, which make Next overall easier + more predictable to work with. For new apps I would think of it as the default mode of Next 16.
October 27, 2025 at 2:59 PM
I would enable cacheComponents in next.config.ts, and just build your app as a dynamic/uncached app to start (i.e. don't worry about "use cache").

Then, after a mutation in a server action, call `refresh()`:

nextjs.org/docs/app/api...

That will send over the updated UI in the same round trip.
Functions: refresh | Next.js
API Reference for the refresh function.
nextjs.org
October 27, 2025 at 2:58 PM
Ah looks good now, hadn't checked since earlier 👍
October 2, 2025 at 6:22 PM
I think it's CDN, I saw sebbie mention is for the sandboxes on react.dev. They work if you fork them.
React
React is the library for web and native user interfaces. Build user interfaces out of individual pieces called components written in JavaScript. React is designed to let you seamlessly combine compone...
react.dev
October 2, 2025 at 4:51 PM
The clock example from Dan's talk was great. I feel like there's some contrived example that can communicate that... maybe a "subway network" demo? I feel like that's relatable (at least for me as a new yorker ^_^)
October 2, 2025 at 4:12 PM
Mic quality? That’s the thing I’m most curious about!
September 25, 2025 at 1:09 PM
It's so tasteful though, and they always still load fast, don't have layout shift, don't highjack scroll, etc. I think they do a really good job of capturing your taste and personality while being exemplary of a professional. I'd wager they really help with sales!
September 24, 2025 at 8:31 PM
Fantastic work man! Always love the detail in your landing pages.
September 24, 2025 at 4:09 PM
It's going to be insanely awesome. Cannot freaking wait
September 23, 2025 at 1:51 PM
Oh yeahhhh! Nice!
September 23, 2025 at 1:49 PM
Very interesting. Nice work exploring a new pattern 👍
August 22, 2025 at 6:19 PM
How do they get passed as props? Do you automatically send them over from the client in the call to re-render the page? Also does this mean the RSCs re-render every time client components re-render? I honestly am not understanding how this could work haha
August 21, 2025 at 2:08 PM
What happens if you conditionally render the RSC based on the client's state value from useState?
August 20, 2025 at 6:34 PM
I had a feeling it must be something like this – cool stuff! Curious to see how it feels, will have to give it a spin soon :)
August 20, 2025 at 6:34 PM
Cool stuff! Love seeing more frameworks exploring RSCs.

How does this example work – I thought it was a fundamental part of the design of RSCs that client components can't import server components?
August 20, 2025 at 5:56 PM
Awesome. I think a <Button pressAction={}> component from Aria would be a killer example to motivate this pattern!
August 1, 2025 at 7:15 PM
Maybe I can work on this next after we get Activity merged
August 1, 2025 at 7:08 PM
Here's another example from from @aurorascharff.no:

aurorascharff.no/posts/buildi...

She actually follows exactly the pattern Seb mentioned in that github thread with Devon
Building Reusable Components with React 19 Actions | Aurora Scharff
In this blog post, we will explore how to build reusable components with React 19 Actions, track transition states, use optimistic updates, and expose action properties for custom logic.
aurorascharff.no
August 1, 2025 at 6:59 PM