Today’s issue: The touching birth story of Prettier, the shadcn loyalty oath, and socially engineering your coding agent.
Welcome to #430.
Testing out bleeding edge tech is my passion
Cloudflare celebrated their 15th birthday last week by doing what they do every year – releasing a bunch of new stuff, giving a bunch of money to open source, and doing a bunch of mushrooms at Matthew Prince’s mansion in Park City tweeting a lot.
One of the biggest highlights was them outsourcing Cap’n Web, a new RPC system for browsers and web servers that’s written in pure TypeScript.
If you’ve never touched RPC before, it’s basically a way to call functions on another computer as if they’re local, without worrying about REST routes or GraphQL schemas – just api.hello()
that magically runs somewhere else. Tools like tRPC and gRPC already do some flavor of this, but Cap’n Web takes it further by leaning fully into JavaScript’s async-and-object world.
Instead of forcing you to design rigid schemas or pass tokens everywhere, it lets both sides pass functions and objects by reference. This means a server can call back into the client, promises can be pipelined to avoid round trips, and your APIs end up looking like plain vanilla JavaScript code that can run in browsers, Workers, runtimes, and anywhere else.
Let’s take a closer look at what else it gets you:
Bidirectional calls – Servers can call client callbacks directly, so real-time collab patterns just work.
Promise pipelining – You can chain async calls in one trip, solving REST’s “waterfall” problem without any GraphQL overhead.
Built-in capability security – Auth and permissions are part of the object model, not bolted on after.
Bottom Line: Cap’n Web makes network calls feel like basic method calls in JavaScript. It’s also tiny, type-safe, and kind of turns the whole web into one big distributed object graph. And that’s not just the psilocybin talking.
![]() ![]() ![]() ![]() |
When you realize AI can do the worst part of your job for you
AI isn’t eliminating QA jobs, but it is shifting their focus away from repetitive testing to a more strategic role.
That’s why QA Wolf’s Senior Director of Engineering is hosting this fireside chat to show specific ways that his team and other eng leaders are using AI for QA.
You’ll learn:
RSVP for the session – and learn how your team can use AI to improve your QA game.
They created this complete guide to Smart Data Extraction that shows you everything you need to know about accessing data trapped inside your documents.
let x = 5
let y = 10
[x, y] = [y, x]
The React Foundation was just announced as the new home for React, and Zuck has personally reassigned the React team to content moderation duty for the new Vibes feed.
They announced a bunch of other stuff at React Conf so far (here’s the Day 1 livestream), and I promise we’ll write a full rundown when the dust settles.
Zed is a next-gen code editor that’s fast (written in Rust) and has a bunch of cool features (debugger, AI agent editing, native git support, lots more). We’ve written about it in the past because it’s a really cool project, and you should check it out. [sponsored]
shadcn (the component collection) just launched a bunch of new components for shadcn button groups, fields, input groups, empty states, and more. shadcn (the person) is probably the OSS maintainer that’s most capable of starting a cult of devoted followers within the next five years. Personally, I can’t wait to serve our fearless leader.
Nicholas C. Zakas wrote about what’s coming in ESLint v10.
Vinay Perneti (VP of Engineering at Augment Code) led this tactical panel on Making AI work for your team at ELC Annual 2025. They share how their engineering teams are getting the most value out of AI in their day-to-day work, and where it still falls short. [sponsored]
Simon Willison wrote about vibe engineering and how it is totally different and better and safer and smarter than boring old vibe coding.
Oxlint 1.20.0 comes with a bunch of new linting rules and support for disable directives in type-aware rules.
CodeRabbit CLI gives you senior-level code reviews directly in your terminal and acts as a quality gate for all the code that Claude, Codex, Gemini, and you write. [sponsored]
The Svelte team created the official Svelte MCP to provide relevant documentation to your coding agent and socially engineer it into writing Svelte code instead of Next.js for once.
Lizz Parody wrote about 15 recent Node.js features that replace popular npm packages.
Vjeux wrote about the birth of Prettier almost 10 years ago. Thankfully, it’s a lot less graphic than when my mom used to tell my birth story to strangers at the grocery store when I was a kid.
If you run this code you get a “ReferenceError: y is not defined” error. This is because the JavaScript engine does not automatically insert a semicolon after 10
because the subsequent line can be parsed as a continuation of the expression. Meaning, JavaScript interprets the code like this:
let x = 5;
let y = 10[x, y] = [y, x];
To fix the issue, we can update our code to use semicolons or wrap the expression in parentheses:
let x = 5;
let y = 10;
([x, y] = [y, x]);
It’s comforting to know Douglas Crockford is (probably) out there still shaking his fist at this “insanely stupid code”.