The php artisan dev command starts your development processes in one command. Those processes include framework defaults, vendor packages via a service provider, and the application.
In Laravel 13.30, we get two new methods for the DevCommands class, which allow you to opt out of vendor and default commands:
use Illuminate\Foundation\DevCommands; DevCommands::withoutVendorCommands();DevCommands::withoutDefaultCommands();
This gives you complete control over what runs and locks everything down to whatever you define:
namespace App\Providers; use Illuminate\Foundation\DevCommands;use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider{ public function boot(): void { DevCommands::withoutVendorCommands(); DevCommands::withoutDefaultCommands(); DevCommands::artisan('serve', 'server'); DevCommands::artisan('queue:work --queue=notifications', 'queue:notifications'); DevCommands::node('dev', 'vite'); }}
You can also get more granular, using only() and except(). Let's say that you don't want to allow any vendor commands, but you want everything from the framework except logs:
DevCommands::withoutVendorCommands();DevCommands::except('logs');
Default Commands
The default commands come from the framework's registerDefaults() and registers four processes at the time of writing:
serverqueuelogs(whenpcntl_fork()exists)vite, (when the project has apackage.json)
Checking the List
If you want to see which processes will run, you can use the dev:list command:
php artisan dev:list server php artisan serve .................................. Illuminate\Foundation\Providers\ArtisanServiceProvider@boot queue php artisan queue:listen --tries=1 --timeout=0 ..... Illuminate\Foundation\Providers\ArtisanServiceProvider@boot logs php artisan pail --timeout=0 ....................... Illuminate\Foundation\Providers\ArtisanServiceProvider@boot vite npm run dev ........................................ Illuminate\Foundation\Providers\ArtisanServiceProvider@boot
Using the --json flag gives you JSON output, which could be helpful for agents:
php artisan dev:list --json | jq[ { "command": "php artisan serve", "name": "server", "color": "#93c5fd", "source": "Illuminate\\Foundation\\Providers\\ArtisanServiceProvider@boot", "priority": 0 }, { "command": "php artisan queue:listen --tries=1 --timeout=0", "name": "queue", "color": "#c4b5fd", "source": "Illuminate\\Foundation\\Providers\\ArtisanServiceProvider@boot", "priority": 0 }, { "command": "php artisan pail --timeout=0", "name": "logs", "color": "#fb7185", "source": "Illuminate\\Foundation\\Providers\\ArtisanServiceProvider@boot", "priority": 0 }, { "command": "npm run dev", "name": "vite", "color": "#fdba74", "source": "Illuminate\\Foundation\\Providers\\ArtisanServiceProvider@boot", "priority": 0 }
To learn more, check out the Artisan Dev Command docs. Opting out of default and vendor dev commands was contributed by Jack Bayliss in #61344 and part of the Laravel 13.30 release.