Ir al contenido principal
Volver a artículos

Actualizar a Statamic 6: qué se rompe de verdad

Krodox Team July 17th, 2026 statamic laravel

Statamic 6 requiere PHP 8.3 y Laravel 12 o 13. Hace poco actualizamos este sitio desde Statamic 5, y esto es lo que el proceso implicó de verdad, más allá de lo que promete el changelog.

En resumen: si tu sitio es sobre todo contenido y plantillas, la actualización es pequeña. Si has construido pantallas propias del panel de control o componentes Vue, no lo es.

El panel de control es otra aplicación

El panel pasó de Vue 2 a Vue 3, y las páginas personalizadas se renderizan ahora con Inertia en lugar de Blade. Las páginas en Blade siguen funcionando, pero provocan recargas completas en vez de transiciones tipo SPA, y las utilidades pasan de ->view() a ->inertia().

Este es el cambio que decide lo dura que será tu actualización. Un sitio sin código propio en el panel —el nuestro no tiene— no se ve afectado. Un sitio con fieldtypes o pantallas de administración a medida se enfrenta a una migración de Vue 2 a Vue 3, que es trabajo real y tiene su propia guía.

Dos eliminaciones relacionadas: la clase Breadcrumb desaparece, y las migas de pan se derivan ahora de la navegación del panel; y Moment.js se elimina por completo en favor del manejo nativo de fechas.

Los globales se reestructuraron

En una instalación de un solo sitio, las variables globales viven ahora en un subdirectorio default, y el archivo original conserva únicamente la configuración:

content/globals/seo.yaml          ->  solo configuración
content/globals/default/seo.yaml  ->  los valores reales

Las instalaciones multisitio describen sus localizaciones mediante un array sites. El nuestro es bilingüe, y Statamic reescribió los archivos por su cuenta durante la actualización: el archivo raíz conservó title y un mapa sites, y los valores por idioma se quedaron donde estaban.

Los eventos cambiaron con ello: escucha GlobalVariablesSaving, GlobalVariablesCreated y GlobalVariablesSaved en lugar de los antiguos GlobalSet*. GlobalSet::addLocalization() y removeLocalization() se sustituyen por in() junto con save() o delete().

La configuración de búsqueda detendrá tu compilación

Conviene saberlo de antemano porque falla de forma ruidosa, a mitad de actualización:

'searchables' => 'all' is no longer supported.

all incluía a los usuarios junto al contenido. Ahora lanza una excepción y hay que ser explícito: 'content' para entradas, términos y assets, o bien una lista:

'searchables' => ['collection:blog', 'taxonomy:tags'],

El nuestro falló en statamic:search:update durante composer update, que es un buen sitio donde fallar: evidente, inmediato y resuelto en una línea.

Las fechas ahora son UTC en tiempo de ejecución

Statamic 6 convierte las fechas a UTC en tiempo de ejecución. Si la zona horaria de tu config/app.php no es UTC, las fechas aparecerán desplazadas: almacenadas en la zona de la aplicación y mostradas como UTC. La solución es añadir 'localize_dates_in_modifiers' => true a config/statamic/system.php.

El panel también muestra ahora las fechas en la zona horaria del sistema operativo del usuario, no en la de la aplicación. Es más correcto, y aun así sorprenderá a cualquier editor que esperase otra cosa.

Cambios menores que conviene revisar

  • Bard: inline: break se divide en inline: true más inline_hard_breaks: true. El tachado genera <strike> en lugar de <s>: revisa tus selectores CSS.
  • Consultas de entradas: ->where('status', ...) lanza excepción. Usa ->whereStatus().
  • Codificación de URL: urlencode y rawurlencode ahora codifican las barras. Usa las variantes _except_slashes para conservar el comportamiento anterior.
  • Etiquetas comodín: {{ session:foo }} trata foo como texto literal. Usa {{ session :handle="foo" }} para valores dinámicos.
  • Los superusuarios ya no se saltan todas las autorizaciones globalmente, solo las de Statamic. Restaura el comportamiento anterior con un hook Gate::before() si dependías de él.
  • Glide 3 trae intervention/image 3.x, así que los manipuladores personalizados necesitan actualizarse.
  • Driver de caché: sustituye 'driver' => 'statamic' por 'driver' => 'file'.

Los usuarios en base de datos reciben migraciones de doble factor y passkeys: ejecuta php artisan migrate y añade un cast 'two_factor_confirmed_at' => 'datetime' al modelo User. Las instalaciones con driver de archivos como la nuestra se saltan esto por completo.

Lo que nos costó

Dos ediciones de configuración y una reestructuración de contenido que Statamic realizó por sí mismo. Lo caro fue la cadena de versiones, no Statamic: Statamic 5 está limitado a Laravel 12, así que pasar a Laravel 13 obligó a Statamic 6, que obligó a versiones mayores de nuestros dos complementos.

Si estás planificando esto, haz primero la auditoría de dependencias. La actualización del CMS rara vez es lo que te sorprende.