Filament v5 Preview: Changes and How to Prepare | Mohamed Said        [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://msaied.com) [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles  ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

       [  ](https://github.com/EG-Mohamed)       

 [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

  [ home ](https://msaied.com)    [ articles ](https://msaied.com/articles)    Filament v5 Preview: What Is Changing and How to Prepare Your Codebase        On this page       1. [  Why v5 Matters More Than a Minor Bump ](#why-v5-matters-more-than-a-minor-bump)
2. [  The Biggest Architectural Shift: Schema-First Everything ](#the-biggest-architectural-shift-schema-first-everything)
3. [  Deprecated Patterns to Clean Up Now ](#deprecated-patterns-to-clean-up-now)
4. [  1. -&gt;disabledOn() / -&gt;hiddenOn() String Context Checks ](#1-code-gtdisabledoncode-code-gthiddenoncode-string-context-checks)
5. [  2. Static getRelations() / getWidgets() Arrays ](#2-static-codegetrelationscode-codegetwidgetscode-arrays)
6. [  3. Custom Field getView() Without a Component Class ](#3-custom-field-codegetviewcode-without-a-component-class)
7. [  Testing Strategy During the Transition ](#testing-strategy-during-the-transition)
8. [  Practical Preparation Checklist ](#practical-preparation-checklist)
9. [  Key Takeaways ](#key-takeaways)

  ![Filament v5 Preview: What Is Changing and How to Prepare Your Codebase](https://cdn.msaied.com/206/a7c9129a92bd03024da0ac0759cab8f6.png)

  #filament   #laravel   #filament-v5   #upgrade  

 Filament v5 Preview: What Is Changing and How to Prepare Your Codebase 
========================================================================

     16 Jun 2026      4 min read    ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said  

       Table of contents

  9 sections  

1. [  01   Why v5 Matters More Than a Minor Bump  ](#why-v5-matters-more-than-a-minor-bump)
2. [  02   The Biggest Architectural Shift: Schema-First Everything  ](#the-biggest-architectural-shift-schema-first-everything)
3. [  03   Deprecated Patterns to Clean Up Now  ](#deprecated-patterns-to-clean-up-now)
4. [  04   1. -&gt;disabledOn() / -&gt;hiddenOn() String Context Checks  ](#1-code-gtdisabledoncode-code-gthiddenoncode-string-context-checks)
5. [  05   2. Static getRelations() / getWidgets() Arrays  ](#2-static-codegetrelationscode-codegetwidgetscode-arrays)
6. [  06   3. Custom Field getView() Without a Component Class  ](#3-custom-field-codegetviewcode-without-a-component-class)
7. [  07   Testing Strategy During the Transition  ](#testing-strategy-during-the-transition)
8. [  08   Practical Preparation Checklist  ](#practical-preparation-checklist)
9. [  09   Key Takeaways  ](#key-takeaways)

       Why v5 Matters More Than a Minor Bump
-------------------------------------

Filament has shipped breaking changes with every major version, and v5 is no exception. The core team is using v5 to finish what the Schema API started in v4: a fully unified, typed component graph that removes the last remaining inconsistencies between forms, infolists, and table columns. If your panels are non-trivial, preparing now saves a painful weekend later.

> **Disclaimer:** Filament v5 is not yet stable. Everything below is based on public GitHub discussions, the v5 development branch, and official RFC comments as of mid-2025. APIs may still shift before release.

---

The Biggest Architectural Shift: Schema-First Everything
--------------------------------------------------------

In v4, forms and infolists adopted the Schema API but table columns remained on a parallel component tree. v5 collapses this — columns, filters, and actions will all be first-class `Schema\Component` descendants.

Practically, this means the `->columns()` method on a table will accept the same component pipeline as `->schema()` on a form. Shared concerns like visibility, disabled state, and hidden-when logic will live in one trait instead of three.

```php
// v4 — two separate APIs
public static function form(Form $form): Form
{
    return $form->schema([
        TextInput::make('name')->required(),
    ]);
}

public static function table(Table $table): Table
{
    return $table->columns([
        TextColumn::make('name')->sortable(),
    ]);
}

// v5 — columns gain full Schema lifecycle hooks
public static function table(Table $table): Table
{
    return $table->columns([
        TextColumn::make('name')
            ->sortable()
            ->visible(fn (Model $record): bool => $record->is_active)
            ->extraAttributes(['data-cy' => 'name-cell']), // now works on columns too
    ]);
}

```

---

Deprecated Patterns to Clean Up Now
-----------------------------------

### 1. `->disabledOn()` / `->hiddenOn()` String Context Checks

Passing string context names (`'create'`, `'edit'`) is being replaced by explicit closure-based checks. Start migrating:

```php
// Before (v3/v4 style)
TextInput::make('slug')->disabledOn('edit'),

// After (v5-ready)
TextInput::make('slug')
    ->disabled(fn (string $operation): bool => $operation === 'edit'),

```

### 2. Static `getRelations()` / `getWidgets()` Arrays

These are moving to a fluent panel builder registration pattern. If you override them in every resource, consider abstracting into a base resource class now:

```php
abstract class BaseResource extends Resource
{
    protected static function defaultRelations(): array
    {
        return [];
    }

    public static function getRelations(): array
    {
        return array_merge(static::defaultRelations(), [
            AuditRelationManager::class,
        ]);
    }
}

```

This pattern survives the v5 migration because the override point is in one place.

### 3. Custom Field `getView()` Without a Component Class

Blade-only custom fields that rely on `getView()` returning a string are being deprecated in favour of anonymous Livewire components or full `Component` subclasses. Audit your plugin fields:

```bash
grep -r 'getView()' app/Filament --include='*.php'

```

Any hit that returns a raw view string needs a `Component` wrapper before v5.

---

Testing Strategy During the Transition
--------------------------------------

Before upgrading, lock your Pest feature tests against the current behaviour so regressions surface immediately:

```php
it('renders the name column on the user table', function () {
    livewire(ListUsers::class)
        ->assertCanSeeTableRecords(User::factory(3)->create())
        ->assertTableColumnExists('name');
});

```

These assertions are stable across v4 and the current v5 beta because they test behaviour, not internal component structure.

---

Practical Preparation Checklist
-------------------------------

- **Audit `disabledOn`/`hiddenOn` string usage** — replace with closures.
- **Centralise relation manager registration** in a base resource.
- **Replace Blade-only custom fields** with proper `Component` subclasses.
- **Pin your Filament version** in `composer.json` (`"filament/filament": "^4.0"`) and monitor the v5 changelog.
- **Run `php artisan filament:upgrade`** on a branch as soon as a stable beta lands.
- **Write table column existence tests now** so you catch regressions during the upgrade.

---

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

- v5 unifies the Schema API across forms, infolists, and table columns — one component tree to rule them all.
- String-based context checks (`disabledOn`, `hiddenOn`) are on their way out; closures are the future.
- Custom Blade-only fields need to become proper `Component` subclasses before v5.
- Behaviour-focused Pest tests are your safety net during the upgrade.
- Centralising resource boilerplate in a base class dramatically reduces the surface area of breaking changes.

 Found this useful?

          [  ](https://twitter.com/intent/tweet?url=https%3A%2F%2Fmsaied.com%2Farticles%2Ffilament-v5-preview-what-is-changing-and-how-to-prepare-your-codebase&text=Filament+v5+Preview%3A+What+Is+Changing+and+How+to+Prepare+Your+Codebase) [  ](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fmsaied.com%2Farticles%2Ffilament-v5-preview-what-is-changing-and-how-to-prepare-your-codebase) 

 Frequently Asked Questions 
----------------------------

  3 questions  

     Q01  Is Filament v5 stable enough to upgrade production apps now?        No. As of mid-2025 Filament v5 is still in active development. You should monitor the official GitHub repository and changelog, prepare your codebase by removing deprecated patterns, but wait for a stable release before upgrading production. 

      Q02  Will my v4 custom field plugins break in v5?        Likely yes if they rely on Blade-only `getView()` string returns or extend internal classes that are being merged into the unified Schema component tree. Wrapping them in a proper Component subclass now is the safest migration path. 

      Q03  How do I track Filament v5 progress before it is released?        Watch the `v5` branch on the filamentphp/filament GitHub repository, subscribe to the official Discord announcements channel, and follow the core team's RFCs in the Discussions tab. 

  Continue reading

 More Articles 
---------------

 [ View all    ](https://msaied.com/articles) 

 [ ![Pest 5 Released: Test Impact Analysis, Agent Verification, and Evals](https://cdn.msaied.com/493/a1d6434093b945e8a3291eb09c09e768.png) Pest PHP Testing PHP 8.4 

### Pest 5 Released: Test Impact Analysis, Agent Verification, and Evals

Pest v5 lands with the TIA engine that cut Laravel Cloud's 19,000-test suite from 3 minutes to 5 seconds, plus...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 31 Jul 2026     4 min read  

  Read    

 ](https://msaied.com/articles/pest-5-released-test-impact-analysis-agent-verification-and-evals) [ ![Job Batching, Chaining, and Rate-Limited Middleware in Laravel Queues](https://cdn.msaied.com/489/89d47dc6b618d5435f9d7f333b75e922.png) laravel queues jobs 

### Job Batching, Chaining, and Rate-Limited Middleware in Laravel Queues

Go beyond basic dispatch: learn how to compose Laravel job batches with callbacks, chain dependent jobs safely...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 30 Jul 2026     4 min read  

  Read    

 ](https://msaied.com/articles/job-batching-chaining-and-rate-limited-middleware-in-laravel-queues-3) [ ![Laravel Observers vs. Model Events: Choosing the Right Hook for Domain Side-Effects](https://cdn.msaied.com/488/451564d0a43aa33809619fa299027222.png) laravel eloquent domain-events 

### Laravel Observers vs. Model Events: Choosing the Right Hook for Domain Side-Effects

Model events and observers look similar but behave differently under bulk operations, transactions, and test i...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 30 Jul 2026     4 min read  

  Read    

 ](https://msaied.com/articles/laravel-observers-vs-model-events-choosing-the-right-hook-for-domain-side-effects) 

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

Explore

- [Home](https://msaied.com)
- [Projects](https://msaied.com/projects)
- [Articles](https://msaied.com/articles)
- [Certificates](https://msaied.com/certificates)
- [Contact](https://msaied.com#contact-section)

Connect

- [   hello@msaied.com ](mailto:hello@msaied.com)
- [   +20 109 461 9204 ](tel:+201094619204)

© 2026 Mohamed Said. All rights reserved.

 [  ](https://github.com/EG-Mohamed) [  ](https://www.linkedin.com/in/msaiedm/) [  ](https://wa.me/201094619204) [  ](mailto:hello@msaied.com) [  ](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
