Laravel 13.35.0 shipped on October 6, 2026. It introduces a percentage-based memory cap for queue workers instead of a fixed value, plus a native way to guarantee a scheduled task runs on only one server across a fleet. The release also fixes several erratic behaviors in Eloquent relations and file handling.
A relative memory ceiling instead of a fixed number
Until now, queue:work --memory only accepted an absolute value in megabytes. Across a fleet of workers running on machines of different sizes, that fixed number meant manually tuning it for every target, or under-sizing it out of caution. Laravel 13.35.0 now accepts a percentage, computed against the total memory available to the container or host machine. The worker restarts cleanly once it crosses that relative threshold, avoiding both overly frequent restarts on small instances and silent memory creep on larger ones.
Scheduler: guaranteed single execution across servers
The new Schedule::alwaysOnOneServer() method applies to every scheduled task in an application, without repeating onOneServer() on each entry individually. For teams deploying the same codebase across several application servers behind a load balancer, this is the setting that stops a cron task from firing twice in the same minute. The schedule:list --json command now exposes an onOneServer field per task, making it possible to audit the configuration without reading the source code.
Notable fixes: Eloquent, uploads and pagination
Beyond the two headline additions, the release fixes bugs reported by the community: incorrect behavior in HasOneThrough, HasManyThrough and morphTo relations under certain nested eager-loading scenarios, and a regression affecting JSON path updates on encrypted collections. File downloads with non-ASCII filenames are fixed too, along with a union-query bug combined with cursor pagination.
| Change | Before 13.35.0 | Since 13.35.0 |
|---|---|---|
| Worker memory | Fixed value in MB, tuned per machine | Percentage of available memory |
| Scheduler single execution | onOneServer() repeated per task | Global Schedule::alwaysOnOneServer() |
| Scheduler auditing | Required reading the source code | schedule:list --json exposes onOneServer |
| File storage | copyToDisk()/moveToDisk() without enum support | Native PHP enum support |
On the storage side, copyToDisk() and moveToDisk() now accept native PHP enums, and a new lazy_root_creation option avoids creating a root directory until a file is actually written to it. These adjustments sit alongside the broader command-line tooling that backend teams reach for daily, whether that’s Artisan or one of the JavaScript package managers compared on Mail Studio.
Worth checking. The percentage threshold is computed against the total memory reported by the system, not the memory allocated to the container if cgroups aren’t properly exposed. On infrastructure where container limits aren’t surfaced to the kernel, the percentage can end up anchored to the physical host’s memory instead: check what free -m reports from inside the container before migrating the configuration.
// Old setting: fixed value, duplicated per environment
// php artisan queue:work --memory=512
// New setting: percentage of available memory
php artisan queue:work --memory=75%
// Scheduler: single execution across the whole fleet
use Illuminate\Support\Facades\Schedule;
Schedule::alwaysOnOneServer();
Schedule::command('reports:generate')->dailyAt('03:00');
Schedule::command('cache:prune-stale-tags')->hourly();
With this release, Laravel turns a fixed memory limit into a budget relative to the machine, a minor technical detail that nonetheless prevents unwanted worker restarts in production.
Switching to these new options breaks no existing signature: applications that keep passing an absolute value to --memory see exactly the same behavior as before. The migration is therefore entirely optional, consistent with the compatibility policy already seen with Node.js’s own approach to defaults in the competing backend ecosystem.
What to remember
Laravel 13.35.0 fixes two concrete operational pain points for teams running queues and scheduled tasks across multi-server production: worker memory finally scales with the machine, and single-execution scheduling becomes a global setting rather than a per-task discipline. The 56 merged pull requests behind this release, from 28 contributors, are mostly targeted fixes rather than new features.
On the projects I maintain in production, the fixed --memory setting was always a false friend: you either recalculated it every time an instance changed, or set it low out of caution and lost efficiency. The percentage is a simple fix for a problem the Laravel community has flagged for years, and it’s the kind of quiet change that says more about a framework’s maturity than any headline feature. — Simon Janvier
Further reading: full Laravel 13.35.0 release notes on GitHub.
