Astro
Static when you want. Server when you need. Zero JS by default.
962,000 websites run on Astro.
I bet most developers I talk to haven’t heard of it. No hype cycle, no Twitter wars, no “is it the Next.js killer?” discourse. Just a free, open-source framework that ships zero JavaScript by default and gets out of your way.
I built two production sites with it. Here’s what actually happened.
What Astro does
Astro is a web framework for content-driven websites. The core idea is simple: your pages are static HTML unless you explicitly say otherwise. No JavaScript ships to the browser by default.
That’s not “minimal JavaScript.” That’s zero. Your blog post, your landing page, your portfolio — they load as HTML files. The browser has nothing to parse, nothing to execute. It just renders.
When you need interactivity — a form, a dashboard, auth — you flip one switch and Astro becomes a server-rendered framework. Same syntax, same project structure, same mental model. You just change the output mode.
| Mode | What it does | Use case |
|---|---|---|
| Static (default) | Generates HTML files at build time | Blogs, portfolios, marketing sites |
| Server | Renders pages on each request | Apps with auth, databases, dynamic content |
| Hybrid | Mix of both per page | Sites that are mostly static with a few dynamic pages |
What I built with it
Two very different sites. Same framework.
stratega.co (here you are) — my main site. Static. 14 blog posts. Sitemap. SEO. The entire config file is 16 lines. Total dependencies: 3 (Astro, Tailwind, sitemap plugin).
I wrote about the full build process here. The short version: I went from zero to production in 48 hours. Astro was never the bottleneck. The framework disappeared — I was just writing HTML with components.
Stratega Academy — a full-stack learning platform. Server-side rendered via Netlify. Supabase for auth, database, and row-level security. Interactive exercises, a dashboard, course progress tracking, a GTM Kit with PDF export (live soon). The config file is 13 lines.
Same framework. One ships HTML files. The other runs a full application with a database behind it.
That’s the thing I didn’t expect: I didn’t have to learn a new framework when the requirements changed. I just changed one line in the config.
The stack
Both sites run on the same foundation:
Astro 5 + Tailwind 4 → Deploy on Netlify
For the main site, that’s literally it. Three dependencies in package.json. No React. No Vue. No runtime framework at all.
For the Academy, I added Supabase (auth + database), Resend (transactional emails), and the Netlify adapter for SSR. Total dependencies: 7. For a full-stack app with auth, exercises, and email — that’s nothing.
What surprised me
The Lighthouse scores. stratega.co scores 100/100 Performance, 100/100 Best Practices, and 100/100 SEO — desktop, incognito, no optimization work on my end. No manual lazy-loading, no code-splitting, no CDN configuration. The framework handles it because there’s no JavaScript to slow things down.
The .astro file format. It’s just HTML with a frontmatter block for server logic. If you know HTML, you know Astro. There’s no JSX to learn, no hooks, no state management. The learning curve is essentially zero for anyone who’s built a website before.
---
// This runs on the server
const posts = await getCollection('blog');
---
<!-- This is just HTML -->
<ul>
{posts.map(post => <li>{post.data.title}</li>)}
</ul>
Content collections. The blog on stratega.co runs on Astro’s built-in content layer. I write markdown files, Astro validates the frontmatter against a schema, and generates typed data I can query. No CMS, no database, no API calls. The blog is a folder of .md files.
What it won’t do
Be clear about where it stops.
| Use case | Works? | Notes |
|---|---|---|
| Blogs, portfolios, marketing sites | Yes | This is its sweet spot |
| Full-stack apps with auth | Yes | SSR mode + external services |
| Content-heavy sites | Yes | Built for this |
| Real-time features (chat, live data) | No | No WebSocket support out of the box |
| SPAs with complex client state | No | Use React/Next.js or SvelteKit |
| Teams that only know React | Partial | Learning curve is low but it’s a different mental model |
If your app is mostly client-side interactions — drag-and-drop interfaces, real-time collaboration, complex state machines — Astro is the wrong choice. It’s built for content and pages, not for applications that live entirely in the browser.
If your team is deep in the React ecosystem and doesn’t want to learn a new file format, the switching cost might not be worth it. Though honestly, the .astro syntax is close enough to JSX that most React developers pick it up in an afternoon.
Pricing
Free. Open source. MIT license.
| What | Cost |
|---|---|
| Framework | $0 |
| CLI | $0 |
| All features | $0 |
| Hosting | Depends on your provider (Netlify free tier works) |
Astro offers a paid product called Astro Studio for hosted databases, but it’s entirely optional. The framework itself has no paid tier, no premium features, no “upgrade to unlock SSR” gate.
Alternatives
| Framework | Best for | How it compares |
|---|---|---|
| Next.js | React-first full-stack apps | More mature ecosystem, better for complex React apps. But heavier — you’re shipping a React runtime whether you need it or not. |
| SvelteKit | Performance-focused apps with interactivity | Excellent DX, small bundle sizes. Better than Astro if your site is interaction-heavy. Worse for pure content sites. |
| Hugo | Static sites from markdown | Blazing fast builds, battle-tested. But it’s Go templates — the DX is rough compared to Astro components. |
| 11ty | Simple static sites | Lightweight and flexible. Good if you want minimal tooling. Astro gives you more structure and the component model. |
My take: if you’re building a content site or a marketing site and you want modern DX without the JavaScript bloat, Astro is the best option available right now. If you’re building a SPA or a complex web app, stick with Next.js or SvelteKit.
The verdict
Astro is the first framework where I spend more time building than configuring.
Two production sites. One static, one full-stack. Both fast, both simple, both running on the same 13-16 lines of config. The framework disappears when you’re working — you’re just writing HTML, adding components where you need them, and deploying.
The zero-JavaScript-by-default philosophy isn’t a gimmick. It’s the reason my sites load instantly, score near-perfect Lighthouse scores, and don’t break in unexpected ways. There’s nothing to break — it’s just HTML.
962,000 websites. No hype. Just a framework that works.
Score: 9.0/10
The point off: the ecosystem is smaller than Next.js or React, so you’ll find fewer tutorials, fewer Stack Overflow answers, and fewer third-party integrations. If you hit an edge case, you’re reading GitHub issues, not blog posts. For everything else — speed, simplicity, flexibility — it’s the best framework I’ve used.
Tool Friday is a weekly series where I review one tool I actually use in my workflow. Just tools that made my work better.