Let me save you some pain I learned the hard way. I've migrated 5 sites from Gatsby to Astro in the past year, dealt with Next.js 13's App Router migration disaster, and watched Gatsby basically die a slow death while Netlify fired everyone.
Astro actually does what it says - unlike most frameworks that lie
Astro: Actually Does What It Says
Astro 5.0 is the rare framework that doesn't lie to you. It ships literally zero JavaScript unless you explicitly add it. My blog was bloated as hell with Next.js, Astro made it way faster on mobile.
The Island Architecture isn't marketing bullshit - it actually works. You can drop a React component on a static page with client:load
and it hydrates only that component. No massive React bundle for a fucking contact form.
Performance that doesn't suck: 2023 Web Framework Performance Report shows Astro sites consistently score 90%+ on Core Web Vitals. Compare that to Next.js performance issues where developers are questioning if the framework "lost its way" on performance.
Real gotcha from Astro 4.0 to 5.0: Content Collections API changed and broke my build. Fixed it in about an hour vs the usual "entire weekend lost to framework migration" experience. Also, rendering performance can be 10x slower than other frameworks in specific cases with heavy component trees. The Astro community on Reddit is pretty good at documenting these edge cases.
August 2025 reality: Astro 5.13 shipped with experimental static import.meta.env
that breaks half our environment variables. The Chrome DevTools workspace support is cool when it works, but debugging why it randomly disconnects makes you question if the feature was tested. Our Docker builds still randomly fail with the same mysterious OOM errors above 3000 pages.
Shit that still randomly breaks: TypeScript config gets confused about imports from .astro
files, the dev server crashes for reasons I can't figure out, hot reload dies when you nest components. VSCode shows red squiggles on perfectly valid code and nobody knows why. Stack Overflow threads are full of people with the same mystery errors.
M1 Macs have weird Docker build issues with Astro - exec format error
randomly appears and disappears. Windows developers get fucked by path length limits in nested node_modules
. Linux users deal with permission issues that make no sense. Also fuck Webpack while we're at it - why does every build tool need 47 config files?
Production nightmare: Staging environment worked fine, production kept throwing "Cannot resolve module" errors for components that definitely existed. Took like 3-4 days to figure out case sensitivity was killing us - Linux gives zero fucks about capitalization, macOS doesn't care. ComponentName.astro
vs componentname.astro
destroyed my weekend and made me question life choices.
But honestly, Astro's broken shit is still less broken than Next.js working correctly. Check the Astro docs on troubleshooting - they actually admit things break instead of pretending everything is perfect.
Next.js: Enterprise Complexity for Everything
Next.js 15 finally fixed hydration error messages after years of developers crying into Stack Overflow. But you're still shipping 85KB of React for a static blog because that's just how Next.js rolls. Next.js performance sucks under load - my production server chokes at around 50-60 req/sec on decent hardware.
The App Router migration from Pages Router broke half my routes and took a full sprint to fix. Server Components are cool when they work, but debugging why your component won't render is like debugging WebPack configs - you'll question your life choices. The Next.js Reddit community is basically therapy sessions for broken deployments.
Performance reality check: JavaScript framework benchmarks consistently show Next.js lagging behind lighter frameworks. Web Vitals analysis reveals Next.js struggles with performance scores even with optimal configuration.
Version horror stories: Next.js 13 introduced breaking changes with no migration guide. Next.js 14 had caching issues that randomly served stale pages. Next.js 15 still has hydration mismatches if you breathe wrong. Check GitHub issues - it's a disaster zone of broken shit.
August 2025 reality: Next.js 15.5 finally stabilized Node.js middleware runtime, but Turbopack builds are still beta despite powering Vercel's marketing sites. The typed routes feature crashes TypeScript language server on large projects - our monorepo with 200+ routes maxes out at 8GB RAM just for IntelliSense. Server Actions work until they don't, then you spend days figuring out why FormData
breaks in production Safari.
Production horror story: Got a $800 Vercel bill because some asshole posted my side project on Hacker News and Next.js doesn't handle traffic spikes gracefully. Self-hosting Next.js? Prepare for suffering. Image optimization just... doesn't work without Vercel's infrastructure. Caching behaves differently, and I spent 3 days configuring nginx reverse proxy just to get basic shit working. Docker deployment guides make it look easy, but reality is memory leaks and random crashes.
Team nightmare: Our junior dev tried to use localStorage
in a Server Component and nothing worked. No error message, just blank pages. Senior dev spent a day figuring out the Server/Client boundary is magic and poorly documented. CTO keeps asking why we need so many dependencies just to render a marketing page.
Platform hell continues: Docker Desktop on Windows breaks every update. M2 Macs randomly can't build Next.js images - something about ARM vs x86 that nobody understands. Jenkins CI runs out of memory during Next.js builds because webpack eats RAM like a starving hippo. Our DevOps guy added 16GB just for webpack and it still occasionally dies.
Enterprise tax: Next.js optimization means you need CDNs, edge functions, and caching layers just to make it not suck. Also fuck Jenkins while we're at it - CI should not take 25 minutes to build a static site. VSCode's TypeScript server gets confused by Server Components and keeps restarting. The whole ecosystem is held together with duct tape and Vercel's marketing budget.
Gatsby: The Framework Graveyard
Gatsby's slow death is well documented across developer communities
Let's be honest - Gatsby is basically dead. Netlify acquired them in 2023, laid off most of the team, and killed Gatsby Cloud. The 2024 roadmap never materialized and community discussions are full of people asking "is this thing still alive?"
The GraphQL data layer was innovative in 2019 but now feels like solving tomorrow's problems with yesterday's architecture. Build times are still shit even after 5 major versions, and the plugin ecosystem is rotting as maintainers abandon ship.
Migration reality: Don't start new projects with Gatsby in 2025. If you're stuck with a Gatsby site, plan your migration to Astro or Next.js before Netlify pulls the plug completely.
Historical note: Gatsby was great for its time, but static site generators evolved past the need for a heavyweight GraphQL layer just to render markdown files. Check Gatsby performance guides - they wouldn't need so many if builds didn't suck. The migration comparison on Reddit shows developers fleeing to Astro for better DX and faster builds.
The reality check: After 5 years building with all three frameworks, the choice is clear. Astro gets out of your way and lets you build fast sites. Next.js fights you every step but works for complex apps. Gatsby is a dead end - migrate before it's too late.