<!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/guillermo-side-eye.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/clerk-logo.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/ronnie-jay.jpg">
<link rel="preload" as="image" href="https://bytes.dev/images/content/pop-quiz.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: Vite+ enters the Matrix</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: 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> Getting my favorite fantasy novel spoiled by the Node.js team, banning useEffect, and the benefits of being “disliked but unavoidable.”</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://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/wnh2h6uq7327oni7/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvNDcx" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282654">#471</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/guillermo-side-eye.jpg" alt="Guillermo staring longingly with a side eye into the camera" 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;">Watching another gladiator enter the deployment arena<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Vite+ enters the Matrix</h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It turns out that there are only two business models for VC-backed OSS tools: 1) build a custom deployment platform, or 2) get acquired by Anthropic.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">The Vite/VoidZero team just committed to door #1 last week when they launched <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/reh8h9umdeld5da2/aHR0cHM6Ly92b2lkLmNsb3VkLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282655">Void</a> – a “Vite-native deployment platform” that lets you turn any Vite app into a “truly full-stack” application. It’s built on Cloudflare Workers and gives you a database, KV storage, object storage, AI inference, and other goodies.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">But the best part is that this means they’re setting Vite+ free.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Vite’s unified toolchain is now fully open-source and MIT licensed, instead of the feature-gated model they were originally considering as a monetization strategy. And that’s great news for the rest of us, because the <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/08hwhgu2ek6e7rul/aHR0cHM6Ly92b2lkemVyby5kZXYvcG9zdHMvYW5ub3VuY2luZy12aXRlLXBsdXMtYWxwaGE=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282656">Vite+ alpha</a> looks very promising:</p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Full toolchain in a single binary</strong> – <code style="font-size: 14px;">vp</code> bundles Vite, Vitest, Oxlint, Oxfmt, Rolldown, and tsdown into one unified dev environment, so you don’t have to juggle separate config files for each tool.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;"><code style="font-size: 14px;">vp</code> covers the full local dev lifecycle</strong> – <code style="font-size: 14px;">vp env</code> manages your Node version, <code style="font-size: 14px;">vp install</code> picks the right package manager, <code style="font-size: 14px;">vp check</code> runs lint + format + type-check in one shot, and <code style="font-size: 14px;">vp build</code> produces an optimized production bundle.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Vite Task is a nice bonus</strong> – The built-in task runner auto-fingerprints inputs for caching, so repeated tasks are skipped if nothing changed (like a built-in version of Turborepo).</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Agent-friendly migration</strong> – Their <code style="font-size: 14px;">vp migrate</code> command includes a copy-paste prompt for your coding agent to handle the migration for you.</p>
</li>
</ul>
<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> A lot of projects have tried and failed to build the “one unified JS toolchain to rule them all” over the years, but Vite+ is actually doing it.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">And if they become a major critical dependency for enough projects, even if their Void deployment platform doesn’t work out, some other big tech/AI company will probably just acquire them ala Bun. So they’re basically building themselves a get-out-jail-free card. Big brain Evan strikes again.</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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/8ghqh3uodx6d5vik/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDcx" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1841282657"><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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/vqh3hmuo0d90k9fg/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0NzE=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1841282658"><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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/l2heh6ul2zm2k8a6/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9QnJlYWtpbmclMjBkb3duJTIwZXZlcnl0aGluZyUyMGluJTIwdGhlJTIwVml0ZSUyQiUyMGFscGhhJTJDJTIwcGx1cyUyMFZvaWRaZXJvJTI3cyUyMGNvbXBhbnklMjByb2FkbWFwJnVybD1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDcx" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1841282659"><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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/m2h7h6u35765n4im/bWFpbHRvOj9ib2R5PVRob3VnaHQlMjB5b3UlMjdkJTIwbG92ZSUyMHRoaXMlMjB3ZWVrJTI3cyUyMEJ5dGVzJTBBLS0tJTBBQnJlYWtpbmclMjBkb3duJTIwZXZlcnl0aGluZyUyMGluJTIwdGhlJTIwVml0ZSUyQiUyMGFscGhhJTJDJTIwcGx1cyUyMFZvaWRaZXJvJTI3cyUyMGNvbXBhbnklMjByb2FkbWFwJTBBaHR0cHMlM0ElMkYlMkZieXRlcy5kZXYlMkZhcmNoaXZlcyUyRjQ3MSZzdWJqZWN0PVlvdSUyMGxpa2UlMjBjb3JuYnJlYWQlM0Y=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1841282660"><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/clerk-logo.png" alt="clerk-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/ronnie-jay.jpg" alt="Ronnie Coleman carrying Jay Cutler on his back" 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 there was one set of footsteps, Clerk was carrying me<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/dphehmue6m9672im/aHR0cHM6Ly9nby5jbGVyay5jb20vZHhmVzlVMw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282661"><code style="font-size: 14px;">@clerk/expo</code> 3.1 ships with native components</a></h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">That means you can now drop prebuilt, platform-native auth screens into any Expo app without writing any Swift or Kotlin.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It gives you:</p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Native UI components</strong> – <code style="font-size: 14px;"><AuthView /></code>, <code style="font-size: 14px;"><UserButton /></code>, and <code style="font-size: 14px;"><UserProfileView /></code> render via SwiftUI on iOS and Jetpack Compose on Android. And they all use <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/e0hph0u7v23vnzu8/aHR0cHM6Ly9jbGVyay5jb20vZG9jcy9yZWZlcmVuY2UvZXhwby9uYXRpdmUtY29tcG9uZW50cy9vdmVydmlldw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282662">hook-based state management</a>, not callbacks.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Native Google sign-in</strong> – ASAuthorization on iOS, Credential Manager on Android. No OAuth redirect, no browser pop-up, no explaining to your users why auth looks weird.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Core-3 Signal APIs</strong> – <code style="font-size: 14px;">setActive()</code> is gone, and auth state is fully reactive with the new Signal API.</p>
</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://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/dphehmue6m9672im/aHR0cHM6Ly9nby5jbGVyay5jb20vZHhmVzlVMw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282661">Check out <code style="font-size: 14px;">@clerk/expo</code> 3.1</a> – and see how simple it is to get started.</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="140" src="https://bytes.dev/images/content/pop-quiz.png" alt="Pop Quiz logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Pop Quiz</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://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/7qh7h2u9lm2l4gcz/aHR0cHM6Ly9zdXJ2ZXlqcy5pby8_dXRtX21lZGl1bT1lbWFpbCZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282663">SurveyJS</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>Form builders shouldn’t own your data. With <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/7qh7h2u9lm2l4gcz/aHR0cHM6Ly9zdXJ2ZXlqcy5pby8_dXRtX21lZGl1bT1lbWFpbCZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282663">SurveyJS UI libraries</a> you can build dynamic JSON-driven forms inside your app and keep full control of your data.</em></p>
</div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">What gets logged?</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; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; overflow: auto; padding: 24px; tab-size: 2; text-align: left; white-space: pre; word-break: normal; 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: 14px; hyphens: none; line-height: 1.5; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> array <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> <span class="token keyword" style="color: #f38ba3; font-size: 14px;">new</span> <span class="token class-name" style="color: #12b5e5; font-size: 14px;">Array</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token number" style="color: #fcba28; font-size: 14px;">3</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;">fill</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 punctuation" style="color: #231F20; font-size: 14px;">)</span>
array<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 function" style="color: #9d7dce; font-size: 14px;">push</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">"bytes"</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span>
console<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">log</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>array<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;">s/o to <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/owhkhwuw97m943cv/aHR0cHM6Ly90d2l0dGVyLmNvbS9KTllCR1Ivc3RhdHVzLzE3MDk5Njc2NDY5NDUzMTcwOTA_cz0yMA==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282664">Jonny</a> for this one.</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/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;"><a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/z2hgh7ue6826o4up/aHR0cHM6Ly9uZXh0anMub3JnL2Jsb2cvbmV4dC0xNi0y" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282665">Next.js 16.2</a> comes with new agent capabilities, perf upgrades, and “over 200 Turbopack improvements.” Improvement #179 was actually just hot swapping it for Vite.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Kyle Galbraith wrote about how <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/p8hehqu46lw692hq/aHR0cHM6Ly9mYW5kZi5jby80c0pudEdq" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282666">the bottleneck has shifted from writing code to integrating it</a>, and how teams with faster builds and real-time feedback loops are lapping everyone else right now. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Ryan Hunt wants to know, <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/6qhehoulrd8rp6ao/aHR0cHM6Ly9oYWNrcy5tb3ppbGxhLm9yZy8yMDI2LzAyL21ha2luZy13ZWJhc3NlbWJseS1hLWZpcnN0LWNsYXNzLWxhbmd1YWdlLW9uLXRoZS13ZWIv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282668">Why is WebAssembly a second-class language on the web?</a></p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Matteo Collina wrote about how AI-assisted coding <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/kkhmh2unw30w83il/aHR0cHM6Ly9hZHZlbnR1cmVzLm5vZGVsYW5kLmRldi9hcmNoaXZlL3NvZnR3YXJlLWVuZ2luZWVyaW5nLXNwbGl0cy1pbi10aHJlZS8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282669">split software engineering in three</a>. And I swear he better not give out any more spoilers for <em>The Strength of the Few.</em></p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/58hvh8ugxzdx59s6/aHR0cHM6Ly93d3cud2FycC5kZXYvb3o=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282670">Oz</a> lets you run hundreds of agents in parallel on your own cloud infrastructure, not just on a laptop. It’s basically Vercel for background agents. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/25h2h9u39ep977t3/aHR0cHM6Ly9zdHJhd2JlcnJ5YnJvd3Nlci5jb20vYmxvZy9yZWFjdC10by1zdmVsdGU=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282671">How we migrated 130k lines of code from React to Svelte in two weeks</a> breaks down one team’s daring vision to have their coding agent go where many other coding agents have recently gone before.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Jon Kuperman wrote about <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/qvh8h8udw0mw8rul/aHR0cHM6Ly9ibG9vbWJlcmcuZ2l0aHViLmlvL2pzLWJsb2cvcG9zdC9zdGFuZGFyZGl6aW5nLXNvdXJjZS1tYXBzLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282672">the history of Source Maps</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">You can now <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/g3hnhwum9k89emar/aHR0cHM6Ly9zZW50cnkuaW8vY29va2Jvb2svbW9uaXRvci1tY3Atc2VydmVyLz91dG1fY2FtcGFpZ249bWNwLWZ5MjdxMS1jb29rYm9vayZ1dG1fY29udGVudD1uZXdzbGV0dGVyLW1jcC1zZXJ2ZXItc2Vjb25kYXJ5LXRyeXNlbnRyeSZ1dG1fbWVkaXVtPXBhaWQtY29tbXVuaXR5JnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282673">monitor your MCP server with Sentry</a> by wrapping it in a single function call that gives you full visibility into everything going on under the hood. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Josh Wilson wrote about why his team <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/9qhzhdudwlvwgzf9/aHR0cHM6Ly93d3cuYWhhLmlvL2VuZ2luZWVyaW5nL2FydGljbGVzL3doeS13ZS1yb2xsZWQtb3VyLW93bi1yc2MtZnJhbWV3b3Jr" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282674">rolled their own RSC framework</a>. Turns out they wanted to start beefing on Twitter with Cloudflare and Vercel to get clout. I respect the hustle.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Alvin Sng wrote a good article about why his team at Factory <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/n2hohquvqk9qnes6/aHR0cHM6Ly94LmNvbS9hbHZpbnNuZy9zdGF0dXMvMjAzMzk2OTA2MjgzNDA0NTA4OQ==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282676">banned React’s useEffect</a>. Their poor HR department.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/48hvh7umlndl0wix/aHR0cHM6Ly9udXh0LmNvbS9ibG9nL3Y0LTQ=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282677">Nuxt 4.4</a> ships with custom <code style="font-size: 14px;">useFetch</code> / <code style="font-size: 14px;">useAsyncData</code> factories, Vue Router v5, and smarter payload handling.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Ryan Carniato wrote about <a href="https://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/wnh2h6uq7327rnb7/aHR0cHM6Ly9kZXYudG8vcGxheWZ1bHByb2dyYW1taW5nL3R3by1yZWFjdC1kZXNpZ24tY2hvaWNlcy1kZXZlbG9wZXJzLWRvbnQtbGlrZS1idXQtY2FudC1hdm9pZC1kNmc=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282678">the two React design choices developers don’t like, but can’t avoid</a>. Speaking from personal experience, there are a lot of social benefits that come with being “disliked but unavoidable.”</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="140" src="https://bytes.dev/images/content/pop-quiz.png" alt="Pop Quiz logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Pop Quiz: Answer</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://c5e21242.click.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/7qh7h2u9lm2l4gcz/aHR0cHM6Ly9zdXJ2ZXlqcy5pby8_dXRtX21lZGl1bT1lbWFpbCZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1841282663">SurveyJS</a>
</h4></div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">What gets logged?</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; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; overflow: auto; padding: 24px; tab-size: 2; text-align: left; white-space: pre; word-break: normal; 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: 14px; hyphens: none; line-height: 1.5; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> array <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> <span class="token keyword" style="color: #f38ba3; font-size: 14px;">new</span> <span class="token class-name" style="color: #12b5e5; font-size: 14px;">Array</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token number" style="color: #fcba28; font-size: 14px;">3</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;">fill</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 punctuation" style="color: #231F20; font-size: 14px;">)</span>
array<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 function" style="color: #9d7dce; font-size: 14px;">push</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">"bytes"</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span>
console<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">log</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>array<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token comment" style="color: rgb(167, 167, 167); font-size: 14px;">// [ ["bytes"], ["bytes"], ["bytes"] ]</span>
</code></pre>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">When you call <code style="font-size: 14px;">.fill([])</code>, what you’re really doing is “filling up” the array with three <em>references</em> to the same array. You can kind of think of it like this.</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; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; overflow: auto; padding: 24px; tab-size: 2; text-align: left; white-space: pre; word-break: normal; 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: 14px; hyphens: none; line-height: 1.5; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> reference <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 punctuation" style="color: #231F20; font-size: 14px;">]</span>
<span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> array <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> <span class="token keyword" style="color: #f38ba3; font-size: 14px;">new</span> <span class="token class-name" style="color: #12b5e5; font-size: 14px;">Array</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token number" style="color: #fcba28; font-size: 14px;">3</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;">fill</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>reference<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;">Where now, <code style="font-size: 14px;">array</code> has three elements and they’re all referencing the same <code style="font-size: 14px;">reference</code> array. Therefore, if you add an item to any of the three elements, since they all point to the same array, it’s <em>as if</em> you’re adding an item to all of them.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">To get the same functionality without the referential weirdness, you can use <code style="font-size: 14px;">Array.from</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; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 14px; hyphens: none; line-height: 1.5; overflow: auto; padding: 24px; tab-size: 2; text-align: left; white-space: pre; word-break: normal; 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: 14px; hyphens: none; line-height: 1.5; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> array <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> Array<span class="token punctuation" style="color: #231F20; font-size: 14px;">.</span><span class="token function" style="color: #9d7dce; font-size: 14px;">from</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 literal-property property" style="color: #12b5e5; font-size: 14px;">length</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> <span class="token number" style="color: #fcba28; font-size: 14px;">3</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 punctuation" style="color: #231F20; font-size: 14px;">)</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 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>
array<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 function" style="color: #9d7dce; font-size: 14px;">push</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">"bytes"</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 comment" style="color: rgb(167, 167, 167); font-size: 14px;">// [ ["bytes"], [], [] ]</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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/reh8h9umdeldqdt2/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1841282679">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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/08hwhgu2ek6emral/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1841282680">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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/8ghqh3uodx6dgvbk/aHR0cHM6Ly9maXJlc2hpcC5kZXY=" url-id="1841282681">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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep/vqh3hmuo0d90n9hg/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1841282682">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/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep">Unsubscribe</a></span>
<!-- -->
<img src="https://c5e21242.open.convertkit-mail.com/p9u7p74z33b9h26mxx9uqhp0gz84esrhg6ep" alt="">
</body>
</html>