Svelte 5 is there

Since yesterday, Svelte 5 has reached stable status and can now be used productively or migrated. To be honest, I’m a little horrified by this, as a few projects have come together over the last few years. And as I now know, some of the most hated/loved constructs have been changed, which on the one hand made Svelte so special, but also got in the way from time to time.

And while the $: construct for reactively re-running statements is a neat trick, it turned out to be a footgun. It conflates two concepts (derived state and side-effects) that really should be kept separate, and because dependencies are determined when the statement is compiled (rather than when it runs), it resists refactoring and becomes a magnet for complexity.

So, happily pick up the Migration Guide and upgrade.

However, there is one thing I can’t stand about Svelte 5: the new fonts on the Svelte website! I’m such an Overpass fan!

Of course, the most salient difference is the typography. Previously, we used Overpass for everything except code — logo, headers, UI elements and body copy. It’s surprisingly versatile given its origins as an adaptation of Highway Gothic (the typeface used on road signs in the US since 1948, aside from a brief flirtation with Clearview), but it’s really not meant to be used for everything.