Laravel 13 vs Laravel 14: Why Some Features Arrive Early While Others Must Wait for a Major Release

Laravel 13 vs Laravel 14: Why Some Features Arrive Early While Others Must Wait for a Major Release

One interesting thing about Laravel is that some genuinely useful features appear in ordinary framework updates, while seemingly smaller changes have to wait for the next major version.

A new Eloquent method can arrive months after a major release. Meanwhile, changing the default behavior of an existing method might require waiting for Laravel 14.

Why?

It comes down to a distinction that experienced developers should care about more: the size of a feature is not the same as the compatibility risk it introduces.

Laravel 13 was released on March 17, 2026, and continues to receive improvements. As of October 16, 2026, Laravel 14 has no published official release or upgrade guide.

But we already know how Laravel decides which changes can ship now and which belong in a future major release.

And understanding that decision can improve how we build, maintain, and upgrade applications.

1. Laravel Doesn't Save Every New Feature for a Major Release

There's a common assumption that major framework releases contain the new features, while smaller releases mainly deliver bug fixes.

That's not how modern Laravel development works.

According to Laravel's official versioning policy, the framework follows Semantic Versioning.

Major releases arrive approximately once a year, while minor and patch releases can arrive as frequently as every week.

The important commitment is that minor and patch releases should not introduce breaking changes.

This creates two development tracks.

The stable branch, currently 13.x, can receive improvements that preserve backward compatibility.

The upcoming release branch, master, is where Laravel directs major new features and changes that may break existing applications.

This is explicitly described in Laravel's contribution guidelines.

The practical distinction is straightforward:

If a feature adds capability without changing what existing applications expect, it may not need a new major version.

For example, adding a new method to the filesystem API can give developers more functionality without affecting code that never calls it.

Changing the behavior of an existing method is different.

Even if the new implementation is technically better, existing applications may depend on the previous behavior.

That's where versioning becomes an engineering contract rather than a marketing schedule.

2. Laravel 13 Shows How Features Can Arrive Without Breaking Applications

The clearest examples aren't hypothetical. They appeared in Laravel 13's September 2026 development updates.

An Eloquent improvement that preserves existing behavior

Laravel introduced AsCollection::nullable() and AsArrayObject::nullable() to support storing a native SQL NULL when a cast attribute is assigned null.

Previously, the existing collection and array-object casts stored a JSON "null" value in that situation.

Those aren't interchangeable database values.

A query using whereNull() can match a SQL NULL, but not a stored JSON null value.

The new behavior is useful, particularly when applications depend on SQL null semantics.

Laravel could theoretically have changed the existing casts to use SQL NULL by default.

But that would risk changing how existing applications store and query data.

Instead, Laravel introduced an explicit opt-in.

For example:

use Illuminate\Database\Eloquent\Casts\AsCollection;
use Illuminate\Database\Eloquent\Model;

class Order extends Model
{
    protected $casts = [
        'items' => AsCollection::nullable(),
    ];
}

Applications using the original cast behavior can continue working as before. Applications that need native SQL NULL can choose the new option.

This is an important architectural pattern.

Introduce the improved behavior as an option before considering whether it should become the default.

It gives developers access to useful functionality without forcing everyone to migrate immediately.

That doesn't mean Laravel has announced plans to change these defaults in version 14. It simply illustrates how backward-compatible API design can avoid requiring a major release.

Useful filesystem improvements don't need to wait either

The September 2026 Laravel changelog also introduced copyToDisk() and moveToDisk() methods.

These allow applications to transfer files between configured storage disks.

For example, an application can copy a generated report from local storage to S3 without manually managing the entire transfer process.

This is a meaningful developer-experience improvement, but it doesn't require replacing existing filesystem methods.

The same update cycle included semantic and hybrid search support for Scout's Typesense engine.

These examples demonstrate something important about Laravel's release philosophy.

New capabilities can be delivered incrementally when they fit into existing contracts.

Developers benefit from improvements throughout the year rather than waiting for an annual feature collection.

3. Why Some Changes Need a Major Release

If backward-compatible features can arrive during Laravel 13, what makes a change suitable for Laravel 14?

The obvious answer is breaking compatibility.

But breaking changes aren't always dramatic API removals or complete architectural redesigns.

Sometimes, a change as small as throwing an exception instead of continuing execution is enough.

A better implementation can still be a breaking change

Laravel 13 introduced stricter validation for database upsert() operations.

When using MySQL or MariaDB, Laravel now requires a non-empty uniqueBy argument.

Previously, an empty value could lead to invalid SQL. Laravel 13 instead throws an InvalidArgumentException.

From a correctness perspective, this is a reasonable improvement.

Invalid usage fails earlier and more explicitly.

However, applications that previously reached the database layer with that input now experience a different failure path.

A seemingly small correction becomes a compatibility concern.

That's why this change appears in the Laravel 13 upgrade guide.

Another example is the change from VerifyCsrfToken to PreventRequestForgery.

Laravel 13 introduces origin-aware request verification and retains deprecated middleware aliases for compatibility.

Even with those aliases, applications referencing the old middleware class directly may require adjustments.

These are examples of changes that belong in a major upgrade discussion because they affect existing expectations.

Major releases also create room for larger architectural work

Compatibility isn't the only consideration.

Laravel's contribution guidelines direct major new features to the upcoming release branch, even when a proposal isn't necessarily breaking.

That makes sense.

Some features touch multiple framework components, require substantial integration, or introduce new conventions that deserve broader review.

Shipping them during an existing release cycle may increase maintenance and testing complexity.

A major release provides a more deliberate integration point.

However, this shouldn't be interpreted as a prediction that any particular unfinished feature will appear in Laravel 14.

A proposal, pull request, or change merged into a development branch is not the same as a confirmed release commitment.

For developers following Laravel's development, that distinction matters.

4. What This Means for Developers Planning Laravel 14

The most useful conclusion isn't that developers should wait for Laravel 14.

In many cases, they shouldn't.

After approximately eight years working with Laravel, I see more value in treating framework upgrades as ongoing maintenance decisions rather than occasional migration projects.

The question shouldn't simply be, "When is the next major version coming?"

It should be, "What capability do we need, which version provides it, and what compatibility risks does adopting it introduce?"

Don't postpone useful features unnecessarily

Suppose your application needs one of the filesystem improvements already available in Laravel 13.x.

Waiting for Laravel 14 offers little benefit if the feature is stable, supported, and compatible with your application.

The better approach is to confirm the minimum Laravel version containing the feature, review its requirements, and test it.

It's also important to distinguish framework updates from first-party package updates.

Laravel Scout, Horizon, Cashier, and other packages have their own version requirements and release lifecycles.

A feature announced in the Laravel ecosystem doesn't automatically mean it's available in every installation of the core framework.

Understand what Composer will actually install

Laravel's documentation recommends constraints such as:

"laravel/framework": "^13.0"

In Composer, this allows compatible Laravel 13 releases while excluding Laravel 14.

It does not mean that every application will immediately receive every new 13.x feature.

Your lock file determines the versions currently installed, and dependency constraints may prevent particular updates.

For teams maintaining business-critical applications, I prefer controlled dependency updates with automated testing rather than upgrading blindly whenever packages become available.

That approach still allows regular updates without making deployment unpredictable.

Test behavior, not only compatibility declarations

A framework update may satisfy all declared Composer constraints while still revealing application-specific assumptions.

For example, a new optional database cast deserves tests covering persisted values and query results.

A new storage method deserves tests for permissions, failure handling, and how the application responds to partially completed external operations.

For a major upgrade, the scope expands to changes documented in the official upgrade guide.

That includes framework defaults, middleware behavior, contracts, and minimum PHP requirements.

Laravel 13, for example, requires PHP 8.3 or newer.

Laravel 14's minimum PHP requirement has not yet been officially confirmed.

Don't confuse an annual release schedule with a maintenance deadline

Laravel 13 receives bug fixes for approximately 18 months and security fixes for two years under the current support policy.

That gives teams room to plan upgrades sensibly.

But staying supported and adopting the newest major version are not exactly the same thing.

A team might reasonably remain on a supported version while preparing for compatibility changes.

Equally, postponing all updates until the next major release can mean missing valuable improvements and fixes already available.

The right strategy depends on application complexity, dependency support, operational risk, and the business value of newer capabilities.

The Most Important Difference Between Laravel 13 and Laravel 14 Isn't the Feature List

Laravel 13 already demonstrates how a mature framework can keep evolving between major releases.

New APIs, database capabilities, and developer-experience improvements don't always require a new version number.

At the same time, maintaining predictable behavior sometimes means holding back changes until developers have an explicit upgrade opportunity.

That's the balance Laravel is trying to maintain.

A major release isn't simply where new features arrive. It's where the framework is allowed to renegotiate its compatibility promises.

For developers, that changes how we should follow framework development.

Instead of treating Laravel 14 as the destination for every interesting improvement, pay attention to what's already shipping in Laravel 13, how new APIs preserve existing behavior, and which changes genuinely need migration work.

The most valuable lesson isn't about version numbers.

It's that good framework evolution requires two kinds of discipline: moving forward quickly when compatibility allows it, and knowing when a better design is worth asking developers to change their code.

Discussion

Comments

No comments yet. Be the first to comment.

Browse the project library

Projects to explore next

Source-code projects from the KritiMyantra catalogue. Check each project's details before buying.

All projects