
Today’s issue: The token mafia, the CSS bomb, and why all the cool kids can’t stop “gisting.”
Welcome to #513.


You cheated on me? When I specifically asked you not to?
Remember when your ninth-grade girlfriend who went to another school broke up with you on AIM the day before your 15th birthday party?
That’s basically what happened to Solid.js last week when they released Solid 2.0 RC, the biggest rework in the framework’s history.
Cursor engineer (and former React Core Team member) Lauren Tan warmly congratulated them on the big launch… then simultaneously confirmed the rumors that Cursor had migrated off Solid and onto React 💔.
She gave a few nuanced reasons for the breakup like Signals-based perf footguns, but you can probably guess the TLDR: coding agents are better and more predictable at writing React, especially in complex codebases.
That’s understandable but still a bummer because Solid 2.0 introduces a lot of cool stuff:
Async is now first-class. Computations can return Promises or async iterators and the reactive graph handles suspending and resuming automatically. You can pass a Promise straight into createMemo and everything downstream understands.
<Suspense> is dead. Its replacement <Loading> only covers first render, while isPending() tracks refreshes in the background, so your UI stops getting nuked back to a spinner every time data revalidates.
Mutations have a home. action() plus new optimistic primitives like createOptimisticStore collapse the full optimistic-update dance into one flow, so you don’t need to write it from scratch like a neanderthal.
Bottom Line: Nobody gets fired for buying IBM making the agents use React. But Solid 2.0 is betting that if it can absorb all the async complexity for you, there will be less for your agents to screw up in the first place.
And maybe that’ll be enough for you to give it a try.


Me right before I merge 3,000 LOC I've barely read
They just launched CodeRabbit Security to give you continuous code security that’s powered by actual reasoning instead of brittle regex rules.
Their security agents are able to think like an AI-driven attacker and hunt for real vulnerabilities across your entire codebase. Then they:
Prioritize real risks based on exploitability and blast radius, instead of spamming you with false positives.
Explain the problems in plain English.
Secure your code with drafted fixes ranked by risk, right in the PR. All you have to do is merge.
It runs a security review on every PR before merge, plus scheduled deep scans across your full codebase.
Get 10 free code scans to try it out and see why Jensen Huang said, “We’re using CodeRabbit all over NVIDIA.”

Want to become the AI expert on your team? Come to Vegas this October and learn specific tools and workflows from top developers to ship better code faster with AI. Register now.
function getNumber() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const randomNumber = Math.random();
if (randomNumber > 0.5) {
resolve(randomNumber);
} else {
reject("Number is too low");
}
}, 1000);
});
}
async function printNumber() {
const number = await getNumber();
console.log("The number is:", number);
}
printNumber();

The Lovable team wrote about how they migrated lovable.dev off Next.js and onto TanStack Start. Because apparently the only thing coding agents like more than purple gradients is stirring up framework drama.
Matt Lenhard wrote about the token brokers who are making a spread from selling tens of millions of LLM tokens from discounted offers. No, we are definitely not in an AI bubble, why do you ask?
Only idiots write manual tests – modern engineering teams like Notion, Dropbox and LaunchDarkly use Meticulous to maintain e2e UI tests that cover every edge case of your web app. [sponsored]
Tyler Sticka shared a nice little example for using the paint-order property in CSS.
Right on cue, Gareth Heyes wrote about how CSS is the bomb inside your inbox that’s ripe for exploitation by attackers. That’s why I chose to never get good at CSS. Too risky.
The Expo team shared 5 OTA Update best practices for React Native teams that might just save your a** the next time you ship a bug to prod. It’s how NYC’s transit app was able to go from a major bug report to a deployed fix in under 90 seconds. [sponsored]
pnpm 12 RC just came out, and the headline feature is that it’s now written in Rust. Zig team: you have 24 hours to respond.
Dave Rupert created MicroLighter, a small client-side syntax highlighter that uses the CSS Custom Highlights API.
Convex just raised a $57m Series B to keep building the best reactive backend platform for you (and your agents). And it’s all 100% organic TypeScript. [sponsored]
Shawn Walton wrote on the Yelp engineering blog about how his team migrated a large Flow monorepo to TypeScript. I’d rate it a 4.1/5.0 because the service was a little slow, but the breadsticks had great flavor.
Vitest 5 enables clearMocks by default and adds a few more nice DX touches.
Cody Mazza-Anthony and Paige Vegna wrote on the Shopify blog about Gisting, which thankfully does not refer to a niche fetish among San Francisco polycules - it’s about compressing LLM context into a set of learned tokens to make the model faster and cheaper. Ok so maybe it’s kind of both.
The printNumber function is not handling the promise rejection. To fix this, you can add a try/catch block around the await statement:
function getNumber() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const randomNumber = Math.random();
if (randomNumber > 0.5) {
resolve(randomNumber);
} else {
reject("Number is too low");
}
}, 1000);
});
}
async function printNumber() {
try {
const number = await getNumber();
console.log("The number is:", number);
} catch (error) {
console.log("Whoops:", error);
}
}
printNumber();