What Astro Is: The Content-First, Zero-JS-by-Default Framework
React, Vue, Svelte, Angular, and Next.js all share one assumption underneath their real differences: the browser gets a JavaScript runtime, and the page is treated as an application. Astro starts from a genuinely different assumption — most of a real page is content, not application state, and the framework's own default output is plain, static HTML with no JavaScript shipped at all, unless you deliberately ask for some.
Zero JavaScript by Default
Every Astro component renders to plain HTML at build time — including components written in React, Vue, or Svelte and used inside an Astro page. Unlike Next.js, where a React component ships its own JavaScript to the browser and hydrates automatically, an Astro page with ten components on it can ship zero bytes of framework JavaScript by default. Nothing hydrates unless it's told to.
The Islands Architecture
Astro's own name for this model is the islands architecture: picture a page as a mostly static "ocean" of plain HTML, with small, isolated "islands" of interactivity dropped in only where genuinely needed — a like button, a search box, a carousel. Each island hydrates independently, on its own schedule, rather than the whole page hydrating as one unit the way a client-rendered React or Vue app does.
Why "Content-First"?
Astro was built with blogs, documentation sites, marketing pages, and portfolios in mind — sites where the overwhelming majority of the page is content that never changes after it's rendered, and only a handful of small pieces are genuinely interactive. That's a real, different sweet spot from a framework built assuming the whole page is one interactive application from the start.
Four Frameworks, One New Assumption
| Concept | React / Vue / Svelte | Astro |
|---|---|---|
| Ships JS by default? | Yes — a framework runtime, always | No — plain HTML unless a component opts in |
| Hydration model | Whole page/app, at once | Per-component "islands," independently |
| Framework lock-in per page | One framework for the whole app | React, Vue, and Svelte components can coexist on one page |
| Sweet spot | Interactive applications | Content-heavy sites with occasional interactivity |
Creating a Project
The scaffolding wizard offers a few starter templates — an empty project is the clearest one to learn from. npm run dev starts the dev server with live reload, the same as every other framework in this series.
src/pages/— every file here becomes a real page, by convention (Chapter 3)src/components/— reusable.astrocomponentssrc/layouts/— shared page shells (Chapter 4)astro.config.mjs— the project's own configuration file
Coding Challenges
Scaffold a new Astro project, then edit src/pages/index.astro so it renders a heading interpolating a name from a frontmatter variable.
📄 View solutionBuild a Card.astro component that accepts a title prop, use it inside index.astro, and confirm via your browser's View Source that no JavaScript was shipped for it.
📄 View solutionAdd a second page, src/pages/about.astro, with no route configuration written anywhere, and confirm it's served automatically at /about.
📄 View solutionChapter 1 Quick Reference
- Zero JS by default — every component renders to static HTML unless deliberately hydrated
- Islands architecture — small, independent interactive components in an otherwise static page
- Framework-agnostic — React, Vue, and Svelte components can all live on one Astro page
- Content-first — built for blogs, docs, and marketing sites, not assumed-interactive apps
- Not static-only — SSR and hybrid rendering exist too, covered in Chapter 10
- npm create astro@latest / npm run dev — scaffold and run
- Next chapter: the
.astrofile and component syntax