<!DOCTYPE html>
<html>
<head>
<title>Bytes: The largest supply chain attack in history</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<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: 16px; 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: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Today’s issue:</strong> Animation sacrilege, Fruit Rolldowns, and getting a little too forward about the size of your embeddings.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Welcome to <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/8ghqh3uol0qwv7hk/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvNDIy" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105709">#422</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/misty-cross.jpg" alt="Misty from Pokemon holding up a cross" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 15px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">Me installing any npm package from now on<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">The largest supply chain attack in history</h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">If you decided yesterday that you wanted to be super productive by logging off social media and updating all your dependencies, I have some very bad news for you.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Early Monday morning, attackers sent a convincing 2FA-reset phishing email to a prolific OSS maintainer named Qix – and unfortunately, our guy got pwned. This enabled a <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/vqh3hmuopxem76ug/aHR0cHM6Ly9zb2NrZXQuZGV2L2Jsb2cvbnBtLWF1dGhvci1xaXgtY29tcHJvbWlzZWQtaW4tbWFqb3Itc3VwcGx5LWNoYWluLWF0dGFjaw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105710">massive supply chain attack</a> with malicious patch releases for foundational npm utilities like <code style="font-size: 14px;">chalk</code>, <code style="font-size: 14px;">strip-ansi</code>, <code style="font-size: 14px;">debug</code> and <code style="font-size: 14px;">color-convert</code>, which rack up <em>billions</em> of combined weekly downloads.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">What the malware does:</strong></p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">It’s a “crypto-clipper” that monkey-patches <code style="font-size: 14px;">fetch</code>/<code style="font-size: 14px;">XMLHttpRequest</code>, scans JSON/text for wallet addresses (ETH, BTC, SOL, etc.), then replaces those legit wallet addresses with one of the attacker’s wallets instead</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">It uses the Levenshtein Distance Algorithm to make sure that the replacement wallet looks visually similar to the original wallet, so that it’s almost impossible to catch</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">If a wallet is present, it intercepts the RPC calls and rewrites the transaction recipient so that it goes straight to the attacker</p>
</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Yes, this does give us one more reason to hate crypto bros – but the scary part is that these weren’t some random crypto libraries that were affected. And it follows a similar playbook to last week’s <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/l2heh6ul306q9gi6/aHR0cHM6Ly9ueC5kZXYvYmxvZy9zMW5ndWxhcml0eS1wb3N0bW9ydGVt" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105711">Nx s1ngularity incident</a>, where maintainer access gets subverted and developers get burned because of how the open source ecosystem runs on trust.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Thankfully, the attack was noticed and reported early after a few folks started noticing strange build errors like <code style="font-size: 14px;">fetch is not defined</code>. Qix owned the mistake quickly and publicly, and worked with the community and the npm security team to fix the issue. Most of the affected packages are now back to normal.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">And unfortunately for Mr. Robot the Bl4ckh4t, all reports seem to indicate that they walked away with <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/m2h7h6u38gm26khm/aHR0cHM6Ly94LmNvbS92eHVuZGVyZ3JvdW5kL3N0YXR1cy8xOTY1MTI1Mzg5MjQ1OTQwMTcx" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105712">less than $100</a>, despite having successfully perpetrated what was arguably the largest supply chain attack of all time. Couldn’t have happened to a nicer guy.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Bottom Line:</strong> This all could’ve been way worse, and we’re lucky that it was caught and remedied as quickly as it was. But unfortunately, it’s hard to see the conditions that enable attacks like these changing in a material way anytime soon. And that’s a little frightening.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Bottom Bottom Line:</strong> Never check your email, upgrade your dependencies, or leave your house.</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://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/dphehmue048d94im/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDIy" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1784105713"><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://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/e0hph0u70pqm3li8/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0MjI=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1784105714"><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://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/7qh7h2u9okwd28sz/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9QnJlYWtpbmclMjBkb3duJTIwaG93JTIweWVzdGVyZGF5JTI3cyUyMHN1cHBseSUyMGNoYWluJTIwYXR0YWNrJTIwYWZmZWN0ZWQlMjBKYXZhU2NyaXB0JTIwZGV2ZWxvcGVycyZ1cmw9aHR0cHMlM0ElMkYlMkZieXRlcy5kZXYlMkZhcmNoaXZlcyUyRjQyMg==" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1784105715"><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://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/owhkhwuwrkgxmlsv/bWFpbHRvOj9ib2R5PVRob3VnaHQlMjB5b3UlMjdkJTIwbG92ZSUyMHRoaXMlMjB3ZWVrJTI3cyUyMEJ5dGVzJTBBLS0tJTBBQnJlYWtpbmclMjBkb3duJTIwaG93JTIweWVzdGVyZGF5JTI3cyUyMHN1cHBseSUyMGNoYWluJTIwYXR0YWNrJTIwYWZmZWN0ZWQlMjBKYXZhU2NyaXB0JTIwZGV2ZWxvcGVycyUwQWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0MjImc3ViamVjdD1Zb3UlMjBsaWtlJTIwY29ybmJyZWFkJTNG" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1784105716"><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/convex-logo.png" alt="Convex 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/sponge-leg.jpg" alt="Spongebob showing off his leg" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 15px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">When you build your entire backend with TypeScript<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/z2hgh7ue34p528sp/aHR0cHM6Ly93d3cuY29udmV4LmRldi8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105717">Convex is the missing half of your React app</a></h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Their all-in-one backend platform provides everything you need to build, launch, and scale a production-ready backend.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">The best part? It lets you use TypeScript to write <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/p8hehqu4z3grw7aq/aHR0cHM6Ly9kb2NzLmNvbnZleC5kZXYvZnVuY3Rpb25zL3F1ZXJ5LWZ1bmN0aW9ucy8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105718">queries as code</a> that are automatically cached and realtime, with a <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/x0hph3uewr9kvnb5/aHR0cHM6Ly9kb2NzLmNvbnZleC5kZXYvZGF0YWJhc2U=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105719">reactive database</a> that’s built for AI apps.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It also gives you:</p>
<ul>
<li>Built-in auth</li>
<li>File storage</li>
<li><a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/6qhehoul7knx87io/aHR0cHM6Ly93d3cuY29udmV4LmRldi9jb21wb25lbnRzL2FnZW50" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105720">AI agent component</a></li>
<li>Server functions</li>
<li>And so much more…</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/kkhmh2unld6z0ncl/aHR0cHM6Ly9kb2NzLmNvbnZleC5kZXYvcXVpY2tzdGFydHM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105721">Try one of their Quickstarts</a> – to instantly get up and running with Next.js, TanStack Start, or pretty much any other framework.</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: 19px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Sponsored by <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/58hvh8ugmvk3dks6/aHR0cHM6Ly93d3cuYXVnbWVudGNvZGUuY29tL2Jsb2cvdXNpbmctdGhlLWF1Z2dpZS1jbGktZm9yLWF1dG9tYXRlZC1jb2RlLXJldmlldy8_dXRtPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105722">Augment Code</a>
</h4>
<p style="font-family: Outfit, sans-serif; font-size: 16px; line-height: 1.5; margin-top: 5px; padding-left: 24px; padding-right: 24px;"><em>This article shows how you can <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/58hvh8ugmvk3dks6/aHR0cHM6Ly93d3cuYXVnbWVudGNvZGUuY29tL2Jsb2cvdXNpbmctdGhlLWF1Z2dpZS1jbGktZm9yLWF1dG9tYXRlZC1jb2RlLXJldmlldy8_dXRtPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105722">turn their Auggie CLI into a PR review bot</a> that can catch obvious issues automatically and make your code reviews faster and better.</em></p>
</div>
</div>
<pre class="language-js" style="background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; color: #231F20; overflow: auto; padding: 24px;"><code class="language-js" style="font-size: 14px;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 14px;">getId</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">user<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> fallback</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> user <span class="token operator" style="color: #12b5e5; font-size: 14px;">&&</span> user<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>id <span class="token operator" style="color: #12b5e5; font-size: 14px;">??</span> fallback<span class="token punctuation" style="color: #231F20; font-size: 14px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</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: 17px; line-height: 1.5;">Addy Osmani wrote about <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/25h2h9u32v4lpdi3/aHR0cHM6Ly9hZGR5b3NtYW5pLmNvbS9ibG9nL2Nocm9tZS0xN3RoLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105723">a history of Google Chrome</a> for its 17th birthday. It’s really well written, but it might’ve been a little awkward if last week’s anti-trust case had gone differently.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Sentry is hosting a free workshop on <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/qvh8h8udr7oemqul/aHR0cHM6Ly9sdW1hLmNvbS9jY3J4N2phZQ==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105724">Building and monitoring AI agents and MCP servers</a> that’ll go deep under the hood of MCP monitoring and show how to debug client connection issues, tool call performance, transports, and more. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Emil Kowalski wrote about how <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/g3hnhwum3d6g8ghr/aHR0cHM6Ly9lbWlsa293YWwuc2tpL3VpL3lvdS1kb250LW5lZWQtYW5pbWF0aW9ucw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105725">you don’t need animations</a> – which is kind of like the inventor of Coca-Cola saying you don’t need bubbly water, or cola flavoring… or cocaine.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Apparently it’s birthday week, because GraphQL just turned 10 years old yesterday and launched a fancy new <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/9qhzhdudpqz4v0f9/aHR0cHM6Ly9ncmFwaHFsLm9yZy8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105726">home page</a>. They’re gonna have to share the funfetti cake we got for Chrome.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/3ohphdu37o4x5msr/aHR0cHM6Ly93d3cubGVnZW5kYXBwLmNvbS9vcGVuLXNvdXJjZS9saXN0L2FwaS9nZXR0aW5nc3RhcnRlZC8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105727">Legend List just launched v2.0</a> of their super-fast React Native list library with more accuracy, more speed, sticky headers, and more.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Nolan Lawson wrote an article to answer the age-old question, <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/n2hohquv386290b6/aHR0cHM6Ly9ub2xhbmxhd3Nvbi5jb20vMjAyNS8wOC8zMS93aHktZG8tYnJvd3NlcnMtdGhyb3R0bGUtamF2YXNjcmlwdC10aW1lcnMv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105728">Why do browsers throttle JavaScript timers?</a> I don’t know, but I’m gonna go ahead and say that it’s IE’s fault.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">JetBrains is hosting <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/48hvh7umr56wdetx/aHR0cHM6Ly9scC5qZXRicmFpbnMuY29tL2phdmFzY3JpcHQtZGF5LTIwMjUvP3V0bV9jYW1wYWlnbj1qc193ZWVrbHlfamF2YXNjcmlwdF9kYXlfMjAyNSZ1dG1fbWVkaXVtPWNwYyZ1dG1fc291cmNlPWJ5dGVzX25ld3NsZXR0ZXI=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105729">JavaScript Day 2025</a> online on October 2nd for free. Tune in for a full day of live Q&A’s and talks from experts like Ryan Carniato, Lydia Hallie, Kent C. Dodds, Victor Savkin, and lots more. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Vicki Boykis wrote an article called, <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/wnh2h6uqw5xm22t7/aHR0cHM6Ly92aWNraWJveWtpcy5jb20vMjAyNS8wOS8wMS9ob3ctYmlnLWFyZS1vdXItZW1iZWRkaW5ncy1ub3ctYW5kLXdoeS8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105730">How big are our embeddings now and why?</a> Sorry Vicki, but my mother taught me not to answer those questions until after the third date.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Christoph Nakazawa (creator of Jest and former React Native Lead) gave this talk on <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/reh8h9um02wklgs2/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g_dD0zNnMmdj1yeFBURWtvOEo3Yw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105731">building scalable applications</a> at last week’s React Universe Conf.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">kazupon wrote about how his team at Plaid achieved <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/08hwhgu2dogn6lal/aHR0cHM6Ly90ZWNoLnBsYWlkLmNvLmpwL3BlcmYtc2VydmVyLWJ1aWxk" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105732">87x faster server-side action builds by migrating from Rollup to Rolldown</a>. That might be true, but you’ve never heard about an 8-year-old kid go crazy after giving themselves a <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/8ghqh3uol0qw67sk/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g_dj04emVjNTM1TVZaVQ==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105733">face tattoo</a> with a Fruit <em>Rolldown.</em></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: 19px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Sponsored by <a href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/58hvh8ugmvk3dks6/aHR0cHM6Ly93d3cuYXVnbWVudGNvZGUuY29tL2Jsb2cvdXNpbmctdGhlLWF1Z2dpZS1jbGktZm9yLWF1dG9tYXRlZC1jb2RlLXJldmlldy8_dXRtPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1784105722">Augment Code</a>
</h4></div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">You can’t mix the nullish coalescing operator <code style="font-size: 14px;">??</code> with <code style="font-size: 14px;">&&</code> (or <code style="font-size: 14px;">||</code>) in the same expression without parentheses.</p>
<pre class="language-js" style="background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; color: #231F20; overflow: auto; padding: 24px;"><code class="language-js" style="font-size: 14px;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 14px;">getId</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">user<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> fallback</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>user <span class="token operator" style="color: #12b5e5; font-size: 14px;">&&</span> user<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span>id<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">??</span> fallback<span class="token punctuation" style="color: #231F20; font-size: 14px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span>
</code></pre>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">or even better, just use optional chaining:</p>
<pre class="language-js" style="background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; color: #231F20; overflow: auto; padding: 24px;"><code class="language-js" style="font-size: 14px;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 14px;">getId</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">user<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> fallback</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">return</span> user<span class="token operator" style="color: #12b5e5; font-size: 14px;">?.</span>id <span class="token operator" style="color: #12b5e5; font-size: 14px;">??</span> fallback<span class="token punctuation" style="color: #231F20; font-size: 14px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 14px;">}</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://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/l2heh6ul306qmgb6/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1784105735">Sponsor Bytes</a></div>
<div style="margin-bottom:20px"><a style="color: #FCBA28; font-size: 14px; font-weight: 600; text-decoration: underline;" href="https://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/m2h7h6u38gm2dksm/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1784105736">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://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/dphehmue048dl4bm/aHR0cHM6Ly91aS5kZXY=" url-id="1784105737">ui.dev</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://click.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov/e0hph0u70pqm8lb8/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1784105738">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://unsubscribe.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov">Unsubscribe</a></span>
<!-- -->
<img src="https://open.convertkit-mail4.com/5quqzqpw00b7hngvnl9u6h9k8e444cnhxdov" alt="">
</body>
</html>