<!DOCTYPE html>
<html>
<head>
<title>Bytes: Wtf is Remix 3?</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> Lit follows React, your boss’s greatest AI fears, and the millennial urge to rewatch <em>Brink</em>.</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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/p8hehqu446oe56fq/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvNDMz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801007">#433</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/skinner.jpg" alt="Principal Skinner from Simpsons meme" 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;">Remix Jam TLDR<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Wtf is Remix 3?</h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Turns out, it’s a lot like Remix 2 – except instead of declarative React components and hooks, you now get manual event dispatching, <code style="font-size: 14px;">this.update()</code>, and no React at all.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Ok, so it’s actually nothing like Remix 2. Which begs the question, <em>why call it Remix at all?</em></p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Hard to say. Maybe Shopify wanted to keep the goodwill of the brand they bought three years ago, or maybe the Remix team was inspired by the Angular.js <span role="img" aria-label="right arrow">➡️</span> Angular 2 rebranding masterclass from 2016? I’ll leave that up to OSS marketing experts, because the next question is a lot more interesting…</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;">Why did they get divorced from React?</strong> The answer, according to Ryan and Michael, is that React itself has drifted away from its original promise of simplicity by embracing compilers, RSC, and transitions that Remix never fully believed in. <em>(It’s not me, it’s you.)</em></p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It looks like a React framework from an alternate timeline that forked off before React started introducing hooks in 2018.</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;">Here’s what else Remix 3 includes:</strong></p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">State without React</strong> — You hold variables in closures and manually call <code style="font-size: 14px;">this.update()</code> to re-render.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Events over props</strong> — Instead of passing callbacks, you dispatch native <code style="font-size: 14px;">CustomEvent</code>/<code style="font-size: 14px;">EventTarget</code> signals.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Frames instead of RSC</strong> — Server-rendered HTML “islands” with their own URLs that can reload independently, like iframes reimagined as a rendering primitive.</p>
</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It’s bold and opinionated, and Michael and Ryan even pitched it as more “LLM-friendly” — because a framework without hidden magic is supposedly easier for AI to generate. Whether that’s actually meaningful, or just something meant to appease Tobi and the rest of the AI maxxers at Shopify is up for debate</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> If it works out, Remix 3 could become the purest “web-native” framework that powers the next decade of web dev. And if it doesn’t, the good news is that Remix 4 will probably look completely different.</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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/x0hph3uee20md0b5/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDMz" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1796801008"><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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/6qhehoullre46gbo/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0MzM=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1796801009"><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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/e0hph0u77vozw3b8/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9QW5zd2VyaW5nJTIwYWxsJTIwdGhlJTIwcXVlc3Rpb25zJTIweW91JTI3cmUlMjB0b28lMjBhZnJhaWQlMjB0byUyMGFzayUyMGFib3V0JTIwUmVtaXglMjAzJnVybD1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDMz" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1796801010"><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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/7qh7h2u99l5eprtz/bWFpbHRvOj9ib2R5PVRob3VnaHQlMjB5b3UlMjdkJTIwbG92ZSUyMHRoaXMlMjB3ZWVrJTI3cyUyMEJ5dGVzJTBBLS0tJTBBQW5zd2VyaW5nJTIwYWxsJTIwdGhlJTIwcXVlc3Rpb25zJTIweW91JTI3cmUlMjB0b28lMjBhZnJhaWQlMjB0byUyMGFzayUyMGFib3V0JTIwUmVtaXglMjAzJTBBaHR0cHMlM0ElMkYlMkZieXRlcy5kZXYlMkZhcmNoaXZlcyUyRjQzMyZzdWJqZWN0PVlvdSUyMGxpa2UlMjBjb3JuYnJlYWQlM0Y=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1796801011"><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/saint-francis.jpg" alt="Painting of Saint Francis holding some doves" 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;">Tfw you can use AI to catch all the AI slop code<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/owhkhwuww9delqhv/aHR0cHM6Ly9jb2RlcmFiYml0LmxpbmsvYnl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801012">Cut code review time & bugs in half</a></h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">AI is generating more code than ever – which is great, until it starts shipping a bunch of slop to production.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Thankfully, CodeRabbit’s AI code review platform is purpose-built to speed up your code reviews and catch AI codegen errors.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It integrates seamlessly into git workflows and your existing toolchain, so it can deliver codebase-aware reviews and support all programming languages.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">And developers love it – it’s the #1 most installed AI app on GitHub and GitLab (used in over 2 million repos), and it’s used by OSS projects like Vue, Nuxt, and 70k others.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/owhkhwuww9delqhv/aHR0cHM6Ly9jb2RlcmFiYml0LmxpbmsvYnl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801012">Try it out for free</a> – they’ve got over 30+ tools to help you catch bugs wherever they’re hiding in your codebase.</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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/z2hgh7uee6xzrmtp/aHR0cHM6Ly96ZWQuZGV2L2Jsb2cvemVkLWZvci13aW5kb3dzLWlzLWhlcmU_dXRtX21lZGl1bT1uZXdzbGV0dGVyJnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801013">Zed</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>They finally just launched on Windows (!!) and it’s a real native app (not Electron). <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/p8hehqu446oe5euq/aHR0cHM6Ly96ZWQuZGV2L2Rvd25sb2FkP3V0bV9tZWRpdW09bmV3c2xldHRlciZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801014">Download it now</a> and see if everyone’s favorite editor lives up to the hype.</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;">const</span> <span class="token function-variable function" style="color: #9d7dce; font-size: 14px;">getCapitalizedInitials</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">name</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=></span>
name
<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">trim</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 punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">split</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">" "</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 function" style="color: #9d7dce; font-size: 14px;">forEach</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 parameter" style="color: #f38ba3; font-size: 14px;">name</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=></span> name<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">charAt</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token number" style="color: #fcba28; font-size: 14px;">0</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 punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">join</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">""</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 function" style="color: #9d7dce; font-size: 14px;">toUpperCase</span><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;">Lit announced that it’s <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/x0hph3uee20mdgs5/aHR0cHM6Ly9saXQuZGV2L2Jsb2cvMjAyNS0xMC0xNC1vcGVuanMv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801015">joining the OpenJS Foundation</a>, two weeks after React established the React Foundation. Sounds about right.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/6qhehoullre4dvso/aHR0cHM6Ly9naXRodWIuY29tL1ZFUlQtc2gvVkVSVA==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801016">VERT</a> is an open-source file converter that supports 250+ formats and runs fully local for everything but video. And suddenly, I have the urge to rewatch <em>Brink.</em></p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/kkhmh2unnwvp3dhl/aHR0cHM6Ly93d3cubWV0aWN1bG91cy5haS8_dXRtX2NhbXBhaWduPXE0JnV0bV9jb250ZW50PXNlY29uZGFyeSZ1dG1fbWVkaXVtPW5ld3NsZXR0ZXImdXRtX3NvdXJjZT1ieXRlcw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801017">Only idiots write manual tests</a> – modern engineering teams like Notion, Dropbox and Wiz use Meticulous to maintain e2e UI tests that cover every edge case of your web app. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Boyd Kane has figured out <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/58hvh8uggx2wznh6/aHR0cHM6Ly9ib3lka2FuZS5jb20vZXNzYXlzL2Jvc3M=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801018">why your boss isn’t worried about AI</a>, even though he’s a late-stage techno-capitalist being used as a vassal of the state to keep you down.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Jake Archibald wrote about <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/25h2h9u339wxegs3/aHR0cHM6Ly9qYWtlYXJjaGliYWxkLmNvbS8yMDI1L3ByZXNlbnQtYW5kLWZ1dHVyZS1vZi1wcm9ncmVzc2l2ZS1pbWFnZS1yZW5kZXJpbmcv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801019">the present and potential future of progressive image rendering</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Tuple is a <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/qvh8h8uddwp302ul/aHR0cHM6Ly90dXBsZS5hcHAvbC9wYWlyLXByb2dyYW1taW5nP3V0bV9jYW1wYWlnbj1ieXRlc19zZWNvbmRhcnlfMjAyNTEwMTcmdXRtX21lZGl1bT1uZXdzbGV0dGVyJnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801020">native remote pair programming app for discerning developers</a>. If you’re sensitive to miscommunication or tools messing with your flow, Tuple is the tool for you. Shared control by default, intuitive annotations, and no persistent UI elements that block the IDE. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/g3hnhwumm9w2kkir/aHR0cHM6Ly9naXRodWIuY29tL2NhbGxzdGFja2luY3ViYXRvci9yZWFjdC1uYXRpdmUtaGFybmVzcw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801021">Harness</a> is a lightweight framework that lets you execute Jest-like tests in a React Native runtime, directly on a device or emulator.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">The <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/9qhzhduddwr8l2f9/aHR0cHM6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvc2FuZGJveC1zZGs=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801022">Cloudflare Sandbox SDK</a> lets you run secure, sandboxed environments on Cloudflare so your AI agents can execute code, run services and manage files in isolation without the risk of bricking your whole application.</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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/3ohphdu33mg8nqur/aHR0cHM6Ly9sdW1hLmNvbS9zdm1yeW4zZg==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801023">Best Practices for Monitoring your Frontend</a>. Sergiy Dybskiy will dive deep into distributed tracing, optimizing site performance with Web Vitals, and lots more in this hands-on session. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">ESBuild has implemented Evan Wallace’s <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/n2hohquvvq04k3i6/aHR0cHM6Ly9naXRodWIuY29tL2V2YW53L2VzYnVpbGQvcmVsZWFzZXMvdGFnL3YwLjI1LjEx" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801024">TC39 Stage 2.7 Import Bytes proposal</a>, allowing you to import raw bytes as a readonly Uint8Array. You can use it right now in Deno and Webpack.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Astro released <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/48hvh7umml83nmsx/aHR0cHM6Ly9kb2NzLmFzdHJvLmJ1aWxkL2VuL2d1aWRlcy92aWV3LXRyYW5zaXRpb25zLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801025">View Transitions Level 1</a> with support in all major browsers.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/wnh2h6uqq76d3xi7/aHR0cHM6Ly96ZXJvLnJvY2ljb3JwLmRldi9kb2NzL3JlbGVhc2Utbm90ZXMvMC4yMw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801026">Zero 0.23</a> adds synced aka <em>custom</em> queries and React Native support, enabling custom server code on the read path. Now I need to go listen to that whole Yeah Yeah Yeah’s <a href="https://click.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/reh8h9ummdzpexb2/aHR0cHM6Ly9vcGVuLnNwb3RpZnkuY29tL3RyYWNrLzVtZkEyQ0J6UWVHaVRrOXdGSXRDc1M_c2k9ZjBiMzdhMjEyNGEyNGQxNg==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801027">album</a> with the broken egg on the cover and remeber what it’s like to be 18.</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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/z2hgh7uee6xzrmtp/aHR0cHM6Ly96ZWQuZGV2L2Jsb2cvemVkLWZvci13aW5kb3dzLWlzLWhlcmU_dXRtX21lZGl1bT1uZXdzbGV0dGVyJnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1796801013">Zed</a>
</h4></div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">We’re treating <code style="font-size: 14px;">forEach</code> as if it returned an array, when it actually returns <code style="font-size: 14px;">undefined</code>. Instead, we want to use <code style="font-size: 14px;">map</code>, which works similar to <code style="font-size: 14px;">forEach</code>, but also creates and returns a new array.</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;">const</span> <span class="token function-variable function" style="color: #9d7dce; font-size: 14px;">getCapitalizedInitials</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> <span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">name</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=></span>
name
<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">trim</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 punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">split</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">" "</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 function" style="color: #9d7dce; font-size: 14px;">map</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 parameter" style="color: #f38ba3; font-size: 14px;">name</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=></span> name<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">charAt</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token number" style="color: #fcba28; font-size: 14px;">0</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 punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">join</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">""</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 function" style="color: #9d7dce; font-size: 14px;">toUpperCase</span><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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/08hwhgu22er4kqul/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1796801028">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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/8ghqh3uoodn8xwak/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1796801029">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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/vqh3hmuoo0r6dlbg/aHR0cHM6Ly91aS5kZXY=" url-id="1796801030">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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86/l2heh6ull27pz2f6/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1796801031">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.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86">Unsubscribe</a></span>
<!-- -->
<img src="https://open.kit-mail6.com/92u4m46p33tnh6zd7dnh9hzpxl933iwhgx86" alt="">
</body>
</html>