Today’s issue: Curing my gambling addiction with CSS, willingly attracting bots to my OSS project, and proving that I’m alive at a very real coffee shop.
Welcome to #472.

The Main Thing

How it feels writing about a new JavaScript framework in 2026
A new JS framework for old time’s sake
React gave us hooks, Solid gave us signals, and Svelte 5 gave us runes. Gea claims you don’t need any of that (and it’s not a rabid Web Components anarchist either).
Instead, this less-than-a-week-old JavaScript framework hands off the heavy lifting to the compiler, while you just use regular JS classes and functions. A ~10kb reactive framework with zero new primitives that benchmarks faster than Svelte and Solid does sound suspiciously good, so let’s take a closer look:
-
No new concepts – No signals, hooks, dependency arrays, or compiler directives. Stores are classes, components are classes or functions, and computed values are getters. If you’ve written a JavaScript class before, you already know the API. The compiler does everything else.
-
Compile-time reactivity – The Vite plugin reads your JSX, works out what depends on what, and generates direct DOM updates without a VDOM sitting in the middle.
-
Mutation just works – State lives in classes wrapped by a deep Proxy. this.count++ does what you’d expect. Push to an array, update a nested object, and it all triggers the right updates without any special syntax. Objects and arrays passed as props are the same reactive proxy, which means child components can mutate parent state directly. Convenient but a big departure from the one-way data flow React and Vue developers are used to.
Bottom Line: Gea is so new that if you ship a project with it today, you’ll officially be a top-5 most important person in the ecosystem. But it does look genuinely interesting for performance-maxxing SPAs, especially if you’re tired of the mental overhead from hooks/signals/runes.
Or if you’re someone who still appreciates seeing a weird little JavaScript framework pop up every once in a while.

Our Friends
(With Benefits)

When your team is writing code faster than ever, but shipping features slower than ever
AI fundamentally changes how software gets built. Faster developers are building more features and opening more PRs than ever before… but QA is still the bottleneck.
Join QA Wolf co-founder & CEO Jon Perl for a live webinar to see how QA Wolf’s AI-powered testing platform equips teams for an AI-native SDLC.
You’ll see:
-
Mapping AI that autonomously maps app workflows
-
Automation AI that generates deterministic, code-based tests
-
Parallel runs that return results in minutes
RSVP here for the workshop

Pop Quiz
Meticulous generates and maintains an exhaustive suite of e2e UI tests that covers every edge case of your web app. See why CTOs at Notion, Dropbox and LaunchDarkly rely on them.
What gets logged?
class BankAccount {
constructor(initialBalance) {
this.balance = initialBalance;
this.minimumBalance = 20.00;
}
deposit(amount) {
this.balance += amount;
}
withdraw(amount) {
if (this.balance - amount <= this.minimumBalance) {
return false;
} else {
this.balance -= amount;
return true;
}
}
getBalance() {
return this.balance;
}
}
const myAccount = new BankAccount(150.00);
myAccount.deposit(0.10);
myAccount.deposit(0.20);
myAccount.withdraw(130.30);
console.log(myAccount.getBalance());

Cool Bits
-
The MadCSS Tournament is heating up, and I just know there’s still enough time for me to make back all the money I lost betting on Adam Wathan on Kalshi.
-
Orkes Academy is a new learning platform for Orchestration with courses on architecture & design, building pipelines, and more. And they’re giving away a *free hoodie* when you complete any course 👀 [sponsored]
-
Matteo Collina wrote about why Node.js needs a virtual file system.
-
BitTorrent creator, Bram Cohen released a demo of Manyana - a vision for the future of version control that uses CRDTs for better conflict resolution. Thanks for all the free UFC fights over the years, my guy.
-
Greptile in Action shows some of the top bugs caught by Greptile’s AI code reviewer in popular OSS repos like OpenClaw, PyTorch, Netflix, PostHog, and more. And it links to the specific GH issue, so you can check it out. [sponsored]
-
[Shadify]((https://github.com/CopilotKit/shadify) lets you generate Shadcn components with natural prompts.
-
Will Keleher shared small programming tricks that can have a big impact on productivity. I’m typically more interested in small pills that have a big impact on my productivity, but this seems helpful too.
-
Andrew Nesbitt shared some advice on how to attract AI bots to your open source project. Next week he’ll be writing about how to attract bees to your 6 year old’s birthday party.
-
James Garbutt wrote about the three pillars of JavaScript bloat, including why npm dependency trees are full of redundant packages.
-
Steve Krouse wrote about how the reports of code’s death are greatly exaggerated. Because if there’s one thing I learned on the internet last week, it’s that if someone is really dead they definitely wouldn’t be able to pick up a totally real cup of coffee at a very real coffee shop with their normal, human hands.

Pop Quiz: Answer
Answer: 150.29999999999998
We would expect to see 20.00, but due to floating point arithmetic in JavaScript, we get an unexpected result. To fix this issue, we can represent money as integers (e.g., cents) and use Math.round to avoid the pitfalls of floating-point calculations. Here is the updated code:
class BankAccount {
constructor(initialBalance) {
this.balanceCents = Math.round(initialBalance * 100);
this.minimumBalanceCents = 2000;
}
deposit(amount) {
this.balanceCents += Math.round(amount * 100);
}
withdraw(amount) {
const withdrawalCents = Math.round(amount * 100);
if (
Math.round(this.balanceCents - withdrawalCents) < this.minimumBalanceCents
) {
return false;
} else {
this.balanceCents -= withdrawalCents;
return true;
}
}
getBalance() {
return this.balanceCents / 100;
}
}
const myAccount = new BankAccount(150.0);
myAccount.deposit(0.1);
myAccount.deposit(0.2);
myAccount.withdraw(130.3);
console.log(myAccount.getBalance());

Want us to say nice things
about your company?
Built with ❤️ by Fireship
50 W Broadway Ste 333 PMB 51647 Salt Lake City, Utah 84101