Ir al contenido principal
Volver a artículos

Qué cambia Laravel 13, y qué cuesta llegar hasta ahí

Krodox Team July 14th, 2026 laravel php

Laravel 13 salió el 17 de marzo de 2026. Requiere PHP 8.3 y admite hasta 8.5, recibe correcciones de errores hasta el tercer trimestre de 2027 y parches de seguridad hasta marzo de 2028.

El titular es poco habitual para una versión mayor: Laravel mantuvo los cambios incompatibles deliberadamente pequeños. Buena parte del trabajo del año se publicó como versiones menores que no rompían nada, así que la mayor es sobre todo aditiva. En nuestra experiencia la afirmación se sostiene, y eso significa que la pregunta interesante no es "¿podemos actualizar?" sino "¿qué merece la pena usar ahora?".

La actualización del framework no es donde está el trabajo

Hace poco migramos este sitio a Laravel 13. La parte del framework fue casi trivial. Lo que realmente costó tiempo fue el ecosistema alrededor: nuestro CMS estaba limitado a Laravel 12, lo que obligó a una actualización mayor del CMS, que a su vez obligó a dos versiones mayores de complementos.

Ese es el patrón que conviene planificar. Antes de agendar una actualización a Laravel 13, revisa la restricción de laravel/framework de cada paquete del que dependes. Un solo paquete fijado a ^12.0 decide tu calendario, no el framework.

La IA como asunto de primera clase

La mayor incorporación es el SDK de IA de Laravel: una API agnóstica del proveedor para generación de texto, agentes con llamada a herramientas, embeddings, audio e imágenes.

use App\Ai\Agents\SalesCoach;

$response = SalesCoach::make()->prompt('Analyze this sales transcript...');

return (string) $response;

Los embeddings se exponen a través del helper de cadenas, un detalle pequeño con consecuencias reales: deja la generación de vectores a una llamada de distancia de cualquier sitio donde ya manejes texto:

use Illuminate\Support\Str;

$embeddings = Str::of('Napa Valley has great wine.')->toEmbeddings();

El valor no está en que Laravel pueda llamar a un modelo — cualquier cliente HTTP podría. Está en que cambiar de proveedor deja de ser una reescritura.

Búsqueda semántica en el constructor de consultas

Junto al SDK, la similitud vectorial ahora se expresa directamente en las consultas, apoyada en PostgreSQL y pgvector:

$documents = DB::table('documents')
    ->whereVectorSimilarTo('embedding', 'Best wineries in Napa Valley')
    ->limit(10)
    ->get();

Para quien haya montado a mano una tubería de recuperación, reducirla a una cláusula del query builder elimina una capa genuinamente incómoda.

Atributos en lugar de código repetitivo

Laravel 13 lleva los atributos de PHP mucho más lejos. El middleware de controladores y la autorización pueden vivir sobre la clase y el método que gobiernan:

use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;

#[Middleware('auth')]
class CommentController
{
    #[Middleware('subscribed')]
    #[Authorize('create', [Comment::class, 'post'])]
    public function store(Post $post)
    {
        // ...
    }
}

El comportamiento de las colas recibió el mismo tratamiento con #[Tries], #[Backoff], #[Timeout] y #[FailOnTimeout].

Una advertencia. Los atributos colocan la configuración junto al código al que afectan, lo que se lee mucho mejor. También dispersan las reglas de enrutado y autorización por todo el proyecto en lugar de mantenerlas en un archivo que puedes leer de arriba abajo. Elige una convención por proyecto y respétala; el peor resultado es middleware declarado en tres sitios distintos.

Cosas menores que importan

El enrutado de colas lleva la conexión y la cola por defecto de cada job a un único lugar, en vez de repetirlas en cada despacho:

Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');

Cache::touch() extiende el TTL de un elemento sin leer y reescribir su valor: la solución evidente al baile de leer-modificar-escribir que exigía la expiración deslizante.

Los recursos JSON:API ya son de primera clase, cubriendo serialización, inclusión de relaciones, campos dispersos y cabeceras conformes. Si alguna vez implementaste esa especificación a mano, esto borra bastante código.

La protección contra falsificación de peticiones se ha formalizado como PreventRequestForgery, añadiendo verificación por origen junto a la protección CSRF basada en token.

¿Conviene actualizar?

Si estás en Laravel 12 y tus dependencias lo permiten, sí: es una de las versiones mayores más baratas que ha publicado Laravel, y mantenerse al día es precisamente lo que hace que las actualizaciones sigan siendo baratas.

Si una dependencia te bloquea, la respuesta honesta es que el bloqueo es tu proyecto, no Laravel. Presupuesta primero la versión mayor de ese paquete y trata el salto del framework como el paso fácil del final. Ese es el orden en el que acabamos trabajando, y el que planificaríamos la próxima vez.