El comando artisan dev ejecuta cuatro procesos de desarrollo en una única terminal: servidor HTTP, trabajador de colas, visor de registros (Pail) y Vite. Hasta Laravel 13.25, todas las salidas se escribían en el mismo flujo, lo que causaba problemas de legibilidad cuando múltiples procesos registraban simultáneamente, por ejemplo, una reconstrucción de Vite sobreponiendo un seguimiento de pila de Pail.

Laravel 13.25 reemplaza el gestor de procesos concurrently con @laravel/multiplex, una nueva interfaz de terminal que aísla cada salida de proceso y no requiere instalación ni configuración. La integración fue contribuida por Joe Tannenbaum (PR #61100).

Tres modos de visualización

El modo Tabs (por defecto) asigna a cada proceso su propia pestaña. Los usuarios cambian entre pestañas para leer un flujo a la vez. Los procesos individuales pueden reiniciarse o tener sus registros borrados de forma independiente, y un proceso que falla se reinicia automáticamente sin detener toda la pila.

El modo Stream reproduce el comportamiento anterior pero con capacidades de desplazamiento y búsqueda, mostrando toda la salida en un único flujo entrelazado.

El modo Inline produce texto plano sin interfaz de usuario, seleccionado automáticamente cuando no hay TTY (en contenedores, CI o bajo supervisores de procesos).

Los indicadores de tiempo de ejecución seleccionan un modo: `php artisan dev --tabs`, `php artisan dev --stream` o `php artisan dev --inline` (formas cortas: -t, -s, -i). Los usuarios pueden alternar entre modos Tabs y Stream mientras se ejecuta la interfaz.

Métodos de configuración

Siete métodos DevCommands configuran el comportamiento a nivel de proyecto en el método boot() de un proveedor de servicios: - `DevCommands::tabs()` – modo Tabs (por defecto) - `DevCommands::stream()` – flujo entrelazado - `DevCommands::inline()` – salida plana - `DevCommands::withTimestamps()` – prefija cada línea con una marca de tiempo - `DevCommands::disableAutoRestart()` – deja los procesos fallidos detenidos - `DevCommands::bufferSize(líneas)` – tamaño del buffer circular por proceso en modo Tabs - `DevCommands::streamBufferSize(líneas)` – líneas totales retenidas en modo Stream

Los indicadores de línea de comandos anulan la configuración del proveedor. En modo Tabs, cada proceso mantiene su propio buffer circular, impidiendo que un proceso verboso (como Vite) desplace otras salidas de la vista.

Comportamiento de reinicio automático

Los procesos fallidos se reinician automáticamente por defecto, reemplazando el comportamiento --kill-others-on-fail anterior donde cualquier fallo detenía toda la pila. Esto se ajusta a escenarios comunes: un trabajador de colas falla debido a un error fatal mientras se edita una clase Job, o Vite falla por una importación incorrecta. El proceso se recupera cuando se corrige el archivo, sin requerir un reinicio manual. Use `--no-restart` para desactivar esto por ejecución, o llame a `DevCommands::disableAutoRestart()` de forma permanente.

Soporte de plataformas y requisitos

Multiplex se ejecuta de forma nativa en macOS y Linux. Windows continúa usando concurrently; los métodos de modo y buffer son no-op allí, aunque `--timestamps` y `--no-restart` se traducen a indicadores concurrently equivalentes.

Se requiere Node.js v22.13 o posterior. Laravel fija @laravel/multiplex a una versión menor específica y lo ejecuta a través del gestor de paquetes del proyecto (pnpm dlx para proyectos pnpm, npx para npm) sin agregar una dependencia a package.json.

Características adicionales

La funcionalidad de búsqueda funciona en modos Tabs y Stream. El indicador `--json` emite eventos JSON delimitados por saltos de línea en lugar de salida formateada, permitiendo la integración con extensiones de editor o paneles que consumen datos de procesos estructurados.

Corrección SERVER_HOST

Una corrección relacionada en la misma versión soluciona un problema donde los argumentos explícitos de línea de comandos para el proceso serve anulan los valores predeterminados basados en el entorno. El servidor estaba registrado como `serve --host=localhost`, lo que ignoraba la variable de entorno SERVER_HOST. El valor predeterminado ahora es simplemente `serve`, restaurando la capacidad de exponer el servidor de desarrollo a otros dispositivos en la red: `SERVER_HOST=0.0.0.0 php artisan dev`. Los usuarios que registraron procesos de servidor personalizados para solucionar esto pueden eliminarlos.