Building the Web in Islands, Not Mountains

Den Odell 25 June 2025 · ⏱️ 4 min read
Den Odell 25 June 2025 · ⏱️ 4 min read
Not every site needs to be a full-blown app. In fact, most don’t. What they need is to be fast, focused, and respectful of the user’s device.
Put another way: if your ‘About Us’ page needs 300kB of JavaScript to render a sentence about your mission, it may be time to reconsider.
We’ve leaned heavily into building everything as if it were an application: routing, state, hydration, and all. That approach works brilliantly for complex, interactive experiences. But for many sites, it leads to overengineered pages, unnecessary JavaScript, and slower interactions.
There’s a better pattern, and it’s gaining momentum again. It’s called islands architecture, and it offers a way to ship less, do more, and give users speed where it counts.
Single-page apps (SPAs) brought a wave of innovation to the frontend. They gave us smooth routing, shared state, and dynamic interactivity. For many use cases, they remain the right choice.
But when every page becomes part of one large application, even simple, mostly static ones, we start to pay a price. That price often includes larger bundles, delayed interactivity, and more work for the browser than is truly needed.
If your marketing page or blog post loads the same hydration logic and route configuration as your account dashboard, something is off. It creates work that doesn’t need to happen, especially on mobile.
Islands architecture takes a more selective approach. It renders the majority of the page server-side, using static HTML whenever possible, and hydrates only the components that need to be interactive.
Picture a page as a landmass. Most of it — layout, content, structure — is pre-rendered and delivered instantly. Then come the islands: self-contained interactive parts like a search box, a shopping cart, or a comment form. These hydrate independently and only when needed.
Instead of treating every page like a fully hydrated application, you focus interactivity where it adds the most value.
Before SPAs and JavaScript frameworks, developers often rendered pages server-side and used scripts sparingly to enhance behavior. You’d write HTML, sprinkle in jQuery plugins, and call it a day.
In hindsight, this was a kind of early islands model. The challenge was maintainability. Everything felt stitched together.
Today’s tools bring back the same mindset, but with component-based discipline and modern developer ergonomics.
Frameworks like Astro are built with islands in mind. You can specify how and when a component should hydrate:
<InteractiveRating client:idle />
This tells Astro to render the component on the server and hydrate it only once the page is idle. Other directives include client:load
, client:visible
, and client:media
, letting you match hydration to user context.
Other frameworks take similar or adjacent approaches:
app/
directory, is giving developers more fine-grained control over what runs where.These are not opposing models. They are part of a broader shift toward delivering more HTML and less JavaScript when appropriate.
And most importantly, it feels better. The page is usable immediately. You don’t wait for hydration to finish or for a loading spinner to disappear.
Islands architecture shines when:
It’s a great fit for blogs, marketing pages, documentation sites, and e-commerce product pages. Anywhere that’s mostly static but benefits from pockets of interactivity.
For complex apps with deep state and interactive workflows, a hybrid model may make more sense.
But even there, treating your UI as a set of islands can still lead to smarter hydration, clearer boundaries, and better performance.
The trend is clear. Edge rendering, streaming, and component-level monitoring are all rising. Islands work well in this environment.
They support:
If your stack supports server rendering and hydration control, you are already most of the way there.
Modern frameworks brought us power, flexibility, and developer joy. But they also nudged us toward treating every site like a full application.
Islands architecture brings balance. It keeps the parts of modern development that work, such as components, server-side rendering, and interactivity, and refocuses them around speed, simplicity, and user needs.
You don’t need to build a mountain for every page.
Islands get users where they need to go.
Without the altitude sickness.
💬 Comments? Join the discussion on Dev.to →
🔗 Share: Twitter/X · LinkedIn ·
The early web had no layout system. No CSS. So we improvised, slicing, stretching, and nesting our way to structure.
You’re going to hate me for saying this, but I actually like being on-call. Honestly! It’s taught me more about frontend quality than any bug tracker ever did.
No spam. Just occasional deep dives on frontend engineering and developer experience.