<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="preload" as="image" href="https://bytes.dev/images/bytes-banner-rounded.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/eyes.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/dantes-inferno.jpg">
<link rel="preload" as="image" href="https://bytes.dev/images/fb-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/li-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/tw-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/em-share-icon.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/coderabbit-logo.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/wallace-gromit-train.jpg">
<link rel="preload" as="image" href="https://bytes.dev/images/content/spot-the-bug.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/cool-bits.png">
<link rel="preload" as="image" href="https://bytes.dev/images/bytes-icon.png">
<title>Bytes: A TypeScript Compiler Journey from Hell</title>
<meta name="color-scheme" content="light dark">
<meta name="supported-color-schemes" content="light dark">
<link href="https://fonts.googleapis.com/css2?family=Fira+Mono&family=Outfit:wght@400;500;700;900&family=Paytone+One" rel="stylesheet">
<style>@media (prefers-color-scheme: dark) {
.email-wrapper {
color: #F9F4DA !important;
background-color: #0F0D0E !important;
}
hr {
border-color: #262422 !important;
}
mark {
background-color: #231F20 !important;
color: #F9F4DA !important;
}
pre {
background-color: #231F20 !important;
border: 1px solid #231F20 !important;
color: #F9F4DA !important;
}
.bg-alt {
background-color: #231F20 !important;
}
.unsubscribe-link {
color: #504C48 !important;
}
.token.punctuation {
color: #f9f4da !important;
}
}
@media screen and (min-width: 600px) {
.mobile-break {
display: none;
}
}</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table class="email-wrapper" border="0" cellspacing="0" width="100%" style="background-color: #FFF; border-collapse: collapse; color: #231F20; font-family: Outfit, sans-serif; font-size: 18px; width: 100%;"><tbody><tr>
<td style="border-collapse: collapse !important; word-break: normal;"></td>
<td width="600px" style="border-collapse: collapse !important; width: 600px; word-break: normal;"><div style="max-width:600px;padding-top:80px">
<div style="text-align:center"><img width="600" style="max-width: 100%; padding-bottom: 40px;" src="https://bytes.dev/images/bytes-banner-rounded.png" alt="Bytes"></div>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Today’s issue:</strong> This thing called math, subjecting agents to a Google performance review, and why I’ll never listen to another PM.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Welcome to <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/owhkhwuwelpg70fvhr/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvNTMx" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631053">#531</a>.</p>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="80" src="https://bytes.dev/images/content/eyes.png" alt="Eyeballs logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">The Main Thing</h2>
</div>
<div class="bg-alt" style="background-color: #f5f5f5; border-radius: 16px; margin-bottom: 40px; max-width: 100%; padding: 24px; padding-bottom: 12px;">
<img src="https://bytes.dev/images/content/dantes-inferno.jpg" alt="Dante and Virgil stand among figures buried in a fiery landscape" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 17px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">We can get 3x the performance if we migrate this to Rust<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">A TypeScript Compiler Journey from Hell</h3>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It’s only been 3 months since TypeScript 7 aka “the Go port” came out, which was supposed to solve all of our TypeScript perf problems. But in the last few weeks, we’ve had not one, not two, not three, but four “slop ports” of the compiler, which is proof that we’ve reached the 7th level of hell.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">And while it’s hard to focus with the weeping and gnashing of teeth, I suppose it’s fair to ask the question: why is everyone porting the compiler?</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">How did we get here:</strong></p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">When TypeScript migrated to Go, they shipped a native binary that made the compiler run faster, but it meant tools depending on its old JavaScript API could no longer call it directly. Instead, they had to talk to it over a client/server protocol, leaving the tooling ecosystem somewhat fragmented. When you combine this with a Rust fetish and unlimited tokens, it isn’t hard to see why it’s forking season.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><em>The pitchforks:</em></p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><strong style="font-weight: 600;"><code style="font-size: 15px;">tsc-rs</code>:</strong> Theo’s influencer token budget brought forth the original “experimental” port, <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/z2hgh7uezrnp8zsph0/aHR0cHM6Ly9naXRodWIuY29tL3Bpbmdkb3RnZy90cy1ydXN0" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631054">ts-rust</a>, which can type-check the entire VS Code codebase in 4.8 seconds, compared with 9.6 seconds for the Go version.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><strong style="font-weight: 600;"><code style="font-size: 15px;">bun check</code>:</strong> Bun aka “the slop father” also ported the TypeScript compiler and <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/p8hehqu4e5mglvhqh3/aHR0cHM6Ly9idW4uc2gvYmxvZy9idW4tdjEuNC4zI2J1bi1jaGVjay1hLXR5cGVzY3JpcHQtdHlwZS1jaGVja2VyLWJ1aWx0LWludG8tYnVu" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631055">embedded it into their toolkit</a>, making type checks 3–6.4x faster while using 2.2–4.9x less memory in Bun’s benchmarks.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><strong style="font-weight: 600;"><code style="font-size: 15px;">tsc-ts</code>:</strong> Perhaps the most interesting fork was Vercel Labs deciding <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/x0hph3uemdo978b5hl/aHR0cHM6Ly90c2MtdHMuZGV2Lw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631056">to migrate the compiler BACK to TypeScript</a> and compile it to native using <code style="font-size: 15px;">scriptc</code>, delivering similar performance to the Go version.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><strong style="font-weight: 600;"><code style="font-size: 15px;">tsrs</code>:</strong> Not wanting to be left out, the VoidZero team at Cloudflare announced they <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/6qhehoul46zn2ktohk/aHR0cHM6Ly9ibG9nLmNsb3VkZmxhcmUuY29tL3R5cGVzY3JpcHQtcnVzdC1wb3J0" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631057">will be maintaining a new project called <code style="font-size: 15px;">tsrs</code></a>, a Rust port they plan to merge with Theo’s port and integrate it into the Oxc toolchain.</p>
</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Bottom Line:</strong> In the slopfork ecosystem, when you outsource original ideas for more control, projects like these can start to feel pretty boring. But what did you expect… we’re in hell after all.</p>
<table width="100%" cellpadding="0" cellspacing="0" border="0" style="border-collapse: collapse; margin-top: 40px; text-align: center;"><tbody><tr><td style="border-collapse: collapse !important; padding-top: 12px; word-break: normal;">
<a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/kkhmh2unp2r695ulh7/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNTMx" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1896631058"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/fb-share-icon.png"></a><a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/58hvh8ugwoqk90b6h4/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY1MzE=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1896631059"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/li-share-icon.png"></a><a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/25h2h9u3x064o0t3h4/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9VGhpcyUyMHRoaW5nJTIwY2FsbGVkJTIwbWF0aCUyQyUyMHN1YmplY3RpbmclMjBhZ2VudHMlMjB0byUyMGElMjBHb29nbGUlMjBwZXJmb3JtYW5jZSUyMHJldmlldyUyQyUyMGFuZCUyMHdoeSUyMEklRTIlODAlOTlsbCUyMG5ldmVyJTIwbGlzdGVuJTIwdG8lMjBhbm90aGVyJTIwUE0uJnVybD1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNTMx" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1896631060"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/tw-share-icon.png"></a><a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/qvh8h8ud32zo60ulhk/bWFpbHRvOj9zdWJqZWN0PVlvdSUyMGxpa2UlMjBjb3JuYnJlYWQlM0YmYm9keT1UaG91Z2h0JTIweW91JTI3ZCUyMGxvdmUlMjB0aGlzJTIwd2VlayUyN3MlMjBCeXRlcyUwQS0tLSUwQVRoaXMlMjB0aGluZyUyMGNhbGxlZCUyMG1hdGglMkMlMjBzdWJqZWN0aW5nJTIwYWdlbnRzJTIwdG8lMjBhJTIwR29vZ2xlJTIwcGVyZm9ybWFuY2UlMjByZXZpZXclMkMlMjBhbmQlMjB3aHklMjBJJUUyJTgwJTk5bGwlMjBuZXZlciUyMGxpc3RlbiUyMHRvJTIwYW5vdGhlciUyMFBNLiUwQWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY1MzE=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1896631061"><img alt="" style="display: inline-block; max-width: 100%; width: 32px;" width="25" src="https://bytes.dev/images/em-share-icon.png"></a>
</td></tr></tbody></table>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="150" src="https://bytes.dev/images/content/coderabbit-logo.png" alt="CodeRabbit logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;"><span>Our Friends <br class="mobile-break">(With Benefits)</span></h2>
</div>
<div class="bg-alt" style="background-color: #f5f5f5; border-radius: 16px; margin-bottom: 40px; max-width: 100%; padding: 24px; padding-bottom: 12px;">
<img src="https://bytes.dev/images/content/wallace-gromit-train.jpg" alt="Wallace chases a penguin with a net while Gromit clings to a model train" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 17px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">Catching up on the 80 code reviews awaiting your approval<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/g3hnhwum2or6zzfrh9/aHR0cHM6Ly9jb2RlcmFiYml0LmxpbmsvYnl0ZXMtMDIy" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631062">Code got cheap. Shipping didn’t</a></h3>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">AI made code cheap. It did not make changes safe to ship. Agentic Change Management gives teams the controls around agent output: review every change with codebase context, prioritize a queue hundreds of PRs deep, understand big diffs in minutes, and secure the whole codebase.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/g3hnhwum2or6zzfrh9/aHR0cHM6Ly9jb2RlcmFiYml0LmxpbmsvYnl0ZXMtMDIy" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631062">Bring Agentic Change Management to your PR today</a></p>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/spot-the-bug.png" alt="Spot the Bug logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Spot the Bug</h2>
<div class="section-presenter" style="margin-bottom:50px;margin-top:15px">
<h4 style="font-size: 20px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Spot the Bug – Presented by <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/9qhzhdud830z2gf9h3/aHR0cHM6Ly9mYW5kZi5jby80amdlZXcx" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631063">Trigger.dev</a>
</h4>
<p style="font-family: Outfit, sans-serif; font-size: 18px; line-height: 1.5; margin-top: 5px; padding-left: 24px; padding-right: 24px;"><em>Trigger.dev is an open-source platform for building <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/9qhzhdud830z2gf9h3/aHR0cHM6Ly9mYW5kZi5jby80amdlZXcx" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631063">durable AI agents and workflows</a> in TypeScript. If steps fail, processes restart, or code deploys mid-run, your tasks pick up where they left off instead of dying.</em></p>
</div>
</div>
<pre class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; box-sizing: border-box; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 15px; hyphens: none; line-height: 1.5; max-width: 100%; overflow: auto; overflow-wrap: anywhere; padding: 24px; tab-size: 2; text-align: left; white-space: pre-wrap; word-spacing: normal;"><code class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 15px; hyphens: none; line-height: 1.5; overflow-wrap: anywhere; tab-size: 2; text-align: left; white-space: pre-wrap; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 15px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 15px;">flattenArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 15px;">arr</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">let</span> result <span class="token operator" style="color: #12b5e5; font-size: 15px;">=</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
arr<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">forEach</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 15px;">item</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 15px;">=></span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">if</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>Array<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">isArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>item<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
result<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">concat</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token function" style="color: #9d7dce; font-size: 15px;">flattenArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>item<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span> <span class="token keyword" style="color: #f38ba3; font-size: 15px;">else</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
result<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">push</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>item<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">return</span> result<span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
console<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">log</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token function" style="color: #9d7dce; font-size: 15px;">flattenArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">1</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">2</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">3</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">4</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
</code></pre>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/cool-bits.png" alt="Cool Bits logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Cool Bits</h2>
</div>
<ol>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Google Research <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/3ohphdu38904d7brhn/aHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS1yZXNlYXJjaC9oYXJuZXNzMg==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631064">open sourced <code style="font-size: 15px;">harness2</code></a>, a recursive agent harness for “an open world” that allows agents to self-reflect. Is this Google’s way of subjecting agents to their performance review culture?</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/n2hohquv45m6ovu6hg/aHR0cHM6Ly9yZWFjdG5hdGl2ZS5kZXYvYmxvZy8yMDI2LzEwLzE5L3JlYWN0LW5hdGl2ZS0wLjg4" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631065">React Native shipped version 0.88</a> bringing variable fonts and event dispatching to the platform. It’s apparently only the third time they’ve managed to ship a release without breaking changes? Not sure I’d want to advertise this, but you do you RN.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Convex CEO James Cowling hosted a chat with Theo Browne, Jean-Denis Greze, and David Cramer about <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/48hvh7um3qv626axh7/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g_c2k9UHZRU2dzMklqZzVKalZlOSZ2PXRVMGxlTXhrcXpF" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631066">agentic development and the future of open source software</a>. If you haven’t watched it yet, you should. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Speaking of libraries known for breaking changes, <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/wnh2h6uqdvnxogc7hx/aHR0cHM6Ly9yZWFjdHJvdXRlci5jb20vY2hhbmdlbG9nI3Y4NTA=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631067">React Router released version 8.5</a>, which deprecates its view transition APIs in favor of React’s <code style="font-size: 15px;"><ViewTransition></code> component.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Kristen Maevyn wrote <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/08hwhgu24wvg7nulh5/aHR0cHM6Ly9tYWV2eW4uY29kZXMvZGVjb2hlcmVuY2U=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631069">an essay on the concept of decoherence</a> and why, according to this thing called math, AI-generated complexity could lead to our downfall.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">After getting benchmogged by all the slop forks, <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/8ghqh3uo8pzq5zikh9/aHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL3R5cGVzY3JpcHQvYW5ub3VuY2luZy10eXBlc2NyaXB0LTctMS1iZXRhLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631070">the TypeScript team shipped version 7.1</a> in beta, which is 1.2–1.9x faster and uses 15–50% less memory than 7.0 in its benchmarks.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/vqh3hmuo63lek0fghl/aHR0cHM6Ly93d3cuYmxhY2tzbWl0aC5zaC8_dXRtX3NvdXJjZT1ieXRlcyZ1dG1fbWVkaXVtPW5ld3NsZXR0ZXImdXRtX2NhbXBhaWduPWJ5dGVzX3NlY29uZGFyeV8yMDI2XzEwXzA5" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631071">Blacksmith is a drop-in replacement for GitHub runners</a> that’s significantly faster and costs 60% less. It’s dead simple and also fully observable in your CI pipeline. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Justin Bennett spent some time thinking about <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/l2heh6ulpve6k7u6h0/aHR0cHM6Ly9qdXN0LWJlLmRldi9ibG9nL2NvZGUtcmV2aWV3LXN1Y2tzLW5vdy8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631072">how to make code reviews not suck</a> — his words, not mine.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Darius Cepulis asks the existential question we’ve all had anxious thoughts about — <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/m2h7h6u3x0vmnpbmhq/aHR0cHM6Ly92aWRlb2pzLm9yZy9ibG9nL2lwaG9uZS1kdW8td2ViLWRldmVsb3BtZW50" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631073">what the iPhone Duo means for web development</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Will we still have a job in 5 years? <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/dphehmuexwv879bmh4/aHR0cHM6Ly9scC5qZXRicmFpbnMuY29tL2FpLWpzLWRheS0yMDI2Lz91dG1fc291cmNlPW5ld3NsZXR0ZXJfYnl0ZXMmdXRtX21lZGl1bT1jcGMmdXRtX2NhbXBhaWduPXdlYnN0b3JtX2phdmFzY3JpcHRfZGF5XzIwMjZfYnl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631074">AI.js Day 2026</a> puts frontend’s scariest AI questions on air. Free, live, happening on Nov 13. Save your spot. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Pere Diaz Bou wrote about <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/e0hph0u7zw6qn8h8h2/aHR0cHM6Ly90dXJzby50ZWNoL2Jsb2cvbXZjYy1yb3ctbGlmZXRpbWU=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631075">what happens to a row in Turso’s MVCC</a>, from bytecode that inserts it to the checkpoint that deletes it.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Marc-Andre Giroux finally found <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/7qh7h2u9epqw4nizh6/aHR0cHM6Ly9tYWdpcm91eC5jb20vcG9zdHMvZnJvbS11c2UtY2FzZS10by1ncmFwaHFsLW9wZXJhdGlvbg==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631076">a use case for GraphQL operations</a>. This is why you never let PMs tell you not to build a feature because <em>someone</em> is going to eventually want it.</p>
</li>
</ol>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/spot-the-bug.png" alt="Spot the Bug logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Spot the Bug: Solution</h2>
<div class="section-presenter" style="margin-bottom:50px;margin-top:15px"><h4 style="font-size: 20px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Spot the Bug – Presented by <a href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/9qhzhdud830z2gf9h3/aHR0cHM6Ly9mYW5kZi5jby80amdlZXcx" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1896631063">Trigger.dev</a>
</h4></div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><code style="font-size: 15px;">Array.prototype.concat()</code> doesn’t mutate the original array; it returns a new array. To fix the issue, we need to assign the return value of <code style="font-size: 15px;">result.concat(flattenArray(item))</code> back to <code style="font-size: 15px;">result</code>.</p>
<pre class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; box-sizing: border-box; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 15px; hyphens: none; line-height: 1.5; max-width: 100%; overflow: auto; overflow-wrap: anywhere; padding: 24px; tab-size: 2; text-align: left; white-space: pre-wrap; word-spacing: normal;"><code class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 15px; hyphens: none; line-height: 1.5; overflow-wrap: anywhere; tab-size: 2; text-align: left; white-space: pre-wrap; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 15px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 15px;">flattenArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 15px;">arr</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">let</span> result <span class="token operator" style="color: #12b5e5; font-size: 15px;">=</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
arr<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">forEach</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 15px;">item</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 15px;">=></span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">if</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>Array<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">isArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>item<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
result <span class="token operator" style="color: #12b5e5; font-size: 15px;">=</span> result<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">concat</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token function" style="color: #9d7dce; font-size: 15px;">flattenArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>item<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span> <span class="token keyword" style="color: #f38ba3; font-size: 15px;">else</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
result<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">push</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>item<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">return</span> result<span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
console<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">log</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token function" style="color: #9d7dce; font-size: 15px;">flattenArray</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">1</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">2</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">3</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span><span class="token number" style="color: #fcba28; font-size: 15px;">4</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
</code></pre>
<div style="text-align:center;padding-bottom:80px;padding-top:80px">
<div class="bg-alt" style="background-color: #f5f5f5; border-radius: 16px; margin-bottom: 40px; padding: 24px;"><div style="margin-top:-40px">
<img src="https://bytes.dev/images/bytes-icon.png" alt="Bytes" width="55px" style="max-width: 100%; width: 55px;"><h5 style="font-size:18px;font-weight:400;margin-bottom:24px">Want us to say nice things <br> about your company?</h5>
<div style="margin-bottom:16px"><a style="background-color: #FCBA28; border: 1px solid #231F20; border-radius: 100px; color: #231F20; font-size: 14px; font-weight: 600; padding: 8px 14px; text-decoration: none;" href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/owhkhwuwelpg80hvhr/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1896631077">Sponsor Bytes</a></div>
<div style="margin-bottom:20px"><a style="color: #FCBA28; font-size: 14px; font-weight: 600; text-decoration: underline;" href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/z2hgh7uezrnpdzfph0/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1896631078">or share it</a></div>
<p style="font-family: Outfit, sans-serif; font-size: 14px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Built with ❤️ by<!-- --> <a style="color: #ed203d; font-weight: 600; text-decoration: underline;" href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/p8hehqu4e5mg7vsqh3/aHR0cHM6Ly9maXJlc2hpcC5kZXY=" url-id="1896631079">Fireship</a></p>
</div></div>
<p style="font-family: Outfit, sans-serif; font-size: 14px; line-height: 1.5; opacity: 0.5; padding-left: 24px; padding-right: 24px;">50 W Broadway Ste 333 PMB 51647 Salt Lake City, Utah 84101</p>
<div style="font-family:Papyrus, cursive"><a class="unsubscribe-link" href="https://c5e21242.click.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w/x0hph3uemdo9n8c5hl/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1896631080">Unsubscribe from Bytes</a></div>
</div>
</div></td>
<td style="border-collapse: collapse !important; word-break: normal;"></td>
</tr></tbody></table>
<span style="display: none"><a href="https://c5e21242.unsubscribe.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w">Unsubscribe</a></span>
<!-- -->
<img src="https://c5e21242.open.convertkit-mail.com/n4ugqg6788hvhxd9v07b6h66d90w3ulho53w" alt="">
</body>
</html>