mrkeyoor.com_
Thu 01 Oct 00:00 UTC
Webevaluationupdated 27 Aug 2026

astro review

Astro is a web framework for content-heavy sites such as publications, documentation, portfolios, and marketing pages. It renders most components to HTML and lets developers add isolated interactive components with React, Preact, Svelte, Vue, Solid, or Alpine when a page needs browser code.

+135stars / 7d
Verdict

Our Astro install took 87 seconds and 1,180 MB, and the build passed in 68 seconds, but the repository test task exited 1 after 338 seconds. Choose Astro for a content-led site where most of the page can remain HTML and interactivity belongs in a few explicit islands. Choose an application-first framework when shared client state dominates the product, and test Astro's chosen adapter before treating local output as deployment proof.

We ran it

Lab card: what happened when we ran astroScreenshot of astro (astro.build)
Install✓ · 87s1890 packages · 1180 MB
Build✓ · 68s
Tests✗ · 338s1 passed · 0 failed of 1 (vitest)
Repo6664 files~258,143 lines of source · 50.7 MB · 21 CI workflows

Answers from our run

Does astro build from source?

Dependencies installed in 87 seconds (1890 packages), and the build succeeded in 68 seconds. We cloned commit 8797754 into a clean Debian container with 3 CPUs and no project-specific setup.

Do astro's tests pass?

Yes: 1 of 1 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Who should not use astro?

Applications where nearly every screen is one stateful client interface: Astro's component-island model requires deliberate hydration and may add boundaries without much benefit.

What are the alternatives to astro?

Next.js, Nuxt, Eleventy. Our Astro install took 87 seconds and 1,180 MB, and the build passed in 68 seconds, but the repository test task exited 1 after 338 seconds.

Setup4/5Project creation is short; source install used 1,890 packages
Docs5/5Clear guides cover islands, content, adapters, APIs, and upgrades
Community5/562,074 stars and same-day August 2026 release activity
Maturity4/5MIT framework at v7.2.8; adapter edges still need testing

Discussed on

  1. hnZero-build privacy policies with Astro14 points
  2. hnHow to generate OpenGraph images with Astro and Satori8 points
  3. hnShow HN: Lexington; Outstanding web Themes Crafted with Astro and Tailwind CSS6 points
  4. hnGhosts in the CDN: Publishing with Astro and Cloudflare5 points
  5. hnAstro – Build fast websites, faster4 points

Who it’s for

Teams building content sites that should ship little browser JavaScript by default.
Developers who want Markdown, MDX, content collections, image tools, and file-based routes in one framework.
Organizations mixing UI-framework components during a migration or across isolated widgets.
Sites that need static output today with an adapter path to Node, Cloudflare, Netlify, or Vercel rendering.

Who it’s NOT for

Applications where nearly every screen is one stateful client interface: Astro's component-island model requires deliberate hydration and may add boundaries without much benefit.
Teams expecting every adapter combination to behave alike: issue 16931 reports 404 image URLs with static output and the Cloudflare adapter.
Projects that need several preview servers in one test run without a workaround: issue 17720 reports Astro 7.2 rejecting the second server.
Contributors expecting the top-level test command to pass in plain Node 22: our run exited 1 after the astro#test task failed, despite Vitest showing 1 passed test.

Setup reality

Our Node 22 sandbox installed 1,890 packages in 87 seconds and used 1,180 MB. The build passed in 68 seconds. Tests exited 1 after 338 seconds: Vitest showed 1 passed and 0 failed, but Turbo reported astro#test as the only task and marked it failed. The log tail gives no deeper cause.

A new site starts through npm create astro@latest; server-rendered routes need an adapter for the deployment target. Framework integrations, CMS credentials, image services, databases, and environment variables depend on the chosen site rather than Astro itself.

The source checkout is a 50.7 MB pnpm monorepo with 6,664 files and about 258,143 source lines. It contains 21 CI workflow files but no root Dockerfile or tests directory. Adapter and integration versions should be upgraded with the core framework, then checked on the actual host.

Static HTML is the default, browser code is an explicit choice

Astro components render to HTML without a client runtime unless the developer adds a client directive. An interactive React, Svelte, Vue, Preact, Solid, or Alpine component becomes an island that hydrates separately from the rest of the page. Directives can load it immediately, during idle time, or when it enters the viewport. This makes the amount and timing of browser JavaScript visible in the template instead of treating hydration as a page-wide default.

That model fits a publication, documentation site, storefront, or marketing site where text and navigation do most of the work. A calculator, search box, account menu, or image carousel can be interactive without turning every paragraph into application state. A dashboard whose panels constantly share client state may gain little from those boundaries. Astro supports single-page application patterns, but its clearest advantage appears when much of the page can remain ordinary HTML.

The monorepo build passed in 68 seconds

We cloned commit 8797754 into a fresh Node 22 Debian container with 3 CPUs and 8 GB of RAM. The checkout had 6,664 files, about 258,143 source lines, and occupied 50.7 MB. Installing 1,890 pnpm packages took 87 seconds and left 1,180 MB on disk. The build completed successfully in another 68 seconds. This is a sizable contributor setup even though a generated Astro site can be small.

The repository is a pnpm workspace containing Astro itself, project creation, adapters, framework integrations, RSS, sitemap, MDX, language tools, and editor support. Our scan found 21 CI workflow files but no root Dockerfile or tests directory. Site users consume only the packages they choose. Contributors and organizations producing private builds inherit the monorepo's larger dependency and validation surface.

What happened when we ran it

Our test command ran for 338 seconds and exited 1. Vitest reported 1 passed and 0 failed out of 1 visible test, but Turbo marked astro#test as failed and showed 0 successful tasks out of 1. The final lines contain repeated lifecycle errors without the earlier error detail. It is therefore accurate to say the repository test task failed, even though the visible Vitest count itself was green.

The tail does not identify a missing service, package, or assertion, so we cannot assign a cause. This matters because a 5-minute test command that ends nonzero will block a conventional CI job regardless of its inner count. Teams building Astro from source should retain the full log, locate the first error, and reproduce it in their chosen Node image. Our successful 68-second build confirms compilation only; it does not turn the failed test task into a pass.

Content collections give files and remote data a schema

Astro's content collections organize related content and validate entries against a schema. Loaders can gather local files or remote material, while pages query the resulting collection. Markdown and MDX cover authored content, and image, RSS, and sitemap packages handle common publishing needs. Type checking catches missing or malformed frontmatter earlier than a template discovering it during rendering. This is more structured than reading arbitrary files in every route.

The tradeoff is framework-specific content plumbing. A team migrating an existing CMS must map its data into loaders and schemas, decide whether pages build ahead of time or render on request, and preserve preview behavior for editors. Large collections also make build strategy important. Static generation pays work during deployment; on-demand routes pay it at request time and require a compatible adapter. Neither choice removes the need for cache and failure planning.

Adapters decide whether server features work on the host

Static sites can be deployed as files. On-demand routes, sessions, actions, middleware, and server islands need a runtime adapter. The repository lists official packages for Node, Cloudflare, Netlify, and Vercel. These are separate packages because each platform has different request objects, asset behavior, runtime limits, and deployment output. A passing local preview is useful, but the adapter's production environment is the real target.

Open reports show specific edges. Issue 16931 says the Cloudflare adapter with static output generated runtime /_image URLs that returned 404 because no handler existed. Issue 17838 reports a Cloudflare server manifest retaining an entry for a removed prerender asset. Issue 17823 says Astro's logger produced no output through the Cloudflare adapter while console.log still worked. These reports are not evidence against every Cloudflare site; they justify an end-to-end deployment test with images, logs, and mixed rendered routes.

Version 7.2.8 was released on August 26, 2026, updating the minimum supported Sharp version to 0.35.4 and replacing an internal process-finding dependency. GitHub recorded 62,074 stars, 108 combined issues and pull requests, and a push on August 27. The small combined queue and current release activity support a serious evaluation, while same-day adapter reports show why pinning and staging are still necessary.

Astro is strongest when content stays in charge

The framework's decision is easy to state: send HTML by default and make browser execution opt-in per component. That is a useful constraint for editorial and documentation work because an imported component does not automatically turn the whole page into a client application. React or Vue teams can reuse selected components, and an adapter can add server rendering where a route genuinely needs it.

Our 87-second install and 68-second build make the codebase workable, but the failed 338-second test task prevents a clean source verdict for commit 8797754. For a new content-led site, Astro belongs near the top of the shortlist. Build one representative page with real content, an interactive island, images, and the intended adapter, then verify its production output before selecting it over Next.js, Nuxt, or Eleventy.

Alternatives

ProjectWhat it isPick it when
Next.js gh↗A React framework for server rendering, static generation, and full web applications.pick this instead when React application behavior and one integrated server framework matter more than minimal client JavaScript.
Nuxt gh↗A Vue framework for rendered applications, content sites, and server routes.pick this instead when the team wants Vue throughout the application rather than framework-neutral islands.
EleventyA static site generator built around templates and data with little prescribed client runtime.pick this instead when a static publishing pipeline is enough and component islands or server rendering are unnecessary.

What people are saying

  1. [github-trending] withastro/astro

Sources

  1. Astro repository and README
  2. Astro islands architecture documentation
  3. Astro content collections documentation
  4. Astro 7.2.8 release notes
  5. Cloudflare static image issue
  6. Multiple preview servers issue

More web reviews

chi · youtube-ambilight · hyalite--liquid-glass · human-atlas · liquid-glass-screens · echarts · the whole board →