← Volver a blog

Laravel 13: AI SDK estable, Passkeys nativos y Reverb sin Redis

Luis Miguel García Briz
Cargando audio...
Laravel 13: AI SDK estable, Passkeys nativos y Reverb sin Redis

Laravel 13 se publicó el 17 de marzo de 2026, hace exactamente una semana. Taylor Otwell lo anunció en Laracon EU con una frase que resume bien la versión: "no rompemos nada, añadimos lo que lleváis dos años pidiendo". Y en ese equilibrio entre estabilidad y nuevas capacidades está el mayor valor de esta release.

Zero breaking changes significa que la mayoría de proyectos en Laravel 12 actualizan a 13 en menos de una hora, sin tocar código de aplicación. Las novedades llegan como adiciones: un SDK de IA de primera parte ya estable, Passkeys nativos sin librerías adicionales, Reverb que ya no necesita Redis, y PHP Attributes como alternativa opcional a los arrays de configuración.

Requisito mínimo: PHP 8.2

Laravel 13 eleva el requisito mínimo de PHP 8.1 a PHP 8.2. Actualiza PHP primero si todavía estás en 8.1. El proceso es directo: PHP 8.2 no tiene breaking changes significativos para la mayoría de código de aplicación. Laravel 13 también soporta PHP 8.3 y 8.4 completos, incluyendo property hooks y asymmetric visibility de PHP 8.4 en modelos Eloquent.

AI SDK de primera parte: OpenAI, Anthropic y embeddings

Hasta Laravel 12, integrar un modelo de IA requería paquetes de terceros. Laravel 13 incluye el Laravel AI SDK como paquete oficial, con soporte para OpenAI y Anthropic y una interfaz unificada que permite cambiar de proveedor sin modificar el código de aplicación.

bash
php artisan vendor:publish --tag=ai-config
php
// config/ai.php
return [
    'default' => env('AI_PROVIDER', 'anthropic'),
    'providers' => [
        'anthropic' => [
            'api_key' => env('ANTHROPIC_API_KEY'),
            'model'   => env('ANTHROPIC_MODEL', 'claude-sonnet-4-5'),
        ],
        'openai' => [
            'api_key' => env('OPENAI_API_KEY'),
            'model'   => env('OPENAI_MODEL', 'gpt-4o'),
        ],
    ],
];
php
use Illuminate\Support\Facades\AI;

// Generación de texto
$respuesta = AI::text('Genera un excerpt de 150 caracteres para: ' . $post->title);

// Con opciones
$respuesta = AI::text(
    prompt:  'Revisa el SEO de este meta_description: ' . $post->meta_description,
    options: [ 'max_tokens' => 500, 'temperature' => 0.3 ]
);

// Streaming
AI::stream('Genera el contenido del post: ' . $titulo)
   ->each(fn(string $fragmento) => print($fragmento));

// Embeddings para búsqueda semántica
$vector = AI::embed('texto a vectorizar');

Búsqueda vectorial con pgvector integrada

php
$embedding = AI::embed($consulta);

$postsSimilares = DB::table('posts')
    ->orderByVectorDistance('embedding', $embedding)
    ->where('status', 'published')
    ->limit(5)
    ->get();

Passkeys nativos

bash
php artisan passkey:install

Genera migraciones, rutas y controladores para autenticación con Touch ID, Face ID o Windows Hello:

php
use Laravel\Auth\HasPasskeys;

class User extends Authenticatable {
    use HasPasskeys;
}

Laravel Reverb sin Redis

Reverb añade un backend de base de datos como alternativa a Redis para sincronizar conexiones:

env
REVERB_SCALING_BACKEND=database

Esto desbloquea Reverb en entornos como Railway o Render donde Redis tiene coste adicional. Para la mayoría de aplicaciones con broadcasting la diferencia de latencia no es perceptible.

PHP Attributes opcionales en Eloquent

php
// Sintaxis clásica — sigue funcionando igual
class Post extends Model {
    protected $fillable = ['title', 'slug', 'content', 'status'];
    protected $casts    = [
        'published_at' => 'immutable_datetime',
        'status'       => PostStatus::class,
    ];
}

// Nueva sintaxis con PHP Attributes — equivalente y opcional
#[Fillable('title', 'slug', 'content', 'status')]
#[Cast('published_at', 'immutable_datetime')]
#[Cast('status', PostStatus::class)]
class Post extends Model {}

Los Attributes son especialmente útiles en modelos grandes donde la configuración en arrays se hace difícil de leer. Elige uno u otro por modelo, no los mezcles.

Errores comunes al migrar a Laravel 13

No actualizar PHP antes de Laravel. El requisito mínimo es PHP 8.2. Si lo omites, el composer install falla con un mensaje que no siempre es claro. Actualiza PHP primero.

Asumir que el AI SDK funciona como los paquetes de terceros. La interfaz de AI:: es diferente a openai-php/laravel y similares. Si tienes código con esos paquetes, necesitas migrar las llamadas.

Mezclar Attributes y arrays en el mismo modelo. Puedes usar Attributes o arrays, pero no ambos para la misma configuración. Mezclarlos lanza una excepción en tiempo de boot.

Conclusión

Laravel 13 es exactamente lo que el ecosistema necesitaba: una versión de consolidación que no rompe nada pero añade capacidades fundamentales. El AI SDK de primera parte elimina la fragmentación. Los Passkeys hacen la autenticación moderna accesible. Reverb sin Redis democratiza el uso de WebSockets. Y los PHP Attributes dan una alternativa más expresiva a la configuración de modelos.

Si tu proyecto está en Laravel 12 con PHP 8.2 o superior, ejecuta composer update laravel/framework, revisa el CHANGELOG para los dos o tres cambios menores de comportamiento y estás en producción esa misma tarde.