The Daily Commit · Section Edition Front Page PHP AI Dev EN DE FR ES

The Php Times

Reads — Ecosystem

Laravel 13.25 Upgrades artisan dev with Dedicated Process Terminal UI


Laravel 13.25 replaces the concurrent process runner in artisan dev with @laravel/multiplex, a terminal UI that isolates output from the development server, queue worker, Pail, and Vite into separate tabs.

LARAVEL NEWS, August 12, 2026 curated by Heiko

Three display modes (tabs, stream, inline) can be configured per run or project-wide via DevCommands methods.

The artisan dev command runs four development processes in a single terminal: the HTTP server, queue worker, log viewer (Pail), and Vite bundler. Until Laravel 13.25, all output streamed to the same feed, causing readability issues when processes logged simultaneously—for example, a Vite rebuild overlaying a stack trace from Pail.

Laravel 13.25 replaces the concurrently process manager with @laravel/multiplex, a new terminal UI that keeps each process output separate and requires no installation or configuration. The multiplex integration was contributed by Joe Tannenbaum (PR #61100).

Three Display Modes

Tabs mode (default) assigns each process its own tab. Users switch between tabs to read one stream at a time. Individual processes can be restarted or have logs cleared independently, and a crashed process automatically restarts without stopping the entire stack.

Stream mode reproduces the old behavior but with scrolling and search capabilities, displaying all output in a single interleaved feed.

Inline mode outputs plain text with no UI, selected automatically when there is no TTY (in containers, CI, or under process supervisors).

Run-time flags select a mode: `php artisan dev --tabs`, `php artisan dev --stream`, or `php artisan dev --inline` (short forms: -t, -s, -i). Users can toggle between tabs and stream mode while the UI runs.

Configuration Methods

Seven DevCommands methods configure behavior project-wide in a service provider boot method: - `DevCommands::tabs()` – tab mode (default) - `DevCommands::stream()` – interleaved feed - `DevCommands::inline()` – plain output - `DevCommands::withTimestamps()` – prefix each line with a timestamp - `DevCommands::disableAutoRestart()` – leave crashed processes stopped - `DevCommands::bufferSize(lines)` – ring buffer size per process in tabs mode (default varies) - `DevCommands::streamBufferSize(lines)` – total lines retained in stream mode

Command-line flags override provider settings. In tabs mode, each process maintains its own ring buffer, preventing a verbose process (like Vite) from pushing other output out of view.

Auto-Restart Behavior

Crashed processes restart automatically by default, replacing the previous --kill-others-on-fail behavior where any failure stopped the entire stack. This suits common scenarios: a queue worker dying on a fatal error while editing a job class, or Vite failing on a bad import. The process recovers when the file is fixed, without requiring a manual restart. Use `--no-restart` to disable this per run or call `DevCommands::disableAutoRestart()` permanently.

Platform Support and Requirements

Multiplex runs natively on macOS and Linux. Windows continues using concurrently; mode and buffer methods are no-ops there, though `--timestamps` and `--no-restart` translate to equivalent concurrently flags.

Node.js v22.13 or later is required. Laravel pins @laravel/multiplex to a specific minor version and runs it via the project's package manager (pnpm dlx for pnpm projects, npx for npm) without adding a dependency to package.json.

Additional Features

Search functionality works in both tabs and stream modes. The `--json` flag emits newline-delimited JSON events instead of formatted output, enabling integration with editor extensions or dashboards consuming structured process data.

SERVER_HOST Fix

A related fix in the same release corrects an issue where explicit command-line arguments to the serve process overrode environment-based defaults. The server was registered as `serve --host=localhost`, which ignored the SERVER_HOST environment variable. The default is now plain `serve`, restoring the ability to expose the dev server to other network devices: `SERVER_HOST=0.0.0.0 php artisan dev`. Users who registered custom server processes to work around this can remove them.

Read the original source ↗

Rate this article: 0

Readers’ Forum

No contributions yet — open the debate.

← Ecosystem — Page B1

"All the Code That's Fit to Ship" · The Daily Commit · Screen edition · Imprint · Privacy Policy