<!DOCTYPE html>
<html>
<head>
<title>Bytes: Pimp my Bundler: Vite edition</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> The Zig roller coaster, the JavaScript hivemind, and <em>Shai Halud 3</em> coming to an npm package near you.</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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/owhkhwuwoxe5rguv/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvNDQ2" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139978">#446</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/pikachu-mummy.jpg" alt="Pikachu with the Mummy's face on it" 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;">The Vite team when they start charging $.01 per download<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Pimp my Bundler: Vite edition</h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">The Vite team released <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/z2hgh7uew5z03wup/aHR0cHM6Ly92aXRlLmRldi9ibG9nL2Fubm91bmNpbmctdml0ZTgtYmV0YQ==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139979">the first beta of Vite 8</a> on Wednesday, and it’s a pretty huge deal for one reason and one reason only: <strong style="font-weight: 600;">Rolldown.</strong></p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">This blazing fast, Rust-based bundler has taken the Vite team years to build and was an opt-in-only feature back in Vite 7. But now that it’s finally ready for primetime, we should probably ask – <strong style="font-weight: 600;">Why did they build it in the first place?</strong></p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Well until now, Vite has uniquely relied on two bundlers: <strong style="font-weight: 600;">esbuild</strong> provided fast compilation during development, and <strong style="font-weight: 600;">Rollup</strong> handled the bundling, chunking, and optimizing of production builds.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">This approach allowed Vite to outsource all the parsing and bundling work, so they could focus on the DX and orchestration that make Vite special. But it turns out that maintaining two separate bundling pipelines isn’t <em>quite</em> as fun as it sounds – and the team was forced to manage separate transformation pipelines, different plugin systems, and a growing amount of glue code to keep all the bundling behavior aligned.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">So the Vite team finally decided to head over to <del>West Coast Customs</del> <em>Evan You’s workshop</em> to build their own custom dream bundler from scratch. It doesn’t come with TVs in the headrests, but it does have:</p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Blazingest speed</strong> – Rolldown is written in Rust (btw) and operates at native speed, making it just as fast as esbuild and 10–30× faster than Rollup.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">Smooth compatibility</strong> – It supports the same plugin API as Rollup and Vite, and most Vite plugins work out of the box with Vite 8.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><strong style="font-weight: 600;">More features</strong> – It unlocks more advanced features for Vite like full bundle mode, more flexible chunk split control, module federation, and more.</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> Arguably the biggest impact of this new bundler is that it gives Evan You & friends full control of an end-to-end JS toolchain that includes <strong style="font-weight: 600;">Vite</strong> as the build tool, <strong style="font-weight: 600;">Rolldown</strong> as the bundler, and <strong style="font-weight: 600;">Oxc</strong> as the compiler. This is a smart strategy for VoidZero (the VC-backed company they founded), but it should also allow them to provide a better, more cohesive experience across the entire stack for developers.</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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/p8hehqu4xre8z8bq/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDQ2" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1812139980"><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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/x0hph3ue3kmxwkf5/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0NDY=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1812139981"><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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/6qhehoulox407zio/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9V2h5JTIwdGhlJTIwVml0ZSUyMHRlYW0lMjB3ZW50JTIwYWxsJTIwaW4lMjBvbiUyMGJ1aWxkaW5nJTIwdGhlaXIlMjBvd24lMjBidW5kbGVyJnVybD1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDQ2" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1812139982"><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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/kkhmh2unmzp4lwil/bWFpbHRvOj9ib2R5PVRob3VnaHQlMjB5b3UlMjdkJTIwbG92ZSUyMHRoaXMlMjB3ZWVrJTI3cyUyMEJ5dGVzJTBBLS0tJTBBV2h5JTIwdGhlJTIwVml0ZSUyMHRlYW0lMjB3ZW50JTIwYWxsJTIwaW4lMjBvbiUyMGJ1aWxkaW5nJTIwdGhlaXIlMjBvd24lMjBidW5kbGVyJTBBaHR0cHMlM0ElMkYlMkZieXRlcy5kZXYlMkZhcmNoaXZlcyUyRjQ0NiZzdWJqZWN0PVlvdSUyMGxpa2UlMjBjb3JuYnJlYWQlM0Y=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1812139983"><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/buff-simpsons2.jpg" alt="Mr Burns looking buff and a guy bowing to him" 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 showing my team how to build backend components<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/58hvh8ug73wlm2s6/aHR0cHM6Ly9uZXdzLmNvbnZleC5kZXYvY29tcG9uZW50cy1hdXRob3Jpbmcv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139984">You can build your own Convex Components now</a></h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">This lets you package up Convex functions, schemas, and persistent state into a reusable module that you or other developers can drop right into your projects.</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;">How is that different from writing a library?</strong> They operate more like <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/25h2h9u3dlxn2zi3/aHR0cHM6Ly9kb2NzLmNvbnZleC5kZXYvY29tcG9uZW50cy9hdXRob3Jpbmc=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139985">mini Convex apps</a> that let you share common backend capabilities like rate limiting, aggregates, and AI agents across projects.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">With Convex Components, you can:</p>
<ul>
<li>Persist data to tables where you control the schema</li>
<li>Isolate access to data behind an API boundary</li>
<li>Define queries, mutations, and actions that can run asynchronously</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.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/qvh8h8udne3qrmul/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g_dj1INEppSFV4Wlo2aw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139986">Watch this quick YouTube demo</a> to learn how you can use a Vite + Convex to build your own backend components from scratch.</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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/9qhzhdud948np5f9/aHR0cHM6Ly93d3cuY2FsbHN0YWNrLmNvbS9ldmVudHMvcmVhY3QtbmF0aXZlLW9uLW1ldGEtcXVlc3QtYS1kZXZlbG9wZXJzLWd1aWRlLXRvLWJ1aWxkaW5nLWZvci12cj91dG1fY2FtcGFpZ249bWV0YSZ1dG1fbWVkaXVtPWVtYWlsJnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139988">Callstack</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>VR is the next frontier for React Native devs - <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/9qhzhdud948np5f9/aHR0cHM6Ly93d3cuY2FsbHN0YWNrLmNvbS9ldmVudHMvcmVhY3QtbmF0aXZlLW9uLW1ldGEtcXVlc3QtYS1kZXZlbG9wZXJzLWd1aWRlLXRvLWJ1aWxkaW5nLWZvci12cj91dG1fY2FtcGFpZ249bWV0YSZ1dG1fbWVkaXVtPWVtYWlsJnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139988">watch</a> and learn why.</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;">differenceInMilliseconds</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">date1<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> date2</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> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span> <span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">getTime</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> getTime1 <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 keyword" style="color: #f38ba3; font-size: 14px;">new</span> <span class="token class-name" style="color: #12b5e5; font-size: 14px;">Date</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>date1<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> <span class="token punctuation" style="color: #231F20; font-size: 14px;">{</span> <span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">getTime</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> getTime2 <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 keyword" style="color: #f38ba3; font-size: 14px;">new</span> <span class="token class-name" style="color: #12b5e5; font-size: 14px;">Date</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>date2<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 function" style="color: #9d7dce; font-size: 14px;">getTime1</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 function" style="color: #9d7dce; font-size: 14px;">getTime2</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 function" style="color: #9d7dce; font-size: 14px;">differenceInMilliseconds</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">'2021-01-01'</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> <span class="token string" style="color: #f99157; font-size: 14px;">'2021-01-02'</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;"><a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/3ohphdu3zx8v7ksr/aHR0cHM6Ly96aWdsYW5nLm9yZy9uZXdzL21pZ3JhdGluZy1mcm9tLWdpdGh1Yi10by1jb2RlYmVyZy8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139989">Zig migrated from GitHub to Codeberg</a> for a mixture of political reasons (totally fair) and frustrations with “inexcusable bugs.” Codeberg rewarded their trust by promptly getting <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/n2hohquvr24e34t6/aHR0cHM6Ly9zb2NpYWwuYW5veGlub24uZGUvQENvZGViZXJnLzExNTY1MjI4OTk0OTk2NTkyNQ==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139990">hit with a DDoS attack</a> and going down for a while (not cool, Satya).</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Right on cue, Sinclair Target shared some <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/48hvh7umgw3krofx/aHR0cHM6Ly9zaW5jbGFpcnRhcmdldC5jb20vYmxvZy8yMDI1LzA4L3Rob3VnaHRzLW9uLWdvLXZzLi1ydXN0LXZzLi16aWcv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139991">thoughts on Go vs. Rust vs. Zig</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Most AI projects fail during implementation – which is why Augment Code created this <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/wnh2h6uqgmd8q9i7/aHR0cHM6Ly9mYW5kZi5jby80ckRpTjVh" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139992">Guide to Closing the Enterprise AI Failure Rate Gap</a>. It provides the specific infrastructure patterns, monitoring architectures, and deployment strategies that actually work at scale. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Critical security vulnerabilities are becoming super trendy these days, and the React Team just announced their own <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/reh8h9umxkpnm2c2/aHR0cHM6Ly9yZWFjdC5kZXYvYmxvZy8yMDI1LzEyLzAzL2NyaXRpY2FsLXNlY3VyaXR5LXZ1bG5lcmFiaWxpdHktaW4tcmVhY3Qtc2VydmVyLWNvbXBvbmVudHM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139993">unauthenticated remote code execution vulnerability in RSC</a>. You should upgrade your React projects asap – unless you were too lazy to upgrade to React 19 in the first place. Then you’re good.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/08hwhgu2zn4q29al/aHR0cHM6Ly9naXRodWIuY29tL2FybmFyZy9uaXh0bWw=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139994">nixtml</a> is a static site generator written in nix.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Daniel Rosenwasser shared an update on <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/8ghqh3uo9w8ko3hk/aHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL3R5cGVzY3JpcHQvcHJvZ3Jlc3Mtb24tdHlwZXNjcmlwdC03LWRlY2VtYmVyLTIwMjUv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139995">TypeScript 7</a>. It’s codenamed <em>Project Corsa,</em> but it should hopefully run a lot better than the Vauxhall Corsa I rented last time I went to London.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/vqh3hmuogm68o3ug/aHR0cHM6Ly9jYXJib25xYS5jb20vP3V0bV9jYW1wYWlnbj1jb29sX2JpdHMmdXRtX2NvbnRlbnQ9ZGVjNSZ1dG1fbWVkaXVtPWVtYWlsJnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139996">CarbonQA</a> provides high-quality QA services for dev teams, so you’ll never have to waste time testing your own app again. Their US-based testers work in your tools, talk with your team on Slack, and let your devs spend their time building real features. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Zach Leatherman wrote some security suggestions for <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/l2heh6ulrqpwlzb6/aHR0cHM6Ly93d3cuemFjaGxlYXQuY29tL3dlYi9ucG0tc2VjdXJpdHkv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139997">locking down your npm publishing workflows</a>. So maybe you can help prevent <em>Shai Halud 3: The Return of the Worm</em> from infecting an npm package near you.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Bramus wrote about <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/m2h7h6u3e2xw3nsm/aHR0cHM6Ly93d3cuYnJhbS51cy8yMDI1LzEyLzAyL2FuY2hvci1wb3NpdGlvbmluZy1hbmQtdGhlLWluc2V0LW1vZGlmaWVkLWNvbnRhaW5pbmctYmxvY2staW1jYi8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139998">the most likely reason you still get surprised by anchor positioning</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">JavaScript turned 30 years old and keeps complaining about its thinning hairline and how there aren’t any good indie bands anymore. To celebrate, enjoy <a href="https://click.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/dphehmue5dxreqam/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvMjU=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139999">this story we wrote on JavaScript’s 25th birthday</a> – which also happened to be issue #25 of Bytes <span role="img" aria-label="yin yang">☯️</span>. Call me Will Byers, because I’ve been in sync with the JS hivemind for a long time.</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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/9qhzhdud948np5f9/aHR0cHM6Ly93d3cuY2FsbHN0YWNrLmNvbS9ldmVudHMvcmVhY3QtbmF0aXZlLW9uLW1ldGEtcXVlc3QtYS1kZXZlbG9wZXJzLWd1aWRlLXRvLWJ1aWxkaW5nLWZvci12cj91dG1fY2FtcGFpZ249bWV0YSZ1dG1fbWVkaXVtPWVtYWlsJnV0bV9zb3VyY2U9Ynl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1812139988">Callstack</a>
</h4></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;">differenceInMilliseconds</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 14px;">date1<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> date2</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> t1 <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;">Date</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>date1<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;">getTime</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 keyword" style="color: #f38ba3; font-size: 14px;">const</span> t2 <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;">Date</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span>date2<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;">getTime</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 keyword" style="color: #f38ba3; font-size: 14px;">return</span> t1 <span class="token operator" style="color: #12b5e5; font-size: 14px;">-</span> t2<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;">differenceInMilliseconds</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">(</span><span class="token string" style="color: #f99157; font-size: 14px;">'2021-01-01'</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> <span class="token string" style="color: #f99157; font-size: 14px;">'2021-01-02'</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>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">In JavaScript, class methods are not direct properties of an instance, but rather belong to the class’s prototype. When you try to destructure a method, you’re attempting to extract it directly from the instance, which doesn’t work because <code style="font-size: 14px;">getTime</code> isn’t a direct property. On the other hand, <code style="font-size: 14px;">new Date().getTime()</code> works because JavaScript checks the <code style="font-size: 14px;">prototype</code> chain and finds <code style="font-size: 14px;">getTime</code> on the <code style="font-size: 14px;">Date</code> prototype.</p>
<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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/e0hph0u74mz570s8/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1812140000">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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/7qh7h2u9zde399fz/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1812140001">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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/owhkhwuwoxe5wgav/aHR0cHM6Ly91aS5kZXY=" url-id="1812140002">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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml/z2hgh7uew5z0ewip/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1812140003">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/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml">Unsubscribe</a></span>
<!-- -->
<img src="https://open.kit-mail6.com/38u909o4rrakh2v9l40hrh4qgw2nns7h4oml" alt="">
</body>
</html>