IAnswerable

Islands Architecture, Explained

22 Oct 2026

Islands architecture means shipping static HTML for the whole page and hydrating only the specific components that need JavaScript. The rest of the page — nav, footer, article text — stays plain HTML with zero JS attached. You get an interactive page without shipping a framework runtime for content that never changes.

The problem it solves

A typical SPA ships one JS bundle that hydrates the entire page, whether or not most of it is interactive. A blog post with a single comment widget and a single “like” button still downloads and hydrates React (or your framework of choice) for the whole page — including the paragraph text that will never change.

Islands flip that: the page is static by default, and you opt individual components into interactivity.

What it looks like in practice

Frameworks like Astro, and partial-hydration support in others, let you mark a component as an island explicitly:

---
import LikeButton from '../components/LikeButton.jsx';
---
<article>
  <h1>Post title</h1>
  <p>Static content, no JS shipped for this part.</p>

  <LikeButton client:visible />
</article>

client:visible means: don’t hydrate until this component scrolls into view. Other common directives:

Everything without a client:* directive renders to static HTML and ships zero JS.

What you get

What you give up

When to reach for it

Content-heavy sites with a few interactive widgets — blogs, marketing sites, docs with a search box or theme toggle, e-commerce product pages with one “add to cart” button. If your page is mostly static prose with a couple of small interactive spots, islands architecture ships noticeably less JavaScript than a full SPA for the same result. If your page is an application from top to bottom, this isn’t the model you’re looking for — build it as a normal SPA.