The quickest look is PHP's built-in web server, wrapped by Artisan, which routes every request through public/index.php as the Apache rules of Front-Controller Routing do:
php artisan serve --port=8301
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8301/upINFO Server running on [http://127.0.0.1:8301]. ... 200
/up is the health route for load balancers: 200 when the application boots, 500 when it does not. The page at / is resources/views/welcome.blade.php; here is its returned HTML, cut to the text column, with Tailwind 5,202 's browser build replacing the compiled CSS:
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<body class="bg-[#FDFDFC] text-[#1b1b18] flex p-6 items-center min-h-screen flex-col">
<div class="text-[13px] leading-[20px] max-w-[335px] w-full p-6 bg-white rounded-lg
shadow-[inset_0px_0px_0px_1px_rgba(26,26,0,0.16)]">
<h1 class="mb-1 font-medium">Let's get started</h1>
<p class="mb-2 text-[#706f6c]">With so many options available to you,<br /> we suggest
you start with the following:</p>
<p class="py-2">Read the
<a class="font-medium underline text-[#f53003]">Documentation</a></p>
<p class="py-2 mb-4">Watch video tutorials at
<a class="font-medium underline text-[#f53003]">Laracasts</a></p>
<a class="px-5 py-1.5 bg-[#1b1b18] rounded-sm text-white text-sm">Deploy now</a>
<p class="mt-6 text-[#706f6c]">v13.33.0</p>
</div>
</body>
composer run dev adds a queue worker, a log viewer and the Vite 25,978 dev server. Since Laravel 13.16 2,157 (June 2026) the script only calls php artisan dev, whose process list you control from PHP; registering an existing name replaces that default, which is how the bookshop changes ports:
public function boot(): void
{
\Illuminate\Foundation\DevCommands::artisan('serve --port=8301', 'server');
\Illuminate\Foundation\DevCommands::node('dev -- --port=5301 --strictPort', 'vite');
}> @php artisan dev queue │ INFO Processing jobs from the [default] queue. logs │ INFO Tailing application logs. Press Ctrl+C to exit server │ INFO Server running on [http://127.0.0.1:8301]. ... vite │ ➜ Local: http://localhost:5301/ ... logs │ │ Order 1001 placed │
In a terminal the four appear as tabs (@laravel/multiplex; Windows uses concurrently); piped to a file, they interleave. logs is Laravel Pail 926 , which caught a logger() call made from Tinker. While Vite runs, its address sits in public/hot; if the processes are killed rather than stopped with Ctrl+C, that file survives and pages load CSS from a dead server. Delete it.