Filament v5.8: Deferred Schema Loading &amp; More | Mohamed Said       [Skip to content](#main)  [ ![](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png) Mohamed SaidLaravel Backend Engineer ](https://www.msaied.com/public) - [Home](https://www.msaied.com/public)
- [Projects](https://www.msaied.com/public/projects)
- [Articles](https://www.msaied.com/public/articles)
- [Certificates](https://www.msaied.com/public/certificates)
- [About](https://www.msaied.com/public#about)

           [  Contact](https://www.msaied.com/public#contact) Menu 

Menu
----

Close 

 - [HomeStart here](https://www.msaied.com/public)
- [ProjectsCase studies](https://www.msaied.com/public/projects)
- [ArticlesEngineering notes](https://www.msaied.com/public/articles)
- [CertificatesCredentials](https://www.msaied.com/public/certificates)
- [AboutHow I work](https://www.msaied.com/public#about)
- [ContactGet in touch](https://www.msaied.com/public#contact)

  [Start a conversation](https://www.msaied.com/public#contact) [WhatsApp](https://wa.me/201094619204) [Email](mailto:hello@msaied.com) 

 1. [Home](https://www.msaied.com/public)
2. /
3. [Articles](https://www.msaied.com/public/articles)
4. /
5. [Laravel](https://www.msaied.com/public/articles?category=laravel)
6. /
7. Filament v5.8: Deferred Schema Loading, Table Grouping Improvements, and More

   [Laravel](https://www.msaied.com/public/articles?category=laravel) [Filament](https://www.msaied.com/public/articles?category=filament) 

 Filament v5.8: Deferred Schema Loading, Table Grouping Improvements, and More
==============================================================================

 Filament v5.8.0 ships deferred child-schema loading, session-persisted table grouping, trait-based lifecycle hooks, stat placeholders, reusable MFA challenges, editor height controls, and custom export downloaders.

 ![](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp) [Mohamed Said](https://www.msaied.com/public#person) Published 26 Oct 2026 · Updated 28 Oct 2026 · 4 min read

ShareCopy linkCopied

 ![Filament v5.8: Deferred Schema Loading, Table Grouping Improvements, and More](https://cdn.msaied.com/808/d118ca0a73009ac41175d54bc274a4d5.png) 

  On this page +1. [What's New in Filament v5.8.0](#whats-new-in-filament-v580)
2. [Deferred Schema Loading](#deferred-schema-loading)
3. [Persist Table Grouping in the Session](#persist-table-grouping-in-the-session)
4. [Default Grouping Direction](#default-grouping-direction)
5. [Lifecycle Hooks in Traits](#lifecycle-hooks-in-traits)
6. [Placeholders for Stats](#placeholders-for-stats)
7. [Reusable Multi-Factor Challenge](#reusable-multi-factor-challenge)
8. [Editor Height Controls](#editor-height-controls)
9. [Custom Export Downloaders](#custom-export-downloaders)
10. [Key Takeaways](#key-takeaways)

 What's New in Filament v5.8.0
-----------------------------

Filament v5.8.0 landed on 27 October 2026 with a focused set of quality-of-life improvements. Here is a rundown of every notable change.

---

Deferred Schema Loading
-----------------------

The headline feature is the new `deferLoading()` method on `Schema`, contributed by Kian Acquoij. Previously, Filament rendered every component on the first page load — including fields inside collapsed sections and inactive tabs the user might never open. With deferred loading, a child schema renders a loading indicator first; the real fields are fetched in a separate request only when that indicator scrolls into view.

To opt in, pass a `Schema` object (instead of a plain array) to the component's `schema()` method:

```php
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;

Section::make('Customer details')
    ->key('customerDetails')
    ->schema(
        Schema::make()
            ->components([
                TextInput::make('name'),
                TextInput::make('email')->email(),
            ])
            ->deferLoading(),
    )
    ->collapsed();

```

The same pattern works for tabs (loads when selected), wizard steps (loads when reached), and repeater items or builder blocks (loads when expanded).

---

Persist Table Grouping in the Session
-------------------------------------

Tables already supported persisting sort, search, filters, and visible columns in the session. The new `persistGroupInSession()` method, contributed by @IGedeon, extends that to the selected grouping. The release also fixes a Livewire hook that never fired due to a property-name mismatch, and changing the grouping now resets the table to page one.

```php
$table
    ->groups(['status', 'category'])
    ->persistGroupInSession();

```

---

Default Grouping Direction
--------------------------

The `defaultGroup()` method now accepts a `direction` argument (contributed by TinaH), matching the signature of `defaultSort()`:

```php
$table->defaultGroup('status', direction: 'desc');

```

---

Lifecycle Hooks in Traits
-------------------------

Pages and importers now support trait-scoped lifecycle hooks following Eloquent's `boot{TraitName}()` convention, contributed by @oddvalue. A trait can define `afterSaveHandlesDrafts()` alongside a page's own `afterSave()`, and both will run — the page hook first, then each trait hook — without either overwriting the other.

```php
trait HandlesDrafts
{
    protected function afterSaveHandlesDrafts(): void
    {
        // Runs after the page's afterSave().
    }
}

```

---

Placeholders for Stats
----------------------

The stats overview widget's `Stat` class gains a `placeholder()` method. When a stat's value is blank, the placeholder string is shown instead of an empty space. Set a global default via `Stat::configureUsing()` in a service provider; individual stats can still override it.

```php
Stat::make('Unique views', $uniqueViews)->placeholder('-');

```

---

Reusable Multi-Factor Challenge
-------------------------------

The one-time code challenge from the login page is now extracted into a standalone `MultiFactorChallenge` class. You can embed it in any Livewire component — for example, to gate a destructive action behind a second factor. The class handles rate limiting and provider setup, and the docs warn that validating an empty schema succeeds, so always call `hasEnabledProviders()` before validating.

---

Editor Height Controls
----------------------

`RichEditor` and `MarkdownEditor` now accept `minHeight()` and `maxHeight()` (any CSS length), contributed by Dennis Koch. The default minimum is `10rem`; once content exceeds `maxHeight()`, the editor scrolls rather than growing.

```php
RichEditor::make('content')
    ->minHeight('12rem')
    ->maxHeight('24rem');

```

---

Custom Export Downloaders
-------------------------

Exporters can now override `getDownloader()` to return a custom downloader per format, contributed by Brett B. This is particularly useful on hosts like Laravel Vapor that block streamed responses for large files. A downloader is an invokable class that receives the `Export` model and returns a Symfony `Response`.

---

Key Takeaways
-------------

- Use `Schema::make()->deferLoading()` to lazy-load fields in collapsed sections, inactive tabs, wizard steps, and repeater items.
- `persistGroupInSession()` completes session persistence for all table state.
- `defaultGroup('field', direction: 'desc')` sets a descending default group order.
- Trait lifecycle hooks (`afterSave{TraitName}()`) prevent hook collisions across reusable traits.
- `Stat::placeholder('-')` keeps stats widgets clean when data is unavailable.
- `MultiFactorChallenge` can now guard any Livewire action, not just login.
- `minHeight()` / `maxHeight()` give precise control over rich and Markdown editor sizing.
- Custom export downloaders unblock large-file exports on serverless platforms.

---

[Read the original article on Laravel News](https://laravel-news.com/filament-5-8-0)

- [Filament](https://www.msaied.com/public/articles?search=Filament)
- [Laravel](https://www.msaied.com/public/articles?search=Laravel)
- [PHP](https://www.msaied.com/public/articles?search=PHP)
- [Admin Panel](https://www.msaied.com/public/articles?search=Admin%20Panel)
- [Performance](https://www.msaied.com/public/articles?search=Performance)

 Frequently asked questions 
---------------------------

  How does deferred schema loading work in Filament v5.8?Pass a `Schema` object (not a plain array) to a component's `schema()` method and chain `-&gt;deferLoading()`. Filament renders a loading indicator immediately and fetches the real fields in a separate request only when the indicator enters the viewport — for example, when a collapsed section is expanded or an inactive tab is selected.

   Can I use the multi-factor challenge outside the Filament login page?Yes. The new `MultiFactorChallenge` class can be instantiated in any Livewire component. Call `hasEnabledProviders($user)` to confirm the user has MFA set up, then use `getSchemaComponents($user)` to embed the challenge form. Always re-check `hasEnabledProviders()` immediately before validation, because validating an empty schema succeeds.

   Why would I need a custom export downloader in Filament?The default downloaders return a streamed HTTP response, which some serverless hosts (such as Laravel Vapor) block for large files. By overriding `getDownloader()` on an exporter, you can return a custom invokable class that redirects to a temporary URL on a remote disk or handles the response in any other way your infrastructure requires.

   ![Mohamed Said](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp)About the author
----------------

[Mohamed Said](https://www.msaied.com/public#person)Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

[About](https://www.msaied.com/public#about) [GitHub ↗](https://github.com/EG-Mohamed) [LinkedIn ↗](https://www.linkedin.com/in/msaiedm/) [WhatsApp ↗](https://wa.me/201094619204) [Email Address ↗](mailto:hello@msaied.com) [My CV ↗](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)  

   [Previous articleVolker Dusch on the PHP RCE Vulnerabilities and Disclosure](https://www.msaied.com/public/articles/volker-dusch-on-the-php-rce-vulnerabilities-and-disclosure)  

   On this page
-------------

1. [What's New in Filament v5.8.0](#whats-new-in-filament-v580)
2. [Deferred Schema Loading](#deferred-schema-loading)
3. [Persist Table Grouping in the Session](#persist-table-grouping-in-the-session)
4. [Default Grouping Direction](#default-grouping-direction)
5. [Lifecycle Hooks in Traits](#lifecycle-hooks-in-traits)
6. [Placeholders for Stats](#placeholders-for-stats)
7. [Reusable Multi-Factor Challenge](#reusable-multi-factor-challenge)
8. [Editor Height Controls](#editor-height-controls)
9. [Custom Export Downloaders](#custom-export-downloaders)
10. [Key Takeaways](#key-takeaways)

 ###  Have a technical challenge?

 Tell me what you’re building. I reply within two working days.

[Start a conversation](https://www.msaied.com/public#contact) 

   Related articles
-----------------

 [ ![](https://cdn.msaied.com/807/5d78d8a7c09c6847fd813a03863ea3fa.png) PHP · 4 min read### Volker Dusch on the PHP RCE Vulnerabilities and Disclosure

23 Oct 2026 ](https://www.msaied.com/public/articles/volker-dusch-on-the-php-rce-vulnerabilities-and-disclosure) [ ![](https://cdn.msaied.com/805/a4dfa0e7c7e3c01fb99f0f970866675b.png) AI · 3 min read### Decide with Jev Episode 3: Turn AI Answers into Decisions with PHP Rules

23 Oct 2026 ](https://www.msaied.com/public/articles/decide-with-jev-episode-3-turn-ai-answers-into-decisions-with-php-rules) [ ![](https://cdn.msaied.com/806/7655717eef251177fe662e2802c93d39.png) Laravel · 4 min read### Laravel Read Replicas: Prevent Stale Reads After a Write

22 Oct 2026 ](https://www.msaied.com/public/articles/laravel-read-replicas-prevent-stale-reads-after-a-write) 

  Have a technical challenge?
----------------------------

Tell me what you’re building. I reply within two working days.

 [Discuss your project ↗](https://www.msaied.com/public#contact) 

  © 2026 Mohamed Said · Built with Laravel, meant to last.Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

 - [Home](https://www.msaied.com/public)
- [Articles](https://www.msaied.com/public/articles)
- [Certificates](https://www.msaied.com/public/certificates)
- [GitHub](https://github.com/EG-Mohamed)
- [LinkedIn](https://www.linkedin.com/in/msaiedm/)
- [WhatsApp](https://wa.me/201094619204)
- [Email Address](mailto:hello@msaied.com)
- [My CV](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
- [Sitemap](https://www.msaied.com/public/sitemap.xml)
