Today’s issue: Vite takes a stand, how to hack a credit card terminal, and things that taste like JavaScript.
Welcome to #397.
The LLM when I tell it to upgrade my app from Angular.js to Angular 20
You know that annoying feeling when your plastic surgeon refuses to let you schedule any more cosmetic procedures, because they’re concerned that you’ve become “borderline unrecognizable” to your friends and family?
We’ve all been there – and so has Angular.
But even though the framework looks a lot different than it did a couple years ago, most developers are pretty happy with the transformation, which includes new-and-improved approaches to SSR, hydration, and reactivity. And with last week’s Angular v20 release, it’s safe to say that the ng-vibes have never been higher.
This release is less about flashy new features and more about adding some polish to the new stuff they’ve previously shipped – improving the DX, stabilizing APIs, and getting everything ready for prime time. Let’s take a closer look:
Signals get extra stable – Angular’s Signals-powered reactivity model promoted effect
, linkedSignal
, and toSignal
to stable, which should improve performance and DX even more. They also introduced a new experimental httpResource
API for making reactive HTTP requests the Angular way.
Modern SSR gains – Incremental hydration and route-level rendering modes are now stable, bringing noticeable improvement gains and finally making Angular feel like a real option for modern SSR.
DX polish – Angular-specific insights now show up directly in Chrome DevTools, host bindings get proper type checking, and template literals
finally just work without needing any weird hacks.
Bottom Line: Angular’s glow up isn’t just some cheap hair plugs, botox, and lip filler from that online “lab” in Turkey – it’s a multi-year architectural rework that’s already producing some real performance wins in the wild.
![]() ![]() ![]() ![]() |
You mean we're supposed to be testing the code that Copilot writes too?
Front-end codebases are getting more complex than ever, and chances are, your team’s monitoring situation hasn’t kept up.
That’s why Datadog created their Front-end Developer Kit – a free collection of resources that’ll help you better understand user activity and catch front-end issues early.
It gives you instant access to:
A Best Practices Guide that details key strategies for monitoring and testing used by top front-end teams
A Solution Brief with a step-by-step walkthrough for proactively catching and resolving issues
An on-demand livestream on how to optimize front-end applications
Get it for free – and protect your frontend before it’s too late.
Their PDF Redaction SDK lets you enable users to securely delete sensitive data from PDFs, images, documents, and more.
function Animal (name, energy) {
let animal = {}
animal.name = name
animal.energy = energy
return animal
}
Animal.prototype.eat = function (amount) {
console.log(`${this.name} is eating.`)
this.energy += amount
}
const leo = Animal('Leo', 7)
leo.eat(5)
Vite v7.0 beta is out, and it drops support for Node 18 so that Vite is now distributed as ESM only. Because sometimes you have to be the change you wish to see in the world.
Jim Nielsen wrote an article called Is it JavaScript? But you’ll have to take a bite to be 100% sure.
Gleam v1.11 makes Gleam compiled to JavaScript 30% faster – which I’m guessing hits really hard if you know what Gleam is.
A team of Sentry engineers are hosting this Full-stack Performance and Debugging Workshop on June 10th – it’s a 90-minute, hands-on walkthrough that’ll show how to use tracing to actually understand what your code is doing across backend, frontend, and mobile. [sponsored]
Dan Abramov wrote about Progressive JSON, and why it’s significantly more fair and equitable than flat JSON or regressive JSON.
Vitest 3.2 comes with a new Annotations API, Scoped Fixtures, and better TypeScript support.
NexFaster is a minimal template that integrates React Router within Next.js to produce world peace intuitive, Type-safe client-side routing. It’s 2025 – anything goes.
Matt Palmer wrote about how it’s very easy to hack vibe-coded apps.
Stefan Gloor wrote about how he accidentally-on-purpose got access to the root shell of a credit card terminal. And now we’re all flagged in a Palantir database somewhere.
Our call to leo.eat
is going to fail. The reason for this is because the object returned from Animal
isn’t delegating to Animal.prototype
so leo.eat
will be undefined.
To fix this, we can use Object.create
or a combination of the this
keyword with new
.
function Animal (name, energy) {
let animal = Object.create(Animal.prototype)
animal.name = name
animal.energy = energy
return animal
}
// or
function Animal (name, energy) {
this.name = name
this.energy = energy
}
const leo = new Animal('Leo', 7)
You’ll never stop me from spreading the great this
keyword.