← Tutti gli articoli

Astro 5 e il Content Layer: i contenuti diventano dati

25 September 20242 min di lettura

Astro 5 unifica content collection, CMS esterni e API. Per chi costruisce siti contenuti-heavy, è il salto che mancava.

Astro 5 (in beta a settembre 2024) ha portato il Content Layer: una API unificata per leggere contenuti da qualunque sorgente (file Markdown, Sanity, Notion, REST API) come se fossero collection tipizzate.

Il problema che risolve

Prima di Astro 5 le content collection lavoravano solo su file locali. Per integrare Sanity o un'API esterna serviva codice ad hoc, niente type-safety, niente getCollection(). Risultato: progetti misti dove metà contenuti erano in .md e l'altra metà in fetch sparsi.

Come funziona

Definisci un loader per ogni sorgente, e Astro lo materializza in una collection consistente.

// src/content/config.ts
const articles = defineCollection({
  loader: sanityLoader({ query: '*[_type == "article"]' }),
  schema: z.object({ title: z.string(), slug: z.string() }),
});

Da qui in poi getCollection('articles') restituisce dati tipizzati a build time.

I loader esistenti

  • File Markdown / MDX (built-in)
  • Sanity (community)
  • Contentful (community)
  • Notion (community)
  • REST/GraphQL custom (10 righe di codice)

Quando ci interessa

Per progetti dove i contenuti vivono in più posti (CMS principale + repo + database interno), il Content Layer toglie 200 righe di "glue code" e dà una sola superficie di lettura. Per siti puramente Markdown il guadagno è marginale; per progetti reali editoriali è grande.

Cosa aspettare

L'API è ancora beta nella 5.0. La 5.1 dovrebbe stabilizzarla con qualche miglioramento sull'incremental rebuild. Per progetti che partono ora, vale la pena adottarla — il design è solido.