<!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/ulf-the-white.jpeg">
<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/orkes-logo.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/pool-computer.jpg">
<link rel="preload" as="image" href="https://bytes.dev/images/content/spot-the-bug.png">
<link rel="preload" as="image" href="https://bytes.dev/images/content/cool-bits.png">
<link rel="preload" as="image" href="https://bytes.dev/images/bytes-icon.png">
<title>Bytes: TypeScript 7 is here</title>
<meta name="color-scheme" content="light dark">
<meta name="supported-color-schemes" content="light dark">
<link href="https://fonts.googleapis.com/css2?family=Fira+Mono&family=Outfit:wght@400;500;700;900&family=Paytone+One" rel="stylesheet">
<style>@media (prefers-color-scheme: dark) {
.email-wrapper {
color: #F9F4DA !important;
background-color: #0F0D0E !important;
}
hr {
border-color: #262422 !important;
}
mark {
background-color: #231F20 !important;
color: #F9F4DA !important;
}
pre {
background-color: #231F20 !important;
border: 1px solid #231F20 !important;
color: #F9F4DA !important;
}
.bg-alt {
background-color: #231F20 !important;
}
.unsubscribe-link {
color: #504C48 !important;
}
.token.punctuation {
color: #f9f4da !important;
}
}
@media screen and (min-width: 600px) {
.mobile-break {
display: none;
}
}</style>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<table class="email-wrapper" border="0" cellspacing="0" width="100%" style="background-color: #FFF; border-collapse: collapse; color: #231F20; font-family: Outfit, sans-serif; font-size: 18px; width: 100%;"><tbody><tr>
<td style="border-collapse: collapse !important; word-break: normal;"></td>
<td width="600px" style="border-collapse: collapse !important; width: 600px; word-break: normal;"><div style="max-width:600px;padding-top:80px">
<div style="text-align:center"><img width="600" style="max-width: 100%; padding-bottom: 40px;" src="https://bytes.dev/images/bytes-banner-rounded.png" alt="Bytes"></div>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Today’s issue:</strong> Sending my agent a strongly worded email, importing text files for fun, and the most expensive blog post of all time.</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/ulf-the-white.jpeg" alt="Ulf the White" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 17px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">Finally, a TypeScript release we can all be excited about<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">TypeScript 7 is here</h3>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Usually when we write about TypeScript releases, it takes everything in me to pretend to be excited about things like “inferred type predicates”. Fortunately, in <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/g3hnhwum852zzqirh9/aHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL3R5cGVzY3JpcHQvYW5ub3VuY2luZy10eXBlc2NyaXB0LTctMA==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201956">TypeScript 7</a>, which finally came out this past week, there is something we can all get excited about: speed.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">A little over a year ago, Anders Hejlsberg announced that the team at Microsoft was porting the TypeScript codebase from JavaScript to Go to make the compiler 10x faster. Fast forward to today and that work finally landed. Now you can see those red squiggles instantly when you open a file. Yay. Here are a few of the notable improvements the Go port unlocks.</p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><strong style="font-weight: 600;">Max Parallelization:</strong> In TypeScript 7 <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/9qhzhdudvm822ef9h3/aHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL3R5cGVzY3JpcHQvYW5ub3VuY2luZy10eXBlc2NyaXB0LTctMC8jY3VzdG9tLXNjYWxpbmc6LXBhcmFsbGVsaXphdGlvbi1hbmQtY29udHJvbHM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201957">parsing, type-checking, and emitting file updates</a> are mostly done in parallel. Since this can get a little memory hungry, they included a <code style="font-size: 15px;">--singleThreaded</code> flag to opt out on resource-constrained environments.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><strong style="font-weight: 600;">Better Editor Experience:</strong> The <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/3ohphdu35l8dd8trhn/aHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL3R5cGVzY3JpcHQvYW5ub3VuY2luZy10eXBlc2NyaXB0LTctMC8jZWRpdG9yLWV4cGVyaWVuY2U=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201958">language server in version 7</a> is “more stable” than version 6 as a result of better fuzzing against existing codebases and supports auto-imports, expandable hovers, inlay hints, code lenses, go-to-source-definition, JSX linked editing and tag completions, and more.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;"><strong style="font-weight: 600;">Improved Watch Mode:</strong> Built on top of Parcel’s file-watcher, <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/n2hohquv9p4oodh6hg/aHR0cHM6Ly9kZXZibG9ncy5taWNyb3NvZnQuY29tL3R5cGVzY3JpcHQvYW5ub3VuY2luZy10eXBlc2NyaXB0LTctMC8jaW1wcm92ZWQtLS13YXRjaC1tb2Rl" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201959"><code style="font-size: 15px;">--watch</code> mode</a> is now more reliable across platforms, takes up less CPU time, and scales better for large projects.</p>
</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">There is still no programmatic API for version 7, so projects like MDX, Svelte, Vue, and Astro are stuck on version 6 for the time being.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Bottom Line:</strong> Roasting TypeScript nerds is one of my favorite activities, but today, we all feast at the table of performance gains thanks to Anders and friends.</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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/48hvh7umde320zsxh7/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNTAy" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1869201960"><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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/wnh2h6uq2pdor5u7hx/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY1MDI=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1869201961"><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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/reh8h9umlrp5q3b2h6/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9VHlwZVNjcmlwdCUyMDclMjBpcyUyMGhlcmUlMjB3aXRoJTIwYSUyMEdvLXBvd2VyZWQlMjBjb21waWxlciUyMGFuZCUyMGElMjB3aG9sZSUyMGxvdCUyMG1vcmUlMjBzcGVlZC4mdXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY1MDI=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1869201962"><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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/08hwhgu26547mxflh5/bWFpbHRvOj9zdWJqZWN0PVlvdSUyMGxpa2UlMjBjb3JuYnJlYWQlM0YmYm9keT1UaG91Z2h0JTIweW91JTI3ZCUyMGxvdmUlMjB0aGlzJTIwd2VlayUyN3MlMjBCeXRlcyUwQS0tLSUwQVR5cGVTY3JpcHQlMjA3JTIwaXMlMjBoZXJlJTIwd2l0aCUyMGElMjBHby1wb3dlcmVkJTIwY29tcGlsZXIlMjBhbmQlMjBhJTIwd2hvbGUlMjBsb3QlMjBtb3JlJTIwc3BlZWQuJTBBaHR0cHMlM0ElMkYlMkZieXRlcy5kZXYlMkZhcmNoaXZlcyUyRjUwMg==" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1869201963"><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/orkes-logo.png" alt="Orkes 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/pool-computer.jpg" alt="Person using a computer in a pool" width="600" style="border-radius: 5px; max-width: 100%;"><p style="font-family: Outfit, sans-serif; font-size: 17px; font-style: italic; line-height: 1; margin: 0; padding-bottom: 4px; padding-left: 24px; padding-right: 24px; padding-top: 10px; text-align: center;">Seeing if my agent passes the durability test<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/vqh3hmuo976kndbghl/aHR0cHM6Ly9vcmtlcy5pby9ibG9nL2J1aWxkaW5nLWR1cmFibGUtbG9vcHMtd2l0aC1jb25kdWN0b3ItcGFydC0x" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201965">Put your agent on a (durable) loop</a></h3>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Getting agents to work on longer, more complex tasks is the challenge every team is trying to solve right now. Fortunately, Nick Lotz and the team at Orkes wrote an in-depth post about <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/vqh3hmuo976kndbghl/aHR0cHM6Ly9vcmtlcy5pby9ibG9nL2J1aWxkaW5nLWR1cmFibGUtbG9vcHMtd2l0aC1jb25kdWN0b3ItcGFydC0x" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201965">how to build durable agentic loops</a>.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">In this post you’ll learn:</p>
<ul>
<li>What makes a loop durable</li>
<li>How to set up loops with Conductor</li>
<li>How to survive crashes without losing progress</li>
</ul>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">If reading isn’t your thing, the TL;DR is that you need a great durable execution engine to do this well. Fortunately, that’s what Orkes does best. Their platform is open and extensible, and lets you build enterprise-ready workflows.</p>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/l2heh6ulm9pkokf6h0/aHR0cHM6Ly9vcmtlcy5pby8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201966">Check it out</a>.</p>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/spot-the-bug.png" alt="Spot the Bug logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Spot the Bug</h2>
<div class="section-presenter" style="margin-bottom:50px;margin-top:15px">
<h4 style="font-size: 20px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Sponsored by <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/m2h7h6u36pxnootmhq/aHR0cHM6Ly90YWJzdGFjay5haS8_dXRtX3NvdXJjZT1ieXRlc2RldiZ1dG1fbWVkaXVtPW5ld3NsZXR0ZXImdXRtX2NhbXBhaWduPWJ5dGVzLXByZXNlbnRpbmctMjAyNi0wNy0xMA==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201967">Tabstack</a>
</h4>
<p style="font-family: Outfit, sans-serif; font-size: 18px; line-height: 1.5; margin-top: 5px; padding-left: 24px; padding-right: 24px;"><em>Ditch your scraper. Tabstack extracts structured data and automates the web in one API call, with no browser infrastructure to run. Clean JSON, TypeScript SDK. Built by Mozilla, so your data stays yours.</em></p>
</div>
</div>
<pre class="language-js" style="-moz-hyphens: none; -moz-tab-size: 2; -ms-hyphens: none; -o-tab-size: 2; -webkit-hyphens: none; background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; color: #c0c5ce; direction: ltr; font-family: 'Fira Mono', 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 15px; hyphens: none; line-height: 1.5; overflow: 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: 15px; 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: 15px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 15px;">safeUpdate</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 15px;">obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> key<span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> value</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">if</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token operator" style="color: #12b5e5; font-size: 15px;">!</span>obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">hasOwnProperty</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>key<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span>key <span class="token operator" style="color: #12b5e5; font-size: 15px;">=</span> value<span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">const</span> user <span class="token operator" style="color: #12b5e5; font-size: 15px;">=</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token literal-property property" style="color: #12b5e5; font-size: 15px;">name</span><span class="token operator" style="color: #12b5e5; font-size: 15px;">:</span> <span class="token string" style="color: #f99157; font-size: 15px;">"Alice"</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span>
<span class="token literal-property property" style="color: #12b5e5; font-size: 15px;">age</span><span class="token operator" style="color: #12b5e5; font-size: 15px;">:</span> <span class="token number" style="color: #fcba28; font-size: 15px;">30</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token function" style="color: #9d7dce; font-size: 15px;">safeUpdate</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>user<span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token string" style="color: #f99157; font-size: 15px;">"country"</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> <span class="token string" style="color: #f99157; font-size: 15px;">"USA"</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
</code></pre>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/cool-bits.png" alt="Cool Bits logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Cool Bits</h2>
</div>
<ol>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Jarred Sumner finally wrote <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/dphehmue9gx7q0amh4/aHR0cHM6Ly9idW4uY29tL2Jsb2cvYnVuLWluLXJ1c3Q=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201968">the Bun 1.4</a> post he’s been promising for weeks. If it cost $165k in Fable to convert Bun to Rust, how much did this blog post cost?</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">The Nub team (yes that is what they call themselves <span role="img" aria-label="">🫠</span>) <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/e0hph0u73gznk7h8h2/aHR0cHM6Ly9udWJqcy5jb20vYmxvZy91bmJsb2NraW5nLXRoZS1nbG9iYWwtdmlydHVhbC1zdG9yZQ==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201969">cracked the code on phantom dependencies in Node.js</a> and wrote about the path to a 5x faster package manager.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">The Open Source Pledge has raised over $7m for open source software. <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/7qh7h2u927e40wuzh6/aHR0cHM6Ly9vcGVuc291cmNlcGxlZGdlLmNvbS8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201970">Get your company to join the Pledge</a>. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">SpaceXAI released <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/owhkhwuwmve84ocvhr/aHR0cHM6Ly94LmFpL25ld3MvZ3Jvay00LTU=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201971">Grok 4.5, an “Opus” level model</a>. Cheers to petty king Elon for getting this out the day before OAI released Sol.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Speaking of Sol, OpenAI released <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/z2hgh7ue2vzdo0iph0/aHR0cHM6Ly9vcGVuYWkuY29tL2luZGV4L2dwdC01LTYv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201972">GPT 5.6</a> to us plebes (the “cool kids” got it months ago, or so they’ve told us).</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">James Long built a custom tool to visually explore OpenCode and created <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/p8hehqu4w0e79rcqh3/aHR0cHM6Ly9qYW1lc2JveC5leGUueHl6L2FydGlmYWN0cy9vcGVuY29kZS1kcml2ZS1qb3VybmV5Lmh0bWw=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201973">a website that walks you through this journey</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Nicolas Solerieu from Expo wrote a blog about <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/x0hph3uev6m7not5hl/aHR0cHM6Ly9kMmJuMmswNC5uYTEuaHMtc2FsZXMtZW5nYWdlLmNvbS9DdGMvTDArMjMyODQvZDJCTjJrMDQvSmtNMi02cWNXNk4xdkhZNmxaM2xyVzJ6MzlEbDhLbWhrNVc1RFBxNFE4azRtdzZWY2s1R3I5Z2ZTRzZXMlFEQ3l2NHQ1Znk2VzFrc1l3azJWMUZUVFc1d3RYOGw2bXNmQzZXOWprVjVrMjFKOFI3VzZuUnNScjRZMU50Wlc2cTlDdm42bUd3N1BXMUY1a1dqNGc2TGdTVzUzWHJnTTd5UjA1UVc4ck1ON1Q3aGZZUk5XNVM0ejQ4NXNCWVNQVzZTWjZLUTdGaDE4LVcydjBodk42TGpfN3ZXNWpiQndiNkJWQlJKVzhmUzdIUjRRUXpHWlcyeGRzRzUyMzJDOFNXNDlKbE1jNXRiand6VzRTVzZEUzUwLUo2OVc3Z1pZRzM5MHZGcXdXNzl5aE5NMjUzRm1NZjdWNlJ2LTA0" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201974">how to apply timeless design principles to improve your AI-driven app design process</a>. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">Vercel Labs released <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/e0hph0u73gznkoa8h2/aHR0cHM6Ly9uYXRpdmUtc2RrLmRldi8=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201976">a toolkit called <code style="font-size: 15px;">native</code></a> for building native desktop apps. I wonder how hard Andrew Kelley is going to roast their Zig code.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">David Wells wrote an article about <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/7qh7h2u927e407bzh6/aHR0cHM6Ly9kYXZpZHdlbGxzLmlvL2Jsb2cvdHJpZ2dlci1hbi1haS1hZ2VudC13aXRoLWFuLWVtYWls" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201977">how to kick off agents via email</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5;">The React team added some <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/z2hgh7ue2vzdoqhph0/aHR0cHM6Ly9yZWFjdC5kZXYvcmVmZXJlbmNlL3JlYWN0L1N1c3BlbnNlI3doYXQtYWN0aXZhdGVzLWEtc3VzcGVuc2UtYm91bmRhcnk=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201979">new docs on <code style="font-size: 15px;"><Suspense /></code></a>. Personally, I don’t like to share what activates my suspense boundaries, but to each their own.</p>
</li>
</ol>
<hr style="border: 0; border-bottom: 5px solid; border-color: #f5f5f5; margin-bottom: 100px; margin-top: 100px;">
<div style="text-align:center;margin-bottom:36px">
<img width="110" src="https://bytes.dev/images/content/spot-the-bug.png" alt="Spot the Bug logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">Spot the Bug: Solution</h2>
<div class="section-presenter" style="margin-bottom:50px;margin-top:15px"><h4 style="font-size: 20px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Sponsored by <a href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/m2h7h6u36pxnootmhq/aHR0cHM6Ly90YWJzdGFjay5haS8_dXRtX3NvdXJjZT1ieXRlc2RldiZ1dG1fbWVkaXVtPW5ld3NsZXR0ZXImdXRtX2NhbXBhaWduPWJ5dGVzLXByZXNlbnRpbmctMjAyNi0wNy0xMA==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1869201967">Tabstack</a>
</h4></div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">This one was for the beginners.</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: 15px; 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: 15px; 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: 15px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 15px;">safeUpdate</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 15px;">obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> key<span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> value</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">if</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token operator" style="color: #12b5e5; font-size: 15px;">!</span>obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">hasOwnProperty</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>key<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span>key <span class="token operator" style="color: #12b5e5; font-size: 15px;">=</span> value<span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
</code></pre>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Our bug is that we’re adding a literal <code style="font-size: 15px;">key</code> property to our object.</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: 15px; 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: 15px; hyphens: none; line-height: 1.5; tab-size: 2; text-align: left; white-space: pre; word-break: normal; word-spacing: normal;">console<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">log</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>user<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span>key<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token comment" style="color: rgb(167, 167, 167); font-size: 15px;">// "USA"</span>
</code></pre>
<p style="font-family: Outfit, sans-serif; font-size: 19px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">In JavaScript, if you want to use a variable as the key of an object, you need to use bracket notation instead of dot notation.</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: 15px; 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: 15px; 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: 15px;">function</span> <span class="token function" style="color: #9d7dce; font-size: 15px;">safeUpdate</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token parameter" style="color: #f38ba3; font-size: 15px;">obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> key<span class="token punctuation" style="color: #231F20; font-size: 15px;">,</span> value</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
<span class="token keyword" style="color: #f38ba3; font-size: 15px;">if</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span><span class="token operator" style="color: #12b5e5; font-size: 15px;">!</span>obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">.</span><span class="token function" style="color: #9d7dce; font-size: 15px;">hasOwnProperty</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">(</span>key<span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span><span class="token punctuation" style="color: #231F20; font-size: 15px;">)</span> <span class="token punctuation" style="color: #231F20; font-size: 15px;">{</span>
obj<span class="token punctuation" style="color: #231F20; font-size: 15px;">[</span>key<span class="token punctuation" style="color: #231F20; font-size: 15px;">]</span> <span class="token operator" style="color: #12b5e5; font-size: 15px;">=</span> value<span class="token punctuation" style="color: #231F20; font-size: 15px;">;</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
<span class="token punctuation" style="color: #231F20; font-size: 15px;">}</span>
</code></pre>
<div style="text-align:center;padding-bottom:80px;padding-top:80px">
<div class="bg-alt" style="background-color: #f5f5f5; border-radius: 16px; margin-bottom: 40px; padding: 24px;"><div style="margin-top:-40px">
<img src="https://bytes.dev/images/bytes-icon.png" alt="Bytes" width="55px" style="max-width: 100%; width: 55px;"><h5 style="font-size:18px;font-weight:400;margin-bottom:24px">Want us to say nice things <br> about your company?</h5>
<div style="margin-bottom:16px"><a style="background-color: #FCBA28; border: 1px solid #231F20; border-radius: 100px; color: #231F20; font-size: 14px; font-weight: 600; padding: 8px 14px; text-decoration: none;" href="https://c5e21242.click.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/p8hehqu4w0e79qfqh3/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1869201980">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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/x0hph3uev6m7n4i5hl/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1869201981">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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/6qhehoul8g42p4uohk/aHR0cHM6Ly9maXJlc2hpcC5kZXY=" url-id="1869201982">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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26/58hvh8ugd8w9mpc6h4/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1869201984">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/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26">Unsubscribe</a></span>
<!-- -->
<img src="https://c5e21242.open.convertkit-mail.com/r8u3l3erqqhoh3gr49za2hdx6n6qdf7h4n26" alt="">
</body>
</html>