Laravel 13 2,157 needs PHP 8.3 or newer and thirteen extensions: Ctype, cURL, DOM, Fileinfo, Filter, Hash, Mbstring, OpenSSL, PCRE, PDO, Session, Tokenizer and XML. On Ubuntu 225 most are built into php8.5-cli; add php8.5-curl, php8.5-mbstring, php8.5-xml and a PDO driver such as php8.5-mysql. Check a server before you deploy to it:
php -r '$need = ["ctype", "curl", "dom", "fileinfo", "filter", "hash", "mbstring",
"openssl", "pcre", "pdo", "session", "tokenizer", "xml"];
$missing = array_diff($need, array_map(strtolower(...), get_loaded_extensions()));
echo "PHP ", PHP_VERSION, version_compare(PHP_VERSION, "8.3", ">=") ? " ok" : " too old",
"; missing: ", $missing ? implode(", ", $missing) : "none",
"; PDO drivers: ", implode(", ", PDO::getAvailableDrivers()), "\n";'PHP 8.5.4 ok; missing: none; PDO drivers: mysql, sqlite
The floor, 8.3, is what Laravel's composer.json accepts. The target, 8.5, is what every example here runs on. It matches PHP, so its features, such as the pipe operator, work unchanged. The test tools need more than the floor: a new application installs Pest 5, which requires PHP ^8.4, on PHPUnit 13 79,198 , which requires 8.4.1, so a PHP 8.3 server runs Laravel 13 but not its tests. And Laravel's own tooling assumes it: php.new and Sail 1,922 both install PHP 8.5. PHP 8.6 is due on 19 November 2026; wait for the release notes to list it before moving to it.