<!DOCTYPE html>
<html>
<head>
<title>Bytes: Grading our 2025 predictions</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> CSS Christmas hymns, a new way to pay for data center lawsuits, and the fine line between onboarding and torture.</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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/z2hgh7ue09w523sp/aHR0cHM6Ly9ieXRlcy5kZXYvYXJjaGl2ZXMvNDQ5" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638264">#449</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/penguin-smile.jpg" alt="The Penguin from Batman standing in the snow" 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;">Old Man Winter coming to remind me of all my freezing cold takes<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;">Grading our 2025 predictions</h3>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">It’s the most wonderful time of the year – when newsletter writers, YouTubers, and people who unironically refer to themselves as “thought leaders” start sharing their predictions for the upcoming year.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">But only a precious few are <del>shameless</del> <em>courageous</em> enough to publicly review last year’s predictions and confront those freezing cold takes in the light of day.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">But hey, you can’t spell “accountability” without “Bytes” – so let’s dive in.</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;">Prediction #1:</strong> SPAs will make a comeback.</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;">Grade: B-.</strong> We definitely saw some developers give up on the complexity of SSR-first frameworks and return to the simplicity of SPAs with tools like Vite and Solid.js. But it didn’t really make a dent in the ubiquity of React – which somehow grew its npm downloads <em>and</em> its CVEs by 3x this year.</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;">Prediction #2:</strong> 2025 will be the year of <del>the Singularity</del> TanStack.</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;">Grade: A.</strong> TanStack Query continued to dominate, TanStack Router downloads jumped another 7x, and TanStack Start feels like the last great hope against the full Next-ification of web dev. The team also launched a headless form library, a client-first store, an AI SDK, and a unified devtools panel. The Great Stackening is upon us.</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;">Prediction #3:</strong> We all get sick of paying for serverless and start moving off it.</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;">Grade: D.</strong> Lots of developers <em>complained</em> about serverless prices, but very few actually followed DHH’s example and pulled the ripcord. And with the rise of vibe coding, one-click deploy platforms, and the general <em>tokenization</em> of everything, you could argue that developers are willing to spend more money than ever to write and host software – even if they complain about it.</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;">Prediction #4:</strong> React Router will bring RSC to the masses.</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;">Grade: C-.</strong> Framework Mode in RR v7 <em>did</em> make RSC more approachable (in theory), but it didn’t exactly “bring it to the masses” – since the vast majority of RSC connoisseurs are still using Next.js.</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;">Prediction #5:</strong> Every VC-backed OSS company will magically become an AI company.</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;">Grade: A+.</strong> Not only did every tech startup pivot to becoming some sort of LLM wrapper, every public tech company desperately tried to prove that they were building the most exciting AI play of the year – lest they have their market cap cut in half. I guess that’s why Doordash just launched <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/p8hehqu48kxrw4hq/aHR0cHM6Ly90ZWNoY3J1bmNoLmNvbS8yMDI1LzEyLzE2L2Rvb3JkYXNoLXJvbGxzLW91dC16ZXN0eS1hbi1haS1zb2NpYWwtYXBwLWZvci1kaXNjb3ZlcmluZy1uZXctcmVzdGF1cmFudHMv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638265">Zesty</a> yesterday, “an AI social app for discovering new restaurants.” I wish I was making that up.</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;">Prediction #6:</strong> Everyone learns about DOM components.</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;">Grade: F.</strong> I choose to blame this one on my intern, who may or may not be real.</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;">Prediction #7:</strong> TypeScript will get even bigger.</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;">Grade: A.</strong> Not exactly our boldest prediction, but we’ll take what we can get at this point. TypeScript overtook Python and JavaScript to become <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/x0hph3uex83kv9b5/aHR0cHM6Ly9naXRodWIuYmxvZy9uZXdzLWluc2lnaHRzL29jdG92ZXJzZS9vY3RvdmVyc2UtYS1uZXctZGV2ZWxvcGVyLWpvaW5zLWdpdGh1Yi1ldmVyeS1zZWNvbmQtYXMtYWktbGVhZHMtdHlwZXNjcmlwdC10by0xLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638266">the most used language on GitHub in 2025</a>, which was “the most significant language shift in more than a decade.” Every major frontend framework and coding LLM now scaffolds with TypeScript by default, and platforms like Convex let you write your entire backend in TS now too. I knew the Type nerds would get the last laugh.</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;">Prediction #8:</strong> Netlify will acquire Astro.</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;">Grade: D+.</strong> Ok fine, we were wrong about Netlify’s M&A plans for the third year in a row – but I refuse to take another F, because they <em>did</em> become Astro’s official hosting partner and their largest corporate sponsor. So I’m still holding out hope that this marriage will eventually happen. Nastro 2026.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;"><strong style="font-weight: 600;">Bottom Line:</strong> Overall, I think we deserve a B- for accuracy, an A for delusion, and a “see me after school” for classroom behavior. Look out for fresh 2026 predictions in January.</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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/6qhehoul0vox8oio/aHR0cHM6Ly9mYWNlYm9vay5jb20vc2hhcmVyL3NoYXJlci5waHA_dT1odHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDQ5" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1815638267"><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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/e0hph0u7594m35t8/aHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3NoYXJpbmcvc2hhcmUtb2Zmc2l0ZS8_dXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0NDk=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1815638268"><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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/7qh7h2u93vzd2dtz/aHR0cHM6Ly90d2l0dGVyLmNvbS9pbnRlbnQvdHdlZXQvP3RleHQ9SSUyMHRoaW5rJTIwd2UlMjBkZXNlcnZlJTIwYSUyMEItJTIwZm9yJTIwYWNjdXJhY3klMkMlMjBhbiUyMEElMjBmb3IlMjBkZWx1c2lvbiUyQyUyMGFuZCUyMGElMjAlMjdzZWUlMjBtZSUyMGFmdGVyJTIwc2Nob29sJTI3JTIwZm9yJTIwY2xhc3Nyb29tJTIwYmVoYXZpb3ImdXJsPWh0dHBzJTNBJTJGJTJGYnl0ZXMuZGV2JTJGYXJjaGl2ZXMlMkY0NDk=" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1815638269"><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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/owhkhwuw53oxmpiv/bWFpbHRvOj9ib2R5PVRob3VnaHQlMjB5b3UlMjdkJTIwbG92ZSUyMHRoaXMlMjB3ZWVrJTI3cyUyMEJ5dGVzJTBBLS0tJTBBSSUyMHRoaW5rJTIwd2UlMjBkZXNlcnZlJTIwYSUyMEItJTIwZm9yJTIwYWNjdXJhY3klMkMlMjBhbiUyMEElMjBmb3IlMjBkZWx1c2lvbiUyQyUyMGFuZCUyMGElMjAlMjdzZWUlMjBtZSUyMGFmdGVyJTIwc2Nob29sJTI3JTIwZm9yJTIwY2xhc3Nyb29tJTIwYmVoYXZpb3IlMEFodHRwcyUzQSUyRiUyRmJ5dGVzLmRldiUyRmFyY2hpdmVzJTJGNDQ5JnN1YmplY3Q9WW91JTIwbGlrZSUyMGNvcm5icmVhZCUzRg==" rel="noopener" style="color: #12b5e5; font-weight: 600; padding-left: 5px; text-decoration: none;" target="_blank" url-id="1815638270"><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/qa-wolf-logo.png" alt="QA Wolf 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/merlin-skate.jpg" alt="Merlin skating on water while holding up his beard and robes" 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 updating our app’s entire test suite with a single prompt<!-- --> </p>
</div>
<h3 style="font-size: 24px; margin-bottom: 0; padding-left: 24px; padding-right: 24px;"><a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/z2hgh7ue09w526tp/aHR0cHM6Ly93d3cucWF3b2xmLmNvbS9wbGF0Zm9ybT91dG1fY2FtcGFpZ249QUNRX0FsbF9EZW1vX0NvbnZlcnNpb25zX19OZXdzbGV0dGVyQXVkaWVuY2VfLV9OZXdzbGV0dGVyX0ludHJvZHVjaW5nQUlGb3JEZWVwQ292ZXJhZ2VfMjAyNTEyMTctTm9uZV9FeHBlcmltZW50LUZBTFNFJnV0bV9jb250ZW50PUludHJvZHVjaW5nQUlGb3JEZWVwQ292ZXJhZ2VfR2V0RWFybHlBY2Nlc3NUb2RheV9Ob25lX0hlYWRsaW5lJTNBSW50cm9kdWNpbmdBSUZvckRlZXBDb3ZlcmFnZV9fX19OZXdzbGV0dGVyLVByaW1hcnlQbGFjZW1lbnRfMjAyNTEyMTdfdjFfJnV0bV9tZWRpdW09bmV3c2xldHRlciZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638271">Introducing AI for Deep Coverage – New from QA Wolf</a></h3>
<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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/z2hgh7ue09w526tp/aHR0cHM6Ly93d3cucWF3b2xmLmNvbS9wbGF0Zm9ybT91dG1fY2FtcGFpZ249QUNRX0FsbF9EZW1vX0NvbnZlcnNpb25zX19OZXdzbGV0dGVyQXVkaWVuY2VfLV9OZXdzbGV0dGVyX0ludHJvZHVjaW5nQUlGb3JEZWVwQ292ZXJhZ2VfMjAyNTEyMTctTm9uZV9FeHBlcmltZW50LUZBTFNFJnV0bV9jb250ZW50PUludHJvZHVjaW5nQUlGb3JEZWVwQ292ZXJhZ2VfR2V0RWFybHlBY2Nlc3NUb2RheV9Ob25lX0hlYWRsaW5lJTNBSW50cm9kdWNpbmdBSUZvckRlZXBDb3ZlcmFnZV9fX19OZXdzbGV0dGVyLVByaW1hcnlQbGFjZW1lbnRfMjAyNTEyMTdfdjFfJnV0bV9tZWRpdW09bmV3c2xldHRlciZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638271">QA Wolf’s</a> new AI assistant maps and tests even your app’s most complex user flows. Prompting generates deterministic Playwright and Appium code that runs 12x faster and more reliably than other AI testing tools.</p>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">What sets our AI apart:</p>
<ul>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Maps 150+ test cases in minutes instead of weeks of manual planning.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Executes tests 12x faster than vision-based agents.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Runs entire suites 100% parallel with consistent results.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Produces open-source tests your team owns, with zero vendor lock-in.</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://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/z2hgh7ue09w526tp/aHR0cHM6Ly93d3cucWF3b2xmLmNvbS9wbGF0Zm9ybT91dG1fY2FtcGFpZ249QUNRX0FsbF9EZW1vX0NvbnZlcnNpb25zX19OZXdzbGV0dGVyQXVkaWVuY2VfLV9OZXdzbGV0dGVyX0ludHJvZHVjaW5nQUlGb3JEZWVwQ292ZXJhZ2VfMjAyNTEyMTctTm9uZV9FeHBlcmltZW50LUZBTFNFJnV0bV9jb250ZW50PUludHJvZHVjaW5nQUlGb3JEZWVwQ292ZXJhZ2VfR2V0RWFybHlBY2Nlc3NUb2RheV9Ob25lX0hlYWRsaW5lJTNBSW50cm9kdWNpbmdBSUZvckRlZXBDb3ZlcmFnZV9fX19OZXdzbGV0dGVyLVByaW1hcnlQbGFjZW1lbnRfMjAyNTEyMTdfdjFfJnV0bV9tZWRpdW09bmV3c2xldHRlciZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638271">Get early access today</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/tip.png" alt="Tip logo" style="max-width: 100%;"><h2 style="font-family: Paytone One, sans-serif; font-size: 28px; margin-top: 10px; text-transform: uppercase;">The Tip</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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/p8hehqu48kxrwoaq/aHR0cHM6Ly93d3cuZGF0YWRvZ2hxLmNvbS9yZXNvdXJjZXMvZnJvbnRlbmQtZGV2ZWxvcGVyLWtpdC8_dXRtX2NhbXBhaWduPWRnLWNvcmVwbGF0Zm9ybS13dy1mcm9udGVuZC1kZXYta2l0LWJ5dGVzJnV0bV9tZWRpdW09bmV3c2xldHRlciZ1dG1fc291cmNlPWJ5dGVzZGV2" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638272">Datadog</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>Their <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/p8hehqu48kxrwoaq/aHR0cHM6Ly93d3cuZGF0YWRvZ2hxLmNvbS9yZXNvdXJjZXMvZnJvbnRlbmQtZGV2ZWxvcGVyLWtpdC8_dXRtX2NhbXBhaWduPWRnLWNvcmVwbGF0Zm9ybS13dy1mcm9udGVuZC1kZXYta2l0LWJ5dGVzJnV0bV9tZWRpdW09bmV3c2xldHRlciZ1dG1fc291cmNlPWJ5dGVzZGV2" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638272">Front-end Developer Kit</a> gives you a best practices guide for front-end testing, a solutions brief on how to catch and resolve issues proactively, and more.</em></p>
</div>
</div>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5; padding-left: 24px; padding-right: 24px;">Sometimes you need to remove a key/value from an object. Using the power of JavaScript™ (and ES6’s rest operator), you can accomplish that with something like this.</p>
<pre class="language-js" style="background-color: #f9f9f9; border: 1px solid #f9f9f9; border-radius: 8px; color: #231F20; overflow: auto; padding: 24px;"><code class="language-js" style="font-size: 14px;"><span class="token keyword" style="color: #f38ba3; font-size: 14px;">const</span> user <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 literal-property property" style="color: #12b5e5; font-size: 14px;">name</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> <span class="token string" style="color: #f99157; font-size: 14px;">'Tyler'</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span>
<span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">age</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> <span class="token number" style="color: #fcba28; font-size: 14px;">30</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span>
<span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">date</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> <span class="token number" style="color: #fcba28; font-size: 14px;">1765989526349</span><span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span>
<span class="token literal-property property" style="color: #12b5e5; font-size: 14px;">funny</span><span class="token operator" style="color: #12b5e5; font-size: 14px;">:</span> <span class="token boolean" style="color: #9d7dce; font-size: 14px;">true</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> funny<span class="token punctuation" style="color: #231F20; font-size: 14px;">,</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">...</span>updatedUser <span class="token punctuation" style="color: #231F20; font-size: 14px;">}</span> <span class="token operator" style="color: #12b5e5; font-size: 14px;">=</span> user
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>updatedUser<span class="token punctuation" style="color: #231F20; font-size: 14px;">)</span> <span class="token comment" style="color: rgb(167, 167, 167); font-size: 14px;">// {name: "Tyler", age: 30, date: 1765989526349}</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;">Microsoft announced a <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/x0hph3uex83kv6s5/aHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9ibG9nL2pzdHMtbW9kZXJuaXplci1wcmV2aWV3" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638273">JavaScript/TypeScript Modernizer for VS Code</a> that analyzes your project, automatically updates your npm packages to their latest versions, and recommends other code changes that can help you cut down on technical debt. It’s basically <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/6qhehoul0vox88ho/aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUXVlZXJfRXllXygyMDAzX1RWX3Nlcmllcyk=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638274">Queer Eye</a> for your musty old JavaScript codebase.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Google <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/kkhmh2un4gmz0ktl/aHR0cHM6Ly9mb250cy5nb29nbGUuY29tL3NwZWNpbWVuL0dvb2dsZStTYW5zK0ZsZXg=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638275">open-sourced its new Google Sans Flex font</a>, and I’m 60% sure Marco Rubio has already tried to ban it.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/58hvh8uglp73d6c6/aHR0cHM6Ly9jb2RlcmFiYml0LmxpbmsvYnl0ZXM=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638276">CodeRabbit reads your CLAUDE.md, .cursorrules, and Copilot-instructions files</a>, and it uses them to enforce code quality in every PR review – so your comments line up with the rules you have already written. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Joone Jur and Patrick Brosset wrote a proposal for <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/25h2h9u3nrdlpqf3/aHR0cHM6Ly9ibG9ncy53aW5kb3dzLmNvbS9tc2VkZ2VkZXYvMjAyNS8xMi8wOS9tYWtpbmctY29tcGxleC13ZWItYXBwcy1mYXN0ZXIv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638277">making complex web apps faster</a> on the Windows blog. Don’t worry, they don’t mention Web Components anywhere. I double checked.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Culi wrote about how <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/qvh8h8udqgnem3ul/aHR0cHM6Ly9jdWxpLmJlYXJibG9nLmRldi9qc2RvYy1pcy10eXBlc2NyaXB0Lw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638278">JSDoc *is* TypeScript</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Lazar Nikolov wrote on the Sentry blog about <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/g3hnhwumx7pg8var/aHR0cHM6Ly9ibG9nLnNlbnRyeS5pby9sZXNzLXRoYW4tMTAwbXMtZS1jb21tZXJjZS1pbnN0YW50LWxvYWRzLXdpdGgtc3BlY3VsYXRpb24tcnVsZXMtYXBpLz91dG1fY2FtcGFpZ249Z2VuZXJhbC1meTI2cTQtZWNvbW1lcmNlJnV0bV9jb250ZW50PW5ld3NsZXR0ZXItMTAwbXMtZWNvbW0tYmxvZy1sZWFybm1vcmUmdXRtX21lZGl1bT1wYWlkLWNvbW11bml0eSZ1dG1fc291cmNlPWJ5dGVz" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638279">how to get sub-100ms load times using the Speculation Rules API</a> – which lets the browser prefetch the pages users are about to click. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Greg Pstrucha spent his Thanksgiving weekend torturing Claude to create <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/9qhzhdudnk94okf9/aHR0cHM6Ly9ncmljaGEuZGV2L2Jsb2cvdGhlLWhpZ2hlc3QtcXVhbGl0eS1jb2RlYmFzZQ==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638280">the highest quality codebase</a>. But what some called “torture,” my first manager called “onboarding.”</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Just when you thought the world was running out of ways to make itself more expensive, <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/3ohphdu3v6zxeoar/aHR0cHM6Ly9naXRodWIuYmxvZy9jaGFuZ2Vsb2cvMjAyNS0xMi0xNi1jb21pbmctc29vbi1zaW1wbGVyLXByaWNpbmctYW5kLWEtYmV0dGVyLWV4cGVyaWVuY2UtZm9yLWdpdGh1Yi1hY3Rpb25zLw==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638281">GitHub plans to start charging for self-hosted Action runners in March 2026</a>. Gotta pay for those data center lawsuits somehow.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Terence Eden is once again asking AI web scrapers to <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/n2hohquvewr2zxa6/aHR0cHM6Ly9zaGtzcHIubW9iaS9ibG9nLzIwMjUvMTIvc3RvcC1jcmF3bGluZy1teS1odG1sLXlvdS1kaWNraGVhZHMtdXNlLXRoZS1hcGkv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638282">stop crawling his HTML</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;"><a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/48hvh7umkzgw49ix/aHR0cHM6Ly93d3cucm9ja2V0Lm5ldy8_dXRtX2NhbXBhaWduPTNyZGRlY3NlY29uZGFyeSZ1dG1fbWVkaXVtPWJ5dGVzJnV0bV9zb3VyY2U9bmV3c2xldHRlcg==" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638283">Rocket</a> is pioneering Vibe Solutioning, turning prompts or Figma designs into production-ready web and mobile apps. Use <code style="font-size: 14px;">/</code> and <code style="font-size: 14px;">@</code> commands to execute tasks with precision and context, making repetitive workflows fast, accurate, and effortless. [sponsored]</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Ali Ben wrote about how <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/wnh2h6uq89gmevi7/aHR0cHM6Ly9zaW1wbGVvYnNlcnZhYmlsaXR5LmNvbS9ibG9nL2dvLXBvcnRhYmxlLXVudGlsLWlzbnQ=" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638284">Go is portable, until it isn’t</a>.</p>
</li>
<li>
<p style="font-family: Outfit, sans-serif; font-size: 17px; line-height: 1.5;">Mike McCourt wrote an article called <a href="https://click.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/reh8h9umn9xkget2/aHR0cHM6Ly9ibG9nLnN0dXJkeXN0YXRpc3RpY3MuY29tL3Bvc3RzL2h0bWwv" style="color: #12b5e5; font-weight: 600; text-decoration: underline;" url-id="1815638285">In Praise of HTML and CSS</a>. If anyone knows how to play the organ, I’m trying to convert this into a church hymn in time for Christmas.</p>
</li>
</ol>
<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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/08hwhgu2q0zn37bl/aHR0cHM6Ly9ieXRlcy5kZXYvYWR2ZXJ0aXNl" url-id="1815638286">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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/8ghqh3uoke9wmguk/aHR0cHM6Ly9ieXRlcy5kZXYvc2hhcmU=" url-id="1815638287">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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/vqh3hmuo82gmzpig/aHR0cHM6Ly91aS5kZXY=" url-id="1815638288">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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v/l2heh6ulw5rq8ls6/aHR0cHM6Ly9ieXRlcy5kZXYvdW5zdWJzY3JpYmU=" style="color: #9B9890;" url-id="1815638289">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/d0unwn7xppb0hord296hmhzl7d544ilhkx3v">Unsubscribe</a></span>
<!-- -->
<img src="https://open.kit-mail6.com/d0unwn7xppb0hord296hmhzl7d544ilhkx3v" alt="">
</body>
</html>