Sign in

Wyatt Johnson

@wyattjoh.ca
381 followers 108 following 55 posts

Software Engineer. Previously @vercel.com working on @nextjs.org, voxmedia.com, coralproject.net, foundation.mozilla.org. (he/him) proudly 🏳️‍🌈 wyattjoh.ca

PostsRepliesMedia
Wyatt Johnson @wyattjoh.ca · 27/02/2026
Curious if there's a good pattern for having open source projects that are dependencies of applications to automatically include skills for agents that could be symlinked from the node_modules directory. Seems interesting to provide context for agents for a release of the installed dependency.
010
Wyatt Johnson @wyattjoh.ca · 26/02/2026
Been using handy.computer for dictation using Parakeet (v3) for a few weeks now. Enabling the post processing step to make corrections to the transcribed text has been a game changer. Now if I make a mistake while speaking, I don't have to restart, I can just make the correction in flow!
000
Wyatt Johnson @wyattjoh.ca · 02/02/2026
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.com
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
041
Reposted by Wyatt Johnson
Nick Funk 🇨🇦 @nickfunk.com · 25/01/2026
Gifting another one out because people need to be reading this www.theverge.com/policy/86741...
theverge.com
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.
022
Wyatt Johnson @wyattjoh.ca · 27/12/2025
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.com
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
000
Wyatt Johnson @wyattjoh.ca · 26/12/2025
Ever wondered how much Plex you've watched? I made a thing! wrapped.wyattjoh.dev
wrapped.wyattjoh.dev
Plex Wrapped
Discover your watching habits from the past year. See your top movies, shows, genres, and more.
120
Wyatt Johnson @wyattjoh.ca · 24/12/2025
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.
010
Wyatt Johnson @wyattjoh.ca · 23/12/2025
These AI generated "wrapped" are getting out of hand 🤣, very cool one from @incident.io
021
Wyatt Johnson @wyattjoh.ca · 20/12/2025
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
071
Wyatt Johnson @wyattjoh.ca · 19/12/2025
You might find this interesting! github.com/github/gh-sk...
github.com
GitHub - github/gh-skyline: A GitHub CLI extension to generate a 3D model of your GitHub contribution history
A GitHub CLI extension to generate a 3D model of your GitHub contribution history - github/gh-skyline
010
Wyatt Johnson @wyattjoh.ca · 19/12/2025
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
220
Wyatt Johnson @wyattjoh.ca · 19/12/2025
How'd you generate that 👀
100
Wyatt Johnson @wyattjoh.ca · 19/12/2025
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 😅
000
Wyatt Johnson @wyattjoh.ca · 19/12/2025
Such a cool article!! Love seeing these types of projects in the crypto space, they're so cool!
020
Wyatt Johnson @wyattjoh.ca · 17/12/2025
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...
gitnation.com
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 ...
060
Wyatt Johnson @wyattjoh.ca · 17/12/2025
I loveddd that talk too. Such a refreshing take actually focusing on the meat of UX problems that are interesting.
000
Wyatt Johnson @wyattjoh.ca · 16/12/2025
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?
110
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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
100
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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.
200
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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.
000
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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.
nextjs.org
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.
000
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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).
110
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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.
110
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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.
120
Wyatt Johnson @wyattjoh.ca · 04/12/2025
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?
110
Wyatt Johnson @wyattjoh.ca · 27/11/2025
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.
030
Reposted by Wyatt Johnson
Next.js @nextjs.org · 22/10/2025
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
36516
Reposted by Wyatt Johnson
Next.js @nextjs.org · 10/10/2025
Next.js 16 (beta) • 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-1...
nextjs.org
Next.js 16 (beta)
Next.js 16 beta includes stable Turbopack, file system caching, React Compiler support, smarter routing, new caching APIs, and React 19.2 features.
3585
Wyatt Johnson @wyattjoh.ca · 02/09/2025
As an exercise to learn Rust this holiday, I took time to rewrite a CLI tool I wrote initially in Deno into Rust using Claude Code. Had it annotate any Rust-isms in the code so it's easier to read and understand, learned a lot!
github.com
GitHub - wyattjoh/vercel-scripts: An interactive CLI tool for managing Vercel and Next.js development workflows through a collection of reusable scripts.
An interactive CLI tool for managing Vercel and Next.js development workflows through a collection of reusable scripts. - wyattjoh/vercel-scripts
040
Wyatt Johnson @wyattjoh.ca · 28/08/2025
Looking forward to the strict by default!
020
Wyatt Johnson @wyattjoh.ca · 15/08/2025
I've been working with Claude Code a lot lately and built this status line project to track AI usage in real-time 📁🤖💰📈🌿 Shows model info, session costs, context usage %, git branch & more! github.com/wyattjoh/cla... #ClaudeCode #TypeScript #Deno
github.com
GitHub - wyattjoh/claude-status-line: A TypeScript/Deno-based status line for Claude Code that displays project information, git branch, model details, and session time remaining.
A TypeScript/Deno-based status line for Claude Code that displays project information, git branch, model details, and session time remaining. - wyattjoh/claude-status-line
040
Wyatt Johnson @wyattjoh.ca · 15/08/2025
Any chance we can see MCP server support in iOS? Would beat Claude to the implementation if you could 👀
000
Wyatt Johnson @wyattjoh.ca · 11/08/2025
Absolutely. I’m using with Deno and it’s just the most pleasant thing. The automatic docs are a game changer.
010
Wyatt Johnson @wyattjoh.ca · 11/08/2025
It feels like the Go module authoring flow, but streamlined for Typescript. Even their publishing from GitHub Action's is like a one-liner 🤯
120
Wyatt Johnson @wyattjoh.ca · 11/08/2025
Been spending so much time creating new packages on JSR and experimenting with @deno.land. Been such a nice experience 😍. Cranked out 6 new projects and ported some others to use Deno, publishing has never been so easy.
160
Wyatt Johnson @wyattjoh.ca · 05/08/2025
🚀 Just shipped @wyattjoh/jsr-mcp - an MCP server that gives LLMs full access to the JSR registry! Search packages, analyze dependencies, check quality scores, and even publish new versions - all through natural language with Claude or GPT. jsr.io/@wyattjoh/jsr-mcp github.com/wyattjoh/jsr-mcp
jsr.io
@wyattjoh/jsr-mcp - JSR
@wyattjoh/jsr-mcp on JSR: Model Context Protocol server for JSR (JavaScript Registry)
030
Wyatt Johnson @wyattjoh.ca · 05/08/2025
🚀 Just published imessage-mcp to JSR! Access your iMessage data programmatically with this MCP server for macOS. Search messages, browse chats, and query contacts - all through a clean API. Built with @deno_land, ready to integrate with your LLM workflows. jsr.io/@wyattjoh/imessage-mcp
jsr.io
@wyattjoh/imessage-mcp - JSR
@wyattjoh/imessage-mcp on JSR: MCP server for macOS iMessage database access
030
Wyatt Johnson @wyattjoh.ca · 16/01/2025
Yeah I found that rule recently, it finds a lot of cases, but I was hoping for deeper knowledge of the AST graph that also looked at subsequent calls `await` and understood, but eslint is more of a "single-file-pony" kind of linter 😅
010
Wyatt Johnson @wyattjoh.ca · 15/01/2025
I wish there was a way to statically analyze your Typescript code to make Node.js's `unhandledPromiseRejection` redundant. We know the kind of operations that create tasks, why can't Typescript (or a linter) tell you that you forgot to await/catch?
050
Wyatt Johnson @wyattjoh.ca · 31/12/2024
Spent most of my holidays creating and exploring making @raycast.com extensions. I wish developing on native was this easy 😍
030
Wyatt Johnson @wyattjoh.ca · 22/12/2024
What did you use to generate this 😍
100
Wyatt Johnson @wyattjoh.ca · 17/12/2024
That's where the magic of `use cache` comes in, the component itself can just have that directive added and the results of that component/function will be cached according the the lifetimes specified within it. We're looking for feedback though, open a discussion with questions :)
110
Wyatt Johnson @wyattjoh.ca · 17/12/2024
The new primatives like `use cache` are designed to simplify the caching experiences for Next.js. Lots of neat things coming that are currently still behind experimental flags.
110
Wyatt Johnson @wyattjoh.ca · 17/12/2024
What part of PPR do you find strange? Would love to help explain ☺️
110
Wyatt Johnson @wyattjoh.ca · 19/11/2024
Did you switch it to Go 😅
110
Wyatt Johnson @wyattjoh.ca · 15/11/2024
How do you use after for A/B testing 👀
110
Wyatt Johnson @wyattjoh.ca · 13/11/2024
We're either looking at making it work via a client side fetch perhaps (similar to how @astro.build does with their server islands approach) which wouldn't require any special features. Other CDN's could support PPR natively, which is sort of a form of Edge Side Includes, but that's about it.
010
Wyatt Johnson @wyattjoh.ca · 13/11/2024
3.) The responses are always streamed, so in the case of being served from Vercel, we can do streaming compression for the content on the same stream.
010
Wyatt Johnson @wyattjoh.ca · 13/11/2024
2.) The static shell is just HTML that's outputted by Next.js, the same as what SSG would be, but just the static parts of the page, hence the "static" name of the shell. It would include the fallbacks if the children accessed request data.
110
Wyatt Johnson @wyattjoh.ca · 13/11/2024
Think of "use cache" like another way of writing unstable_cache, but with way more features. Anything that's wrapped in "use cache" can access things like I/O (fetch or fs) and not be considered dynamic.
010