Today’s issue: Webpack’s cure for my gut microbiome, Node.js type stripping, and big React Native news for crypto casinos.
Welcome to #413.
Excuse me sir, do you have a moment to discuss the good word of TanStack?
Our caveman monkey brains love things that come in sets.
For some of us, that manifests as waiting in line for three hours and starting a brawl with strangers to finally collect the final Labubu in the coveted Labubu Forest Fairy Tale set.
For others, it looks like staying up til 2 am playing with the TanStack DB beta that just dropped yesterday, so you can be the first to add the newest TanStack Labubu library to all your projects.
Both activities brought me a lot of joy this week, but TanStack DB probably has slightly more real-world utility. It builds on top of TanStack Query to provide an embedded client-side database that can join, filter, and reactively update across your entire data graph.
And that’s an enticing promise, because right now, most dev teams are forced to choose between two less-than-ideal options for handling client-side data as their app scales:
Option 1: Build tons of view-specific API endpoints – gives you a fast UI, but a sprawling backend drowning in brittle API routes and network waterfalls
Option 2: Load everything and filter on the client – simplifies your backend, but slows down your UI with cascading re-renders and other perf issues
TanStack DB introduces a new Option 3: Load normalized data collections once, then run lightning-fast joins and filters right in the browser – using differential dataflow to update only what changed.
The goal here is to simplify your API, reduce your network calls, and make your frontend faster as your dataset grows.
And if you’re already using TanStack Query, you can incrementally adopt TanStack DB one collection at a time. Like two Labubus in a pod – if one handled data fetching and the other handled fast joins.
Bottom Line: Now we just need the TanStack team to create some sort of fuzzy character on a keychain that I can hang from my Birkin bag.
![]() ![]() ![]() ![]() |
When your serverless bill is more than your rent
They make it easy to set up your own Virtual Private Server for more power and control – so we can finally declare independence from our serverless overlords 🙏.
Over 4 million developers use Hostinger to host their sites, because it gives you:
Total control & security – Get full root access to customize everything, DDoS protection, an integrated malware scanner and free automatic weekly backups.
Easy & flexible setup – Choose from a bunch of different operating systems, or use their pre-installed templates to easily deploy frameworks like Next.js and Astro.
Great value – For under $10/month, you get 2 CPUs and 8 GB of RAM with rock-solid performance.
Try their 1-click template to get started – and get an extra 10% discount when you use the coupon code BYTES
.
They created this free guide explaining what multi-tenancy is and why it matters for B2B SaaS, in order to help you better shape your app’s architecture.
function removeElement(array, elementToRemove) {
for (let i = 0; i < array.length; i++) {
if (array[i] === elementToRemove) {
array.splice(i, 1);
}
}
}
let myArray = [1, 2, 3, 2, 4];
removeElement(myArray, 2);
The next version of React Native will introduce precompiled React Native builds for iOS, which promises to cut compile times by up to 10x. Now there’s no excuse for me to not ship my Doodle Jump-themed crypto casino app targeted at Boomers and children under 12.
Onboarding for coding agents shares how Matt Holden shrank his CLAUDE.md
file to 13 lines, while still making sure his agent understood the PTO and workplace diversity policies.
Warp just launched Lightspeed – which gives you 50,000 AI requests/month with their #1 ranked coding agent. Access Claude Opus and Sonnet, GPT-4.1, and Gemini — all in one. Use code LIGHTSPEED20
for 20% off your first month. ($45 value) [sponsored]
ts-regexp is a statically typed alternative to JavaScript’s RegExp.
Chris Dzombak wrote about why you should use your type system. Sometimes it’s the advice you least expect.
Armin Ronacher wrote about agentic coding things that didn’t work.
Embrace just released User Journeys – a new observability feature that tracks how technical performance impacts user engagement with your app’s features. It’s like zooming out one level from logs and spans to incorporate user behavior as a signal. [sponsored]
Vite just passed Webpack in weekly npm downloads, and the Rainforest spontaneously started to regenerate, and my gut microbiome magically healed itself 🙏.
Node.js v22.18 now has type stripping by default, which means TypeScript support is enabled by default, which means no one’s allowed to complain about this anymore.
Convex launched a Resend Component that lets you easily integrate Resend’s DX-focused email service with any Convex project. They also just kicked off a hackathon with over $5,000 in prizes. [sponsored]
Tan Li Hau wrote about how you can compile Svelte 5 in your head.
Steve Krouse wrote about how vibe code is legacy code. At one point he says that asking AI to fix its own errors that you don’t understand is like “paying off credit card debt with another credit card” – which I found offensive, considering this strategy has helped my credit score almost crack the 600 mark.
function removeElement(array, elementToRemove) {
for (let i = 0; i < array.length; i++) {
if (array[i] === elementToRemove) {
array.splice(i, 1);
}
}
}
let myArray = [1, 2, 3, 2, 4];
removeElement(myArray, 2);
This solution isn’t ideal since it doesn’t account for the fact that the array is being modified as it’s being iterated over. When the element at index 1
is removed, the element at index 2
is shifted to index 1
.
There are a bunch of ways to make this better, all with varying tradeoffs. This is probably the best one, which uses JavaScript’s filter
method to return a new array after filtering out the elementToRemove
.
function removeElement(array, elementToRemove) {
return array.filter((element) => element !== elementToRemove);
}