Wyatt Johnson
banner
wyattjoh.ca
Wyatt Johnson
@wyattjoh.ca
Software Engineer. Previously @vercel.com working on @nextjs.org, voxmedia.com, coralproject.net, foundation.mozilla.org. (he/him) proudly πŸ³οΈβ€πŸŒˆ

https://wyattjoh.ca
Pinned
My @reactadvanced.gitnation.org talk is up!! In it I discuss some changes to the segment API's that we introduced in Cache Components in Next.js and explain how the new mental modal is designed to give feedback during development to enhance the navigation experience.

gitnation.com/contents/fro...
From Segments to Suspense: The Future of Next.js Caching by Wyatt Johnson
Introduction to Cache Components in Next.js 16, transforming the app router with new features like partial pre-rendering, Dynamic I.O., and caching directives. Deep dive into static params generation ...
gitnation.com
Just ported my personal site over to @astro.build with a custom @bun.sh adapter I wrote πŸš€

πŸ‘‹ I'm currently looking for my next role, so if you're hiring, reach out!

- Astro + Bun for blazing fast SSR
- Supports ISR and SWR
- Hosted behind @cloudflare.social

github.com/wyattjoh/ast...
GitHub - wyattjoh/astro-bun-adapter: Astro adapter for Bun with optimized static file serving and ISR (Incremental Static Regeneration)
Astro adapter for Bun with optimized static file serving and ISR (Incremental Static Regeneration) - wyattjoh/astro-bun-adapter
github.com
February 2, 2026 at 12:43 AM
Reposted by Wyatt Johnson
Gifting another one out because people need to be reading this

www.theverge.com/policy/86741...
On the ground in Minneapolis after the killing of Alex Pretti
Photographer Steven Garcia followed peaceful protestors as they withstood being teargassed by ICE agents.
www.theverge.com
January 25, 2026 at 5:15 AM
Made a little tool with Ink that lets you manage your Claude Code Skills, MCPs, and Slash Commands in a neat TUI

github.com/wyattjoh/cla...
GitHub - wyattjoh/claude-slash-command-manager: Interactive TUI for managing Claude Code slash commands, agents, and skills
Interactive TUI for managing Claude Code slash commands, agents, and skills - wyattjoh/claude-slash-command-manager
github.com
December 27, 2025 at 6:15 PM
Ever wondered how much Plex you've watched? I made a thing!

wrapped.wyattjoh.dev
Plex Wrapped
Discover your watching habits from the past year. See your top movies, shows, genres, and more.
wrapped.wyattjoh.dev
December 26, 2025 at 8:30 PM
I felt really inspired watching your talk. In the age of AI and how it’s making people think about new UX loops that they never even considered before. Really excited to see what the next era is going to look like.
December 24, 2025 at 5:05 AM
These AI generated "wrapped" are getting out of hand 🀣, very cool one from @incident.io
December 23, 2025 at 9:41 PM
This is so freaking cool. I’m hoping for a future where all the Peter F Hamilton books become a reality with the device in your pocket alone
Such an underrated announcement: The Gemma 270 Mil model handles tool calls now.
- Runs on mobile hardware, no server needed
- Can handle actions like navigating an app (ex. Make a calendar appointment)
- Can be trained on consumer hardware

Huge! youtu.be/-Tgc_9uYJLI?...
Introducing FunctionGemma
YouTube video by Google for Developers
youtu.be
December 20, 2025 at 9:08 PM
Reminds me of the GitHub 3D model files they released that one year, I went and sent it off to get printed and keep it on my desk
December 19, 2025 at 5:42 PM
How'd you generate that πŸ‘€
December 19, 2025 at 5:17 PM
An aside, been using httpie instead of curl for the past few years, reading curl commands now makes me feel like I'm reading a foreign language πŸ˜…
December 19, 2025 at 5:17 PM
Such a cool article!! Love seeing these types of projects in the crypto space, they're so cool!
December 19, 2025 at 5:14 PM
My @reactadvanced.gitnation.org talk is up!! In it I discuss some changes to the segment API's that we introduced in Cache Components in Next.js and explain how the new mental modal is designed to give feedback during development to enhance the navigation experience.

gitnation.com/contents/fro...
From Segments to Suspense: The Future of Next.js Caching by Wyatt Johnson
Introduction to Cache Components in Next.js 16, transforming the app router with new features like partial pre-rendering, Dynamic I.O., and caching directives. Deep dive into static params generation ...
gitnation.com
December 17, 2025 at 9:03 PM
I loveddd that talk too. Such a refreshing take actually focusing on the meat of UX problems that are interesting.
December 17, 2025 at 7:11 PM
Depends! Next.js includes a lot of data in the cache keys for different responses so it's important that those responses respect the `?_rsc=` hash which may be high cardinality.

What's the intended state of your deployed application wrt CDN cache behaviour?
December 16, 2025 at 12:41 AM
There is no revalidation phase that occurs for any of the caches that is independent of the static render for the static shell. When the static shell needs to revalidate, all caches for the render are treated as expired and not fetched. This is the interplay between the Cache Boundaries and ISR
December 4, 2025 at 11:38 PM
The same rules apply here. If you're using replicas here, you should likely change that value to zero to ensure that the memory cache is not used and instead prefer the shared FS based cache.
December 4, 2025 at 11:30 PM
I'm not sure what specifically you're showing in the video (I see that you're refreshing, but not sure what the desired state should look like), but it's also important to know that when the cache life value is too low, it's treated as dynamic.
December 4, 2025 at 11:30 PM
If you're using a custom cache handler in a distributed mode, you'll need to set `cacheMaxMemorySize` to `0` in your Next.js config file to disable the built-in memory cache. It'll then only rely on the filesystem and the custom cache handlers.
next.config.js: cacheHandler | Next.js
Configure the Next.js cache used for storing and revalidating data to use any external service like Redis, Memcached, or others.
nextjs.org
December 4, 2025 at 11:26 PM
When Next.js is running locally, it's saved in a file in the `.next` directory as a file ending with `.html`. On Vercel, that file is stored by the Vercel Infrastructure which responds to requests with either a complete static shell (no dynamic) or a partial one (some dynamic).
December 4, 2025 at 11:23 PM
For that user that made that request, they will be served the stale copy of the static shell, while the framework would be triggering a static render out-of-band to replace the stale content. Once the expiry time has been reached, it will refuse to serve the stale shell and instead should block.
December 4, 2025 at 9:04 PM
As the intermediate caches present on a page all contributes to the static shell itself, it also inherits it's cache life. When a request is made after the revalidation time but before the expiry time, the cache handler should return `undefined` to indicate that it's no longer fresh.
December 4, 2025 at 9:04 PM
If the cache entry has expired in the cache handler, as the docs indicate, it should return `undefined`. Revalidation is a process that will run the "work function" of the cache entry again, followed by a call to `set` to update the entry. Which part of background revalidation are you curious about?
December 4, 2025 at 8:45 PM
Private is indeed not persisted, it’s only used as an escape hatch for those that can’t adopt the other cache directives. Only used to improve the prefetching and client router cache.
November 27, 2025 at 2:35 AM
Reposted by Wyatt Johnson
Next.js 16

β€’ Cache Components
β€’ Turbopack enabled by default
β€’ Turbopack file system caching (beta)
β€’ Optimized navigations and prefetching
β€’ Improved caching APIs
β€’ Build Adapters API (alpha)
β€’ React 19.2

nextjs.org/blog/next-16
October 22, 2025 at 12:37 AM