Laravel 13.35.0 salió el 6 de octubre de 2026. Introduce un límite de memoria para los workers de colas expresado en porcentaje de la máquina en lugar de un valor fijo, además de un método nativo para garantizar que una tarea programada se ejecute en un único servidor dentro de una flota. La versión también corrige varios comportamientos erráticos en las relaciones Eloquent y en la gestión de archivos.
Un límite de memoria relativo en lugar de un valor fijo
Hasta ahora, queue:work --memory solo aceptaba un valor absoluto en megabytes. En una flota de workers desplegada en máquinas de distintos tamaños, esa cifra fija obligaba a ajustarla manualmente para cada destino, o a infradimensionarla por prudencia. Laravel 13.35.0 acepta ahora un porcentaje, calculado sobre la memoria total disponible del contenedor o la máquina anfitriona. El worker se reinicia limpiamente en cuanto supera ese umbral relativo, evitando tanto reinicios demasiado frecuentes en instancias pequeñas como fugas de memoria silenciosas en las más grandes.
Scheduler: ejecución única garantizada en varios servidores
El nuevo método Schedule::alwaysOnOneServer() se aplica a todas las tareas programadas de una aplicación, sin tener que repetir onOneServer() en cada entrada individualmente. Para los equipos que despliegan la misma base de código en varios servidores de aplicación detrás de un balanceador de carga, es el ajuste que evita que una tarea cron se dispare dos veces en el mismo minuto. El comando schedule:list --json expone ahora un campo onOneServer por tarea, lo que permite auditar la configuración sin leer el código fuente.
Correcciones destacadas: Eloquent, descargas y paginación
Además de las dos novedades principales, la versión corrige fallos reportados por la comunidad: un comportamiento incorrecto en las relaciones HasOneThrough, HasManyThrough y morphTo en ciertos escenarios de carga anidada, y una regresión en las actualizaciones de rutas JSON en colecciones cifradas. También se corrige la descarga de archivos con nombres no-ASCII, así como un fallo de unión de consultas combinado con paginación por cursor.
| Cambio | Antes de 13.35.0 | Desde 13.35.0 |
|---|---|---|
| Memoria de los workers | Valor fijo en MB, a ajustar por máquina | Porcentaje de la memoria disponible |
| Ejecución única del scheduler | onOneServer() repetido por tarea | Schedule::alwaysOnOneServer() global |
| Auditoría del scheduler | Requería leer el código fuente | schedule:list --json expone onOneServer |
| Almacenamiento de archivos | copyToDisk()/moveToDisk() sin soporte de enum | Soporte de enums nativos de PHP |
En cuanto al almacenamiento, copyToDisk() y moveToDisk() aceptan ahora enums nativos de PHP, y una nueva opción lazy_root_creation evita crear un directorio raíz hasta que se escribe realmente un archivo en él. Estos ajustes se suman al ecosistema de herramientas de línea de comandos que los equipos backend combinan a diario, ya sea Artisan o alguno de los gestores de paquetes JavaScript comparados en Mail Studio.
Punto de atención. El umbral en porcentaje se calcula sobre la memoria total reportada por el sistema, no sobre la asignada al contenedor si este corre sin cgroups correctamente configurados. En una infraestructura donde los límites de contenedor no se exponen al kernel, el porcentaje puede quedar anclado a la memoria del host físico: conviene comprobar lo que devuelve free -m desde dentro del contenedor antes de migrar la configuración.
// Ajuste anterior: valor fijo, duplicado por entorno
// php artisan queue:work --memory=512
// Nuevo ajuste: porcentaje de la memoria disponible
php artisan queue:work --memory=75%
// Scheduler: ejecución única en toda la flota
use Illuminate\Support\Facades\Schedule;
Schedule::alwaysOnOneServer();
Schedule::command('reports:generate')->dailyAt('03:00');
Schedule::command('cache:prune-stale-tags')->hourly();
Con esta versión, Laravel convierte un límite de memoria fijo en un presupuesto relativo a la máquina, un detalle técnico menor que sin embargo evita reinicios indeseados de workers en producción.
El paso a estas nuevas opciones no rompe ninguna firma existente: las aplicaciones que siguen pasando un valor absoluto a --memory conservan exactamente el mismo comportamiento de antes. La migración es, por tanto, puramente opcional, en línea con la política de compatibilidad ya observada en cómo Node.js gestiona sus valores por defecto en el ecosistema backend competidor.
Lo que hay que recordar
Laravel 13.35.0 corrige dos molestias operativas concretas para los equipos que gestionan colas y tareas programadas en producción multiservidor: la memoria de los workers por fin se expresa en proporción a la máquina, y la ejecución única de las tareas programadas pasa a ser un ajuste global en lugar de una disciplina tarea por tarea. Las 56 pull requests fusionadas en esta versión, obra de 28 colaboradores, son en su mayoría correcciones puntuales más que nuevas funcionalidades.
En los proyectos que mantengo en producción, el ajuste fijo de --memory siempre fue un falso amigo: había que recalcularlo cada vez que cambiaba la instancia, o fijarlo bajo por prudencia y perder eficiencia. El porcentaje es una solución sencilla a un problema que la comunidad Laravel lleva años señalando, y es el tipo de cambio discreto que dice más sobre la madurez de un framework que las funciones vistosas. — Simon Janvier
Para saber más: notas de la versión completa de Laravel 13.35.0 en GitHub.
