Taylor Otwell gave his keynote address at the end of day one of Laracon US 2024, with many ambitious projects, such as an official VS code extension, many cool Laravel framework features like defer()
, a demo of Inertia v2 features, and Laravel Cloud.
Let's take a glance at what Taylor shared in his keynote this year:
Official Laravel VS Code Extension
Taylor announced an official VS Code Extension for Laravel, which will be available later this fall (2024). With the new extension you will have everything you need to have an incredible experience developing web applications with Laravel and VS Code.
Taylor invited Joe Tannenbaum to the stage during his keynote to demonstrate the upcoming VS Code Extension, which was an awesome sight to see. Here are the high-level features shared during the Keynote:
- The goal is to "reveal as much intelligence about your project as possible, manifested in four different ways:
- Autocomplete for Eloquent, services, etc.
- Clickable
- Hover - information at a glance with "quick fixes"
- Diagnostics - warn you inline if you've made a mistake
- VS Code Test Explorer integration
Autocomplete for app()
, route()
, config()
, env()
, trans()
, and more:
Autocomplete for available app()
services, hover info about the service, with the ability to jump straight to the source of where the service is registered, was one of my favorite features Joe showed us:
The text explorer integration will let you run tests via a play button in the file explorer, giving you inline error messages for failures. You will also have access to full test output at the bottom of VS Code:
New Open-source Features for the Laravel Framework
Temporary file URL with the local filesystem driver
Container attributes allow you to set parameters on classes loaded via the container:
The Config
attribute isn't the only attribute that will be available, others include DB('driver')
for resolving a database connection, CurrentUser
to get the currently authenticated user, and more:
public function __construct( #[CurrentUser] User $user, #[DB('mysql')] Connection $connection, #[Config('services.github.token')] string $githubToken) { // ...}
You can also create your own container attributes for a package or Laravel app by implementing a simple interface. Laravel 11 already has these container attributes available, which you can use in your application right now!
Eloquent Chaperone
You can avoid gnarly N+1 queries by instructing Eloquent to link the related models back to the parent after the relationship query has run using the new ->chaperone()
method on a relationship:
New Defer Helper
There's a new way to push work to the background using the defer()
helper
With the defer helper, you can push code execution into the background, which is executed after the response is already sent to the browser:
public function index(){ defer(fn() => Some:backgroundTask()); // .... return view('example');}
There are other areas of the framework that take advantage of defer, such as this Cache::flexible()
method, which can serve a stale cache between 5-10 seconds, but then defer() will update the cache in the background to keep it fresh:
New Concurrency Facade
The new Concurrency
Facade can run multiple callbacks simultaneously without slowing down the request:
Laravel Inertia v2.0
Taylor demonstrated six key features coming to Inertia 2.0, but this part of the keynote is best to see live. The new features coming to Inertia 2 are mind-blowingly good, and include async requests, deferred props, prefetching, and more.
I loved the prefetching feature, which will either preload links on mount or hover, making for a near-instant, snappy user experience.
One More Thing - Laravel Cloud ☁️
Taylor ended the keynote by unveiling Laravel Cloud, the Future of Shipping. The keynote was the first public demo of Laravel's new app platform for deploying Laravel apps instantly. During the demo, Taylor created a project and had a Laravel app up and running in 25 seconds 🤯
You can get on the Laravel Cloud waiting list on cloud.laravel.com, and watch the commercial video here: