The Atoning for Sins of React

Issue #508.July 31, 2026.2 Minute read.
Bytes

Today’s issue: Flue 2.0 drops the harness, what I learned from Heidi Klum, and some old-fashioned security-incident-driven marketing.

Welcome to #508.


Eyeballs logo

The Main Thing

A priest spraying baptismal water with a squirt gun

Watching Octane compile React's sins away

The Atoning for Sins of React

Becoming an adult is realizing that buying the things you were denied as a child is a part of your healing journey. At least that’s what I told myself before I put $623 of Star Wars cards in my cart on eBay. This might explain why Dominic Gannaway is building Octane.js with the unlimited tokens he has from working at OpenAI—to heal the last 10 years of using React.

If you aren’t familiar with Dominic’s work, in addition to being on the React and Svelte core teams, he is the creator of Inferno, Ripple, and most recently TSRX. All of these projects in one way or another look to fix both the performance and ergonomics of using React. If there is anyone who can fix the sins of React, it’s probably Dominic and his solution: combining the runtime with a compiler.

Here’s what Octane does:

  • Compiles away the virtual DOM: Instead of using a virtual DOM, Octane compiles components ahead of time into template clones and direct DOM writes, removing the runtime overhead of building and diffing element trees on every update.

  • Eliminates the rules of hooks: In Octane, you can remove the dependency array from useEffect, useMemo, and useCallback and conditionally render hooks like this:

import { useState, useEffect } from 'octane';

export function Counter(props) @{
	const [count, setCount] = useState(0);

	// A hook behind a condition is fine — slots are
	// assigned by call site, not call order.
	if (!props.paused) {
		useEffect(() => {
			console.log('count is now', count);
		}); // the compiler infers [count]
	}

	<button onClick={() => setCount(count + 1)}>
	  {'Count: ' + count}
	</button>
}
  • Improves async: Octane’s compiler memoizes promises so you can pass them to use() during render without creating infinite loops. It also eliminates waterfalls by parallelizing independent use() reads. It also allows descendants to prefetch while the parent is rendering.

  • React compatibility: You might be left wondering if Octane is a drop-in replacement for React, and the answer is … not quite. You can render Octane components as islands inside of an existing React app, but mostly, it is designed as a replacement for React that provides bindings for many popular libraries. There’s no support for React Server Components right now, so Next.js users are out of luck.

Bottom Line: It’s debatable how much rendering performance matters in today’s day and age, but Octane might finally be the project that atones for the sins of React and brings Dominic the peace he’s been searching for.


Convex logo

Our Friends
(With Benefits)

A basketball player beneath a shattered backboard

When your agent decides to play with Postgres

The backend platform your agents can’t break

Letting an agent touch your database is a scary proposition. When Sol and Fable were benchmarked on Postgres, 9 out of 10 apps tested had corrupted data writes because of concurrency issues.

Thankfully, Convex is correct by default. Every mutation is a serializable transaction, with built-in retries, so the first tool your agent reaches for “just works.”

But writing data is only half of the equation. Screens need to display these updates, which is why every query on Convex is a live subscription that clients can use to update the UI.

The result? Less code, fewer tokens, fewer mistakes.

Try Convex today.


Cool Bits logo

Cool Bits

  1. Sarah Drasner created a React hook built on the WebMCP spec to help agents use your app more efficiently.

  2. Thinking Machines released a smaller version of its model Inkling that “achieves comparable performance at a quarter of the size.” Where have I heard that line before?

  3. SerpApi lets you scrape 100+ search engines with a single API. One simple GET request gets you real-time results from Google Search, Maps, AI Overviews and more – all as structured JSON. [sponsored]

  4. OpenAI cut Luna’s price by 80% and Terra’s by 20% and made Sol a lot faster.

  5. After OpenAI’s marketing initiative confession that a rogue AI agent hacked Hugging Face, Anthropic ALSO found that Claude has been escaping its sandbox. Oops 😉.

  6. Tanner has been lighting tokens on fire to bring you @tanstack/charts, an SVG-based charting library that is strongly typed and framework-agnostic.

  7. Rami Maalouf wrote a great post about the only three AI tools you need to build mobile apps: skills, MCP, and a plan. [sponsored]

  8. James Baduor wrote an article on taste that teaches an important lesson I learned watching Project Runway: if you don’t know when to stop, “one day you’re in—the next you’re out.”

  9. Devon Govett and the React Aria team just released version 1.20.0, featuring a new PreviewTrigger, which is a spicier tooltip, TokenField for rendering @mentions, and a better API for useKeyboard.

  10. Fred K. Schott just announced version 2.0 of Flue, the agent harness framework the open agent framework.