Sätteri en Astro 6.4: el procesador Rust que acelera tus builds de Markdown (y lo que pierdes al cambiarte)
Sätteri es el procesador de Markdown/MDX escrito en Rust que Astro 6.4 estrenó en mayo de 2026: en los propios sitios de documentación de Astro y Cloudflare recortó más de un minuto de build. Pero no ejecuta plugins de remark ni rehype, y para sitios basados en Markdoc como mintec.co la decisión cambia por completo. Aquí está el framework de decisión que usamos.
Sätteri en Astro 6.4: el procesador Rust que acelera tus builds de Markdown (y lo que pierdes al cambiarte)
Sí, Sätteri —el procesador de Markdown/MDX escrito en Rust que llegó con Astro 6.4— reduce los tiempos de build de verdad: el sitio de documentación de Astro y el de Cloudflare recortaron más de un minuto cada uno al cambiarse. Pero la letra pequeña que casi ningún resumen menciona es que Sätteri no ejecuta plugins de remark ni de rehype. Y la noticia más importante de la versión no es la velocidad: es la nueva API markdown.processor, que termina con el monopolio de una década que unified tenía sobre cómo Astro renderiza Markdown.
Lo escribimos desde un sitio de producción que vive exactamente en medio de este trade-off. mintec.co corre sobre Astro 6.4 con Markdoc para sus colecciones de contenido: más de 750 archivos bilingües, páginas de servicio y un pipeline que publica artículos nuevos cada mañana. El tiempo de build no es una abstracción para nosotros; es un costo de CI diario. Por eso, cuando Astro 6.4 salió el 28 de mayo de 2026 con Sätteri, hicimos la evaluación completa en lugar de subirnos al titular del benchmark.
Qué trajo Astro 6.4 (y qué quedó en el titular)
La versión trajo tres cosas, y solo una se llevó los titulares:
- La nueva API
markdown.processor— ahora puedes cambiar el pipeline de Markdown completo con una opción de configuración. El default sigue siendounified(), así que los proyectos existentes no se rompen, pero tus plugins de remark/rehype se configuran ahora directamente en el procesador, no a nivel superior. - Sätteri (
@astrojs/markdown-satteri) — un pipeline de Markdown y MDX escrito en Rust, mucho más rápido que el default de unified, que implementa de forma nativa muchas funciones de Markdown (como las directivas) que antes requerían plugins. - Helpers
cf()para Cloudflare — para el advanced routing experimental de Astro 6.3: bindings de sesión KV, el binding ASSETS ylocals.cfContextcon una sola llamada.
Las deprecaciones son la parte que los equipos se pierden: markdown.remarkPlugins, markdown.rehypePlugins, markdown.remarkRehype, markdown.gfm y markdown.smartypants siguen funcionando pero están deprecadas, y el equipo de Astro confirmó que se eliminarán en Astro 8.0. Con el ritmo de releases actual, eso da de 12 a 18 meses. Suena cómodo, pero la migración es trivial hoy y solo se complica a medida que tu config acumula personalización.
Los números que importan
Los benchmarks en un solo lugar, porque esta es una historia de números:
| Fuente | Build antes | Build después | Delta |
|---|---|---|---|
| docs.astro.build (prueba del propio equipo) | Sitio grande de docs | Más de un minuto recortado | ~25-35% |
| Documentación de Cloudflare (misma prueba) | Sitio grande de docs | Más de un minuto recortado | ~25-35% |
| Ejemplo de CI comunitario (reporte de needhelp.icu) | ~120 s | ~55 s | ~54% |
| mintec.co (nuestro build de producción completo, esta semana) | ~252 s para 756 archivos de contenido | n/a — evaluado, no migrado | n/a |
Nuestro número es el que podemos defender en una conversación con un cliente: un build completo de producción de mintec.co —756 archivos de contenido en dos idiomas más las páginas de servicio, renderizados con Markdoc— tarda 252 segundos en CI. Está por encima del umbral donde Sätteri empieza a importar, y aun así el cambio no nos ayudaría, porque Markdoc no pasa por el pipeline de unified. Esa tensión es exactamente por qué existe el framework de decisión de abajo.
La heurística que circula en la comunidad (el análisis del trade-off de Sätteri en Byteiota) es práctica: si tu build supera regularmente los 80 segundos y tu pipeline de Markdown es casi vanilla, el cambio es directo. Por debajo de ese umbral, el ahorro absoluto es real pero rara vez justifica tocar el pipeline.
La tabla del trade-off: unified() vs Sätteri
| Criterio | unified() (default) | Sätteri (@astrojs/markdown-satteri) |
|---|---|---|
| Lenguaje | JavaScript | Rust |
| Velocidad | Línea base | Mucho más rápido (60+ s menos en builds grandes de docs) |
| Plugins de remark/rehype | Soporte completo | No soportados — hay que portarlos a plugins MDAST/HAST |
| Compatibilidad GFM | Vía remark-gfm | Nativa, compatible con el spec (diferencias menores en edge cases) |
| Directivas | Requieren plugin | Nativas vía features: { directive: true } |
| MDX | Soportado | Soportado |
| Markdoc | Renderizador aparte, no afectado | Renderizador aparte, no afectado |
| Madurez | Probada, 10+ años | Nueva (mayo 2026, opt-in) |
| Futuro | Config top-level deprecada; sigue siendo el default | El equipo planea hacerlo el default en una versión mayor futura |
Esa última fila es la que hay que vigilar. Las notas de la versión dicen explícitamente que esperan que Sätteri sea el procesador por defecto en una versión mayor futura. Si hoy usas Astro, no estás decidiendo si Sätteri importa — estás decidiendo cuándo será tu default.
Por qué la API importa más que la velocidad
Aquí va la opinión que nos dejó evaluarlo para un sitio real: la API markdown.processor es el cambio más importante de Astro 6.4, y los equipos que solo ven el benchmark de Rust se están perdiendo el punto.
Unified (remark/rehype y compañía) ha sido el estándar de facto para procesar Markdown en JavaScript durante una década: potente —miles de plugins—, pero también un monopolio con costo real, porque procesa cada archivo a través de capas de transformaciones de AST en JavaScript, justo donde los builds con mucho contenido gastan su tiempo. Las implementaciones nativas de Sätteri (GFM, directivas, primitivas de resaltado de sintaxis) atacan ese costo a nivel de arquitectura, no de optimización.
Pero la API es lo que hace posible la competencia. Antes de 6.4 el pipeline no era reemplazable: podías ajustar unified, pero no sustituirlo. Ahora sí. Es el momento en que el ecosistema deja de ser un punto único de falla, y la razón por la que existe el camino de portabilidad: Sätteri acepta plugins MDAST/HAST, así que los autores pueden apuntar al pipeline de Rust sin esperar a que Astro cambie nada.
La consecuencia práctica para los equipos: la migración de configuración (envolver los plugins en unified({...})) es trabajo obligatorio que conviene hacer ya; el cambio a Sätteri es trabajo opcional que conviene diferir hasta que tu lista de plugins tenga equivalentes.
Qué significa esto para un sitio con Markdoc como el nuestro
Aquí la cobertura genérica deja de servir: la configuración más común en nuestro rincón del ecosistema —Markdoc para colecciones de contenido— queda fuera de la historia de Sätteri por completo.
Markdoc tiene su propio renderizador. No pasa por la API markdown.processor, así que Sätteri no puede acelerarlo y el trade-off de plugins no aplica. El tiempo de build de nuestro sitio está dominado por renderizar más de 750 archivos de contenido con Markdoc y por el bundling, no por el pipeline de Markdown de unified. Cambiarnos a Sätteri hoy no cambiaría nada — una conclusión honesta que casi ningún artículo sobre la versión menciona.
Eso no significa que la versión nos sea irrelevante: el calendario de deprecación sí lo es. Cuando Astro 8.0 elimine las opciones de markdown de nivel superior, todos los proyectos —con Markdoc o sin él— tendrán que estar en el modelo de configuración nuevo. Y como ya usamos una estrategia de contenido multifuente, tenemos más pipelines que un sitio típico, lo que convierte la elección de procesador en una decisión recurrente.
Nuestro framework de evaluación, que aplicaríamos igual en un sitio de cliente:
| Tu situación | Nuestra recomendación |
|---|---|
| Markdown/MDX vanilla, build > 80 s, ≤ 3 plugins | Cambia a Sätteri ya; compara el HTML renderizado contra unified antes de commitear |
| Pipeline con muchos plugins (TOC personalizado, anclas de encabezados, resaltado de sintaxis a medida) | Quédate en unified, migra la config a processor: unified({...}) ya, revisa Sätteri cuando existan los ports |
| Markdoc u otro renderizador custom | Sätteri no aplica; aun así corre la migración de config antes de Astro 8.0 |
| Sitio de contenido con build largo en CI (nuestro caso) | Mide tu build real primero; ganar 60 s en un CI diario de 5 minutos vale menos de lo que parece |
La heurística de los 80 segundos se sostiene en nuestra experiencia: por debajo, la ganancia de Sätteri es un nice-to-have; por encima, sobre todo con pipelines vanilla, es una mejora de infraestructura genuina.
Qué estamos haciendo, y qué recomendamos hacer
Pasos concretos, en orden, para que esto no se convierta en un ticket que espera hasta Astro 8.0:
- Corre
npx @astrojs/upgrade— sube a 6.4.x (o más reciente) y deja que la herramienta haga la parte mecánica. - Envuelve tus plugins: mueve
remarkPlugins/rehypePluginsamarkdown: { processor: unified({ ... }) }. Es la única parte que se romperá en Astro 8.0 — hazla antes de que se rompa. - Audita tu lista de plugins: cuenta lo que usas de verdad. La mayoría de los sitios que auditamos usan 2-4 plugins de remark/rehype, y casi todos (GFM, directivas, smartypants) ya tienen equivalentes nativos en Sätteri.
- Mide tu build real: corre tu build de producción con cronómetro antes y después de cualquier cambio. El número de marketing es "más de un minuto en sitios de docs"; el que importa es el tuyo.
- Solo entonces decide sobre Sätteri — y si cambias, compara el output renderizado contra unified para edge cases antes de mergear. El parsing GFM es compatible con el spec, pero los casos límite pueden producir diferencias menores.
Nosotros mantenemos mintec.co en unified por ahora, con la migración de configuración hecha, y reevaluaremos cuando el ecosistema de plugins alcance — la misma conclusión a la que llegamos a los seis meses de nuestra experiencia en producción con Astro + Cloudflare: adopta la dirección de la plataforma temprano, adopta la dirección del ecosistema tarde.
Astro 6.4 hizo algo poco común: lanzó una ganancia de rendimiento real y un cambio arquitectónico en la misma versión. La ganancia es Sätteri. El cambio arquitectónico —un pipeline de Markdown intercambiable— es lo que seguirá importando en 2027.
Si estás evaluando Astro para un sitio con mucho contenido o multilingüe, llevamos más de un año corriendo este stack en producción. Documentamos las lecciones de migrar desde WordPress, los benchmarks reales contra Next.js y lo que cambió con Astro 7.
Preguntas Frecuentes
¿Qué es Sätteri en Astro?
Sätteri es un pipeline de procesamiento de Markdown y MDX escrito en Rust, lanzado como el paquete @astrojs/markdown-satteri en Astro 6.4. Reemplaza el pipeline de JavaScript basado en unified (remark/rehype) y es significativamente más rápido: las pruebas del propio equipo de Astro recortaron más de un minuto del build de su sitio de documentación. Implementa de forma nativa muchas características de Markdown —como las directivas— que antes requerían plugins.
¿Sätteri soporta plugins de remark y rehype?
No. Sätteri no ejecuta plugins de remark ni de rehype. Si tu proyecto depende del ecosistema de plugins de unified, debes quedarte con el procesador unified() por defecto o portar los plugins a las interfaces MDAST/HAST de Sätteri. Las opciones markdown.remarkPlugins y markdown.rehypePlugins de nivel superior están deprecadas y se eliminarán en Astro 8.0.
¿Funciona Sätteri con Markdoc?
No. Sätteri procesa únicamente archivos Markdown (.md) y MDX (.mdx). Markdoc tiene su propio renderizador y no se ve afectado por la nueva API markdown.processor. Para sitios construidos con Markdoc, la ganancia de build de Sätteri no aplica, pero la deprecación de la configuración markdown de nivel superior sí aplica y obliga a migrar la configuración.



