← Back to Journal
EngineeringJun 14, 2026 · 6 min read

Astro islands in production: what we actually ship

Partial hydration sounds great on paper. Here is where it earns its keep in production, and where it quietly gets in the way.

Kai RönneFrontend Lead, SUE

Astro's whole pitch is that most of your site does not need JavaScript, and the parts that do can hydrate on their own. In practice, we have shipped enough Astro sites to know when this is a win and when it is just an idea.

When islands earn their keep

For anything that is 90% content (marketing sites, storefronts, journals) islands are a superpower. The header can be static, the hero can be static, the product grid can be static, and the one modal that opens a size chart can hydrate with client:visible. The rest of the page ships zero JS.

            // Only hydrate what actually needs it
<SizeChart client:visible />
<CartDrawer client:idle />
          

When they get in the way

The moment your page needs to share state across three islands, you are working against the model. Global state, cross-island events, and shared stores all become friction. That's a signal: it's usually a full SPA route, not an island.

If two islands need to talk, ask why they are not the same island.

Our rule of thumb

One island per interactive surface. If two surfaces need to coordinate, either merge them into one island or move the whole route to a framework page. Do not build islands that pretend to be a SPA, or you get the worst of both.

Kai Rönne

Frontend lead at SUE. Ships composable, typed, tested, and cares more about DX than the average tech lead should.

Work with us

Keep reading

All articles →