July 2023, Revisited: Svelte 4 Clears the Decks
Eric Greene June 11, 2026Our Three-Year Retrospective continues with July 2023, the month the Svelte community spent digesting a major release that, by its own admission, contained almost nothing new. Svelte 4 shipped on June 22, 2023, and the changelog read less like a feature announcement than a spring cleaning receipt. Understanding why that was the right call — and why the community largely cheered it — tells you a lot about how mature frameworks should manage their own evolution.
A major version with no headline feature
Svelte 4's pitch was maintenance: modernize the toolchain, shrink the package, drop accumulated legacy, and prepare the ground for a much bigger rewrite already underway. The npm package itself went on a dramatic diet — roughly 75% smaller, from over 10 MB down to under 3 MB — mostly by cleaning up shipped artifacts and dropping redundant builds. Generated hydration code got smaller too, which mattered for SvelteKit apps where every component's compiled output rides to the browser.
The breaking changes were the kind you fix in an afternoon. Minimum Node moved to 16, minimum TypeScript to 5.0, and browser support dropped anything that could not handle modern JavaScript — goodbye, lingering IE11 shims. Transitions became local by default, fixing a long-standing footgun where navigating away from a page triggered every transition on it. SvelteComponentTyped was deprecated in favor of plain SvelteComponent. For most codebases, npx svelte-migrate svelte-4 and a coffee break covered it.
We migrated several training codebases that July, and the experience was almost anticlimactic. That, again, was the point.
The real story was Svelte 5
What made July 2023 interesting was not what shipped but what it cleared the way for. Rich Harris and the Svelte team were open that version 4 was groundwork: the compiler internals were being rewritten, and the next major version would rethink Svelte's reactivity model itself. Nobody outside the core team knew the details yet — the "runes" announcement was still two months away — but the signal was clear. Svelte 3's reactivity, built on let declarations and the famously magical $: label, had hit its ceiling. It was wonderful in small components and increasingly awkward in large apps, where implicit reactivity made refactoring risky and extracting logic into plain .js files nearly impossible.
Svelte 4 deliberately did not try to fix any of that. It froze the surface, modernized the foundation, and bought the team room to rebuild underneath. For teams in July 2023, the practical guidance we gave was: upgrade now, cheaply, so that when the real change arrives you are starting from clean ground.
What it taught about framework stewardship
The contrast with other ecosystems that summer was instructive. While some frameworks bundled breaking changes with ambitious new paradigms — forcing users to absorb both at once — Svelte split the work: a boring major version for housekeeping, then a separate, well-telegraphed major version for the paradigm shift. Users got two small cliffs instead of one large one. The pattern is worth stealing for anyone maintaining a platform other teams build on: separate "we cleaned up" releases from "we changed how you think" releases, and your migration guides stay readable.
Looking back from June 2026
The bet paid off. Svelte 5 arrived in October 2024 with runes — explicit, signal-based reactivity via $state and $derived — and the migration story was as smooth as a ground-up reactivity rewrite could plausibly be, in no small part because Svelte 4 had already pulled the legacy weeds. Runes resolved the old large-app complaints, reactive logic became portable outside components, and Svelte settled comfortably into its position as the framework people describe as "what I'd choose if I were starting fresh." The $: label now reads like a historical curiosity.
If you are writing Svelte today, you are writing runes-era Svelte, and we teach it that way from the first hour in Svelte Essentials. For teams maintaining larger applications — including ones that still carry some Svelte 4-style legacy components alongside modern code — Svelte In Depth covers the reactivity model, stores versus runes, and the patterns that emerged after the dust of this transition settled.