Search

Search pages, services, tech stack, and blog posts

Astro

Astro FrontendContent sites that ship zero JS by default

Astro's islands architecture lets us build blazing-fast content sites — blogs, docs, marketing pages — where JavaScript only loads for the interactive parts. Perfect for SEO-critical properties.

Astro is a web framework designed for content-driven websites — blogs, marketing sites, documentation, and e-commerce storefronts where performance directly impacts SEO and conversion. Its islands architecture ships zero JavaScript by default, only hydrating interactive components on demand. You can use React, Vue, Svelte, or Solid components on the same page, each loading independently. Astro's content collections provide type-safe Markdown/MDX authoring, and its adapter system deploys to any platform. If your site is primarily content with islands of interactivity, Astro delivers the best performance possible.

Quick start

bash
npm create astro@latest my-site
cd my-site
npm run dev

Read the full documentation at docs.astro.build

Zero JS by default

Astro ships HTML and CSS only — JavaScript is opt-in per component via the island pattern.

Content collections

Type-safe content APIs for Markdown, MDX, and JSON — schema validation with Zod included.

Framework agnostic islands

Mix React, Vue, Svelte, and Solid components on the same page — each hydrates independently.

SSR & hybrid rendering

Per-route rendering modes — static, server-rendered, and edge-compatible via adapters.

Built for SEO

Perfect Lighthouse scores out of the box — structured data, canonical URLs, and sitemaps via integrations.

Starlight docs

Astro's official docs theme — full-text search, versioning, i18n, and a clean reading experience.

Why it's hard

Islands architecture mental model

Thinking in islands (static HTML with isolated interactive components) is different from traditional SPA development. Teams used to React Router or Next.js need to adjust their architecture patterns.

Limited client-side state sharing

Because each island hydrates independently, sharing state between interactive components requires nanostores or similar solutions — there's no global app-level state by default.

Dynamic functionality constraints

Highly interactive applications (dashboards, real-time tools) push against Astro's content-first design. For app-like experiences, you may outgrow what Astro optimizes for.

SSR adapter differences

Behavior differences between Vercel, Cloudflare, Node, and Netlify adapters — especially around streaming, edge functions, and environment variables — require careful testing per target.

Best practices

Default to zero-JS static pages

Only add client:load, client:visible, or client:idle directives when a component genuinely needs interactivity. Most content pages need no JavaScript at all.

Use content collections for all structured content

Define Zod schemas for your content — blog posts, docs, product pages. This gives you type-safe queries, frontmatter validation, and automatic TypeScript types.

Choose the right hydration directive

client:visible for below-the-fold components, client:idle for non-critical interactivity, client:load only for above-the-fold interactive elements. This dramatically improves Time to Interactive.

Leverage View Transitions for navigation

Astro's built-in View Transitions API provides smooth page transitions without client-side routing — your MPA feels like an SPA with native browser animation support.

Frequently asked questions




Want to build with Astro?

Talk to our engineering team about your Astro architecture. We'll respond within 24 hours.

1 spot available in May 2026Apr 2026 fully booked

We limit intake each month so every project gets the focus it deserves.