Das Kommando artisan dev führt vier Entwicklungsprozesse in einem Terminal aus: HTTP-Server, Queue-Worker, Log-Viewer (Pail) und Vite. Bis Laravel 13.25 wurden alle Ausgaben in den gleichen Stream geschrieben, was zu Leseproblemen führte, wenn mehrere Prozesse gleichzeitig protokollierten – etwa wenn ein Vite-Rebuild einen Stack-Trace von Pail überlagerte.

Laravel 13.25 ersetzt den Process-Manager concurrently durch @laravel/multiplex, eine neue Terminal-UI, die jede Prozess-Ausgabe isoliert und keine Installation oder Konfiguration erfordert. Die Integration wurde von Joe Tannenbaum (PR #61100) beigesteuert.

Drei Display-Modi

Tabs-Modus (Standard) vergibt an jeden Prozess einen eigenen Tab. Nutzer wechseln zwischen Tabs, um einen Stream nach dem anderen zu lesen. Einzelne Prozesse können unabhängig neu gestartet oder gelöscht werden, und ein abgestürzter Prozess startet automatisch neu, ohne den gesamten Stack zu unterbrechen.

Stream-Modus reproduziert das alte Verhalten, bietet aber Scroll- und Suchfunktionen und zeigt alle Ausgaben in einem einzigen verschachtelten Feed.

Inline-Modus gibt reinen Text ohne UI aus und wird automatisch ausgewählt, wenn es kein TTY gibt (in Containern, CI oder unter Process-Supervisoren).

Flags zur Laufzeit wählen einen Modus: `php artisan dev --tabs`, `php artisan dev --stream` oder `php artisan dev --inline` (Kurzformen: -t, -s, -i). Nutzer können während des Betriebs zwischen Tabs und Stream umschalten.

Konfigurationsmethoden

Sieben DevCommands-Methoden konfigurieren das Verhalten projekt-weit in der boot()-Methode eines Service-Providers: - `DevCommands::tabs()` – Tab-Modus (Standard) - `DevCommands::stream()` – verschachtelter Feed - `DevCommands::inline()` – reine Ausgabe - `DevCommands::withTimestamps()` – präfixt jede Zeile mit Zeitstempel - `DevCommands::disableAutoRestart()` – lässt abgestürzte Prozesse gestoppt - `DevCommands::bufferSize(lines)` – Ring-Buffer-Größe pro Prozess im Tabs-Modus - `DevCommands::streamBufferSize(lines)` – insgesamt behaltene Zeilen im Stream-Modus

Command-Line-Flags überschreiben Service-Provider-Einstellungen. Im Tabs-Modus verwaltet jeder Prozess seinen eigenen Ring-Buffer, wodurch ein verbose Prozess (wie Vite) andere Ausgaben nicht aus dem Sichtbereich verdrängt.

Auto-Restart-Verhalten

Abgestürzte Prozesse starten standardmäßig automatisch neu, was das bisherige --kill-others-on-fail-Verhalten ersetzt, bei dem jeder Fehler den gesamten Stack stoppte. Dies passt zu häufigen Szenarien: ein Queue-Worker stürzt ab, weil bei der Bearbeitung einer Job-Klasse ein fataler Fehler auftritt, oder Vite schlägt wegen eines schlechten Imports fehl. Der Prozess wird wiederhergestellt, wenn die Datei korrigiert wird, ohne dass ein manueller Neustart erforderlich ist. Verwenden Sie `--no-restart`, um dies pro Run zu deaktivieren, oder rufen Sie `DevCommands::disableAutoRestart()` dauerhaft auf.

Plattformunterstützung und Anforderungen

Multiplex läuft nativ auf macOS und Linux. Windows verwendet weiterhin concurrently; Modus- und Buffer-Methoden sind dort No-Ops, obwohl `--timestamps` und `--no-restart` auf äquivalente concurrently-Flags übersetzt werden.

Node.js v22.13 oder neuer ist erforderlich. Laravel pinnt @laravel/multiplex auf eine spezifische Minor-Version und führt es über den Package-Manager des Projekts aus (pnpm dlx für pnpm-Projekte, npx für npm), ohne eine Abhängigkeit zu package.json hinzuzufügen.

Zusätzliche Funktionen

Suchfunktionalität arbeitet in Tabs- und Stream-Modi. Das `--json`-Flag gibt newline-delimited JSON-Events statt formatierter Ausgabe aus und ermöglicht Integration mit Editor-Erweiterungen oder Dashboards, die strukturierte Prozessdaten konsumieren.

SERVER_HOST-Fix

Ein zusammenhängender Fix in der gleichen Version korrigiert ein Problem, bei dem explizite Command-Line-Argumente für den serve-Prozess umgebungsgestützte Standards außer Kraft setzten. Der Server war als `serve --host=localhost` registriert, was die Umgebungsvariable SERVER_HOST ignorierte. Der Standard ist jetzt einfach `serve`, wodurch die Möglichkeit wiederhergestellt wird, den Dev-Server anderen Netzwerkgeräten freizulegen: `SERVER_HOST=0.0.0.0 php artisan dev`. Nutzer, die zur Umgehung ein benutzerdefiniertes Server-Kommando registrierten, können es entfernen.