Be honest about why your last project became a single-page app. Was it because the problem genuinely demanded client-side state and routing? Or was it - at least partly - because plain page navigation felt janky: the white flash, the jump to the top, the half-second of nothing that screams “website” instead of “app”?
For years, “make navigation feel smooth” was a real reason to adopt a framework and its router, and to ship all the JavaScript that came with them. In 2026, it is not anymore. The browser now does the two things that framework was doing for you - and it does them on a plain multi-page site, with a few lines of code and nothing to install.
The two APIs that delete the router
App-feel comes down to two illusions, and the platform now provides both natively:
- Smooth transitions between pages — the View Transitions API. Instead of the hard cut from one document to the next, the browser animates between them: cross-fades by default, or whatever you choose.
- Instant navigation — the Speculation Rules API. It lets you tell the browser, declaratively, which links to prerender before the user clicks. When they do click, the next page is already built - so it appears immediately.
Used together they close the perceived gap with native apps almost entirely: the destination is pre-rendered, and the swap to it is animated. Industry writing this year has gone as far as calling cross-document view transitions the single highest-leverage feature on the web platform in 2026 for content sites. I think that is fair.
How little code it takes
Here is the part that still surprises people. Smooth cross-document transitions - the whole reason many teams reached for an SPA - are now one CSS rule:
/* Animate navigations between pages of the same origin */
@view-transition {
navigation: auto;
}
That is it. Same-origin navigations now cross-fade instead of hard-cutting. Want a specific element - a hero image, a title - to visibly move from the list page to the detail page? Give both the same name and the browser tweens it across the navigation:
.card-image {
view-transition-name: hero;
}
Now the instant part. Speculation Rules is a small JSON block that tells the browser what to prerender:
<script type="speculationrules">
{
"prerender": [
{ "where": { "href_matches": "/posts/*" }, "eagerness": "moderate" }
]
}
</script>
With that, when a reader hovers or is likely to click a /posts/* link, the browser quietly builds that page in the background. The click then swaps to an already-rendered document - and the view transition animates the swap. The result feels instant because it is instant: there is nothing left to fetch or render at click time.
Two APIs, a handful of lines, no framework, no router, no hydration.
It degrades to “perfectly fine”
The usual objection: “but browser support isn’t universal yet.” As of mid-2026, cross-document view transitions still are not in every engine - Firefox, notably, trails.
Here is why that does not matter. Both APIs are purely additive. A browser that does not support view transitions performs a normal navigation - the old hard cut you have today. A browser that ignores speculation rules just fetches the page on click, like always. Nobody gets a broken experience; some users get a nicer one. This is progressive enhancement in its purest form: you are not betting the site on a new feature, you are layering polish on top of navigation that already works everywhere.
That asymmetry - big upside where supported, zero downside where not - is exactly the profile that makes a feature safe to adopt today rather than “watch for 2027”.
Dogfooding: this blog
I am not describing something theoretical. The site you are reading is a static, multi-page blog - no client-side framework running the page - and it uses view transitions for navigation. Click between posts and you get the soft animated swap; the pages you are likely to read next are hinted for prerender. It feels like an app. It ships almost no JavaScript to do so.
That is the whole thesis of my minimalism writing made concrete: I did not add a framework to get the app-feel. I deleted the reason I would have needed one.
When you still want an SPA
To be fair, this does not make single-page apps obsolete. If your product is a genuinely stateful application shell - a design tool, a live dashboard, an editor where the page is the app and full navigations would throw away in-memory state - an SPA is still the right architecture, and the frameworks earn their weight.
The point is narrower and important: “navigation should feel smooth” is no longer on the list of reasons to reach for one. That reason has been quietly moved into the browser. For blogs, docs, marketing sites, and the enormous category of content-with-some-interactivity, you can now start from a plain multi-page site and add app-feel as a finishing layer - instead of starting from a framework and paying its cost forever.
The stagehands between scenes
Think about how a great theatre production handles scene changes. In an amateur show, the lights come up, the audience watches people awkwardly drag furniture around, and the spell breaks - you are suddenly aware you are sitting in a room watching a play. In a masterful production, the transition is part of the art: the lights shift, and in the darkness a crew you never quite see has already set the next scene, so when the light returns you are simply there, still inside the story.
That is the difference between a hard page cut and this pair of APIs. Speculation Rules is the invisible crew setting the next scene before you can look; View Transitions is the graceful shift of the lights. The audience never sees the furniture being moved - they just stay inside the story.
For years we hired an entire framework to be that stage crew. It turns out the theatre came with one built in. You just have to turn on the lights.