L'équipe Astro a lancé le 24 octobre 2025 Astro 4.0, une version majeure qui révolutionne la gestion de contenu avec Content Collections v2, améliore les performances de build de 40% et introduit le mode hybride server/static. Une évolution majeure pour les sites de contenu.
Content Collections v2 : Type-Safe CMS
Architecture Repensée
Les Content Collections passent de fichiers locaux à une architecture hybride :
Avant (v1) :
// content/config.ts
import { defineCollection, z } from 'astro:content';
const blog = defineCollection({
schema: z.object({
title: z.string(),
date: z.date(),
tags: z.array(z.string())
})
});
export const collections = { blog };
Maintenant (v2) :
// content/config.ts
import { defineCollection, z } from 'astro:content';
const blog = defineCollection({
// Type : 'local', 'remote' ou 'hybrid'
type: 'hybrid',
// Sources multiples
sources: [
{ type: 'local', path: 'blog' },
{ type: 'contentful', space: 'xxx' },
{ type: 'notion', database: 'yyy' }
],
// Schema unifié
schema: z.object({
title: z.string(),
date: z.date(),
author: z.object({
name: z.string(),
avatar: z.string().url()
}),
tags: z.array(z.string()),
// Nouveau : relations
relatedPosts: z.array(z.reference('blog')).optional()
})
});
export const collections = { blog };
Avantages :
- Agrégation de sources multiples (Contentful, Notion, Markdown, API)
- Schéma Zod unifié = type-safety totale
- Relations entre contenus
- Cache intelligent
Relations et Références
Linking entre contenus :
// blog/post-1.md
---
title: "Astro 4.0 Deep Dive"
relatedPosts:
- post-2
- post-3
---
// Dans le composant
---
import { getEntry } from 'astro:content';
const post = await getEntry('blog', 'post-1');
const related = await Promise.all(
post.data.relatedPosts.map(ref => getEntry(ref))
);
---
<article>
<h1>{post.data.title}</h1>
<aside>
<h2>Articles connexes</h2>
{related.map(r => (
<a href={`/blog/${r.slug}`}>{r.data.title}</a>
))}
</aside>
</article>
Type-safety complète :
- Auto-complétion des slugs
- Erreur TypeScript si référence invalide
- Détection de boucles infinies
CMS Headless Intégrés
Support natif de 12 CMS :
// Contentful
const blog = defineCollection({
type: 'contentful',
space: process.env.CONTENTFUL_SPACE_ID,
accessToken: process.env.CONTENTFUL_ACCESS_TOKEN,
contentType: 'blogPost',
// Mapping automatique vers schema Astro
schema: z.object({
title: z.string(),
body: z.string(),
// Rich text → HTML
content: z.contentfulRichText()
})
});
// Notion
const docs = defineCollection({
type: 'notion',
database: process.env.NOTION_DATABASE_ID,
auth: process.env.NOTION_TOKEN,
schema: z.object({
title: z.string(),
category: z.enum(['tutorial', 'guide', 'reference'])
})
});
// Strapi, Sanity, Directus, etc. aussi supportés !
Avantages :
- Pas de code adapter custom
- Mise à jour automatique (webhook support)
- Preview mode intégré
Performance : 40% Plus Rapide
Build Optimization
Benchmarks sur site type (500 pages) :
| Métrique | Astro 3.6 | Astro 4.0 | Amélioration |
|---|---|---|---|
| Cold build | 45s | 27s | -40% |
| Incremental | 12s | 5s | -58% |
| Dev server start | 3.2s | 1.1s | -66% |
| Hot reload | 800ms | 200ms | -75% |
Optimisations clés :
- Compilation parallèle de Markdown (tous les cores CPU)
- Cache de rendu amélioré
- Tree-shaking des composants inutilisés
- Lazy loading des images optimisé
View Transitions Accélérées
Navigation instantanée :
---
// Layout.astro
import { ViewTransitions } from 'astro:transitions';
---
<html>
<head>
<ViewTransitions />
</head>
<body>
<slot />
</body>
</html>
Nouveau : Preload automatique
<a href="/about" data-astro-prefetch="viewport">
About
</a>
<!-- Preload dès que le lien entre dans le viewport -->
<a href="/blog" data-astro-prefetch="hover">
Blog
</a>
<!-- Preload au hover -->
Résultat :
- Navigation perçue comme instantanée
- Pas de white flash entre pages
- SPA feel avec 0 JavaScript supplémentaire
Hybrid Rendering : Best of Both Worlds
Server + Static dans le Même Site
Configuration flexible :
// astro.config.mjs
export default defineConfig({
output: 'hybrid', // Nouveau mode !
adapter: vercel({
// Pages statiques par défaut
// Opt-in pour SSR par route
})
});
Dans les pages :
---
// pages/blog/[slug].astro
export const prerender = true; // Static (défaut)
---
---
// pages/api/comments.ts
export const prerender = false; // Server-side
---
---
// pages/dashboard.astro
export const prerender = false; // Dynamic pour users connectés
---
Use cases :
- Blog statique + API dynamique + Dashboard user
- E-commerce : produits statiques + panier serveur
- Documentation statique + search API
Server Islands (Preview)
Composants server-rendered dans pages statiques :
---
// pages/product.astro (statique)
import ProductInfo from '../components/ProductInfo.astro';
import StockChecker from '../components/StockChecker.astro';
---
<Layout>
<!-- Contenu statique -->
<ProductInfo product={product} />
<!-- Server Island : toujours fresh -->
<StockChecker server:defer productId={product.id} />
</Layout>
Avantages :
- Page majoritairement statique (rapide)
- Sections dynamiques actualisées (stock, prix, etc.)
- Meilleur des deux mondes
Images : Optimization Native
Sharp Intégré
Plus besoin de config manuelle :
---
import { Image } from 'astro:assets';
import hero from '../assets/hero.jpg';
---
<!-- Automatic optimization -->
<Image
src={hero}
alt="Hero"
widths={[400, 800, 1200]}
formats={['avif', 'webp', 'jpg']}
/>
<!-- Génère :
- hero-400w.avif
- hero-800w.avif
- hero-1200w.avif
- hero-400w.webp
- ...
- srcset automatique
-->
Nouveau : Responsive par défaut
<Image
src={hero}
alt="Hero"
loading="lazy"
decoding="async"
/>
<!--
Astro choisit automatiquement les tailles
en fonction du layout de la page
-->
Performance :
- AVIF par défaut (60% plus léger que WebP)
- Blur placeholder généré automatiquement
- Lazy loading natif
Intégrations Framework
React, Vue, Svelte, Solid
Islands améliorées :
---
import Counter from '../components/Counter.tsx'; // React
import Chart from '../components/Chart.vue'; // Vue
import Form from '../components/Form.svelte'; // Svelte
---
<Layout>
<!-- Hydrate uniquement si visible -->
<Counter client:visible />
<!-- Hydrate uniquement si user interagit -->
<Chart client:idle />
<!-- Hydrate immédiatement -->
<Form client:load />
<!-- NOUVEAU : Hydrate selon media query -->
<MobileMenu client:media="(max-width: 768px)" />
</Layout>
JavaScript envoyé :
- Page avec 3 islands React : 12kb total
- Même page en Next.js : 85kb
- Économie : 85%
Dev Experience
HMR Ultra-Rapide
Hot Module Replacement instantané :
- Modification composant : moins de 100ms
- Modification Markdown : moins de 200ms
- Modification CSS : moins de 50ms
Meilleur que Vite seul !
Error Overlay Améliorée
Messages d'erreur contextuels :
Error: Invalid frontmatter in blog/post.md
5 | title: "Mon Article"
6 | date: 2025-13-45 ← Invalid date
7 | tags: ["astro"]
Expected: Valid ISO date (YYYY-MM-DD)
Received: 2025-13-45
Fix: Change to valid date like "2025-10-24"
Suggestions automatiques + one-click fix !
Déploiement
Support Plateforme Étendu
Adapters officiels :
- Vercel, Netlify, Cloudflare Pages
- Nouveaux : AWS Amplify, Azure Static Web Apps, Deno Deploy
- Node.js standalone
Edge runtime :
// Déploiement sur Cloudflare Workers
export default defineConfig({
output: 'hybrid',
adapter: cloudflare({
mode: 'directory',
runtime: 'edge' // Nouveau !
})
});
Cold start : moins de 50ms sur edge
Migration 3.x → 4.0
Breaking Changes Minimes
Checklist :
- Mise à jour :
npm install astro@4.0
- Content Collections :
- Schema reste compatible
- Ajout optionnel du type 'hybrid'
- Adapters :
- Mise à jour recommandée pour profiter du mode hybrid
Codemod automatique :
npx @astrojs/upgrade
95% des sites migrent sans changement de code !
Comparaison avec Alternatives
Astro vs Next.js vs Gatsby
| Feature | Astro 4 | Next.js 14 | Gatsby 5 |
|---|---|---|---|
| JavaScript par défaut | 0kb | 85kb | 120kb |
| Build time (1000 pages) | 2min | 8min | 12min |
| Content Collections | ✅ Native | ❌ Custom | ⚠️ GraphQL |
| Hybrid rendering | ✅ | ⚠️ Limité | ❌ |
| Multi-framework | ✅ | ❌ | ⚠️ |
Astro gagne sur sites de contenu !
Articles connexes
Pour approfondir le sujet, consultez également ces articles :
- Chrome DevTools 120 : AI Debug Assistant et Performance Insights
- React 19 : Server Components GA et Nouvelle Ère de Performance
- Vue 4 Vapor Mode : Le Framework JavaScript Sans Virtual DOM en Octobre 2025
Conclusion
Astro 4.0 confirme sa position de leader pour les sites de contenu avec des performances exceptionnelles, une Developer Experience incomparable et une flexibilité maximale. Les Content Collections v2 changent la donne en unifiant les sources de contenu.
Pour qui ?
- Blogs, documentation, marketing sites
- E-commerce statique/hybride
- Portfolios, landing pages
Avantages clés :
- Performance extrême (Lighthouse 100/100 par défaut)
- DX exceptionnelle
- Écosystème riche
- Communauté active
Astro 4.0 = le meilleur outil pour créer des sites rapides en 2025.



