Geschrieben von Chris Schön am Apr 3, 2026
Nova hat uns jahrelang gute Dienste geleistet. Schnell ein Admin-Panel aufsetzen, Ressourcen definieren, fertig. Aber irgendwann häuften sich die Momente, in denen wir mehr Zeit damit verbrachten, Nova zu umgehen, als es zu nutzen. Spätestens als ein Kunde ein komplett individuelles Dashboard-Design wollte und wir zum dritten Mal gegen Novas Grenzen liefen, war klar: Wir brauchen eine Alternative.
Heute läuft FilamentPHP in fast allen unseren Laravel-Projekten. Und wir bereuen nichts.
Laravel Nova ist ein solides Tool – keine Frage. Aber es ist ein geschlossenes Ökosystem. Das bedeutet konkret:
Das alles sind keine Dealbreaker für sich. Aber in Summe haben sie uns immer öfter ausgebremst.
Statt langer Prosa – hier die Unterschiede, die für uns den Ausschlag gaben:
| Kriterium | Laravel Nova | FilamentPHP |
|---|---|---|
| Lizenz | Proprietär, 199 $/Jahr/Projekt | MIT-Lizenz, kostenlos |
| Tech-Stack | Vue.js | Livewire + Alpine.js + Blade |
| Design-Anpassung | Begrenzt, Custom Tools nötig | Vollständig anpassbar via Blade |
| Plugin-Ökosystem | Marketplace (teils kostenpflichtig) | Wachsende Open-Source-Community |
| Formulare & Tabellen | Gut, aber starr | Extrem flexibel, eigene Layouts |
| Multi-Tenancy | Zusatzpakete nötig | Nativer Support |
| Community-Beiträge | Nicht möglich (Closed Source) | Pull Requests willkommen |
Der entscheidende Punkt: FilamentPHP nutzt denselben Stack, den wir ohnehin in unseren Laravel-Projekten einsetzen – Livewire und Blade. Kein Context-Switch, keine separate Build-Pipeline für Vue-Komponenten.
Wir haben nicht über Nacht gewechselt. Zuerst kam FilamentPHP in ein neues Projekt als Test. Nach zwei Wochen war klar: Die Produktivität ist höher, die Anpassbarkeit eine andere Liga.
Konkret bedeutet das für uns:
Zukünftige Laravel-Projekte setzen wir ausschließlich mit FilamentPHP um. Für bestehende Nova-Projekte migrieren wir schrittweise – und genau dabei hilft uns Claude Code enorm.
Eine Nova-zu-Filament-Migration klingt nach viel Arbeit. Ist es auch – wenn du alles manuell machst. Mit Claude Code lässt sich der Aufwand aber drastisch reduzieren.
Starte eine Session mit Claude Code und beschreibe dein bestehendes Nova-Setup:
claude "Analysiere meine Nova-Resources in app/Nova/ und erstelle eine
Übersicht aller Ressourcen, Actions, Filters und Lenses.
Liste Abhängigkeiten und Custom Tools auf."
Claude Code durchsucht dein Projekt und gibt dir eine strukturierte Übersicht. Damit weißt du genau, was migriert werden muss.
Jetzt wird es konkret. Nutze den /plan-Command, um einen Migrationsplan zu erstellen:
/plan Migriere die Nova-Resource UserResource zu einem FilamentPHP
Resource. Berücksichtige alle bestehenden Fields, Filters und Actions.
Erstelle auch die zugehörigen Pest-Tests.
Claude Code erstellt einen detaillierten Plan: welche Dateien angelegt werden, welche Änderungen nötig sind und in welcher Reihenfolge. Du reviewst den Plan, bevor eine Zeile Code geschrieben wird.
Nach dem Review gibst du grünes Licht. Claude Code erstellt die Filament-Resources, Pages und Widgets. Ein typisches Ergebnis:
// app/Filament/Resources/UserResource.php
use Filament\Resources\Resource;
use Filament\Forms;
use Filament\Tables;
class UserResource extends Resource
{
protected static ?string $model = User::class;
protected static ?string $navigationIcon = 'heroicon-o-users';
public static function form(Forms\Form $form): Forms\Form
{
return $form->schema([
Forms\Components\TextInput::make('name')->required(),
Forms\Components\TextInput::make('email')->email()->required(),
Forms\Components\Select::make('role')
->options(Role::pluck('name', 'id')),
]);
}
public static function table(Tables\Table $table): Tables\Table
{
return $table->columns([
Tables\Columns\TextColumn::make('name')->searchable()->sortable(),
Tables\Columns\TextColumn::make('email')->searchable(),
Tables\Columns\TextColumn::make('created_at')->dateTime('d.m.Y'),
]);
}
}
Hier kommt ein entscheidender Schritt, den viele bei der Migration vergessen: Tests. Bevor du Claude Code loslässt, binde Laravel Boost ein:
composer require laravel/boost --dev
Laravel Boost gibt Claude Code den nötigen Kontext über dein Projekt – Modelle, Beziehungen, Routen. Damit generiert Claude Code nicht nur die Filament-Resources, sondern auch passende Pest-Tests:
// tests/Feature/Filament/UserResourceTest.php
use App\Models\User;
use function Pest\Livewire\livewire;
it('can render the user list page', function () {
$this->actingAs(User::factory()->admin()->create());
$this->get(UserResource::getUrl('index'))
->assertSuccessful();
});
it('can create a new user', function () {
$this->actingAs(User::factory()->admin()->create());
livewire(CreateUser::class)
->fillForm([
'name' => 'Max Mustermann',
'email' => 'max@example.com',
'role' => 1,
])
->call('create')
->assertHasNoFormErrors();
expect(User::where('email', 'max@example.com')->exists())->toBeTrue();
});
So stellst du sicher, dass die Migration nichts kaputt macht – und hast direkt eine Testsuite für das neue Filament-Setup.
Zusammengefasst sieht unser optimaler Migrations-Workflow so aus:
/plan erstellt den detaillierten MigrationsplanPro Resource dauert das etwa 15–30 Minuten statt mehrerer Stunden manueller Arbeit. Bei einem Projekt mit 20 Resources sparst du locker zwei bis drei Arbeitstage.
Der Wechsel von Nova zu FilamentPHP war für uns keine spontane Entscheidung, sondern das Ergebnis wachsender Frustration mit einem geschlossenen System. Die Vorteile nach der Migration:
Wenn du den Wechsel planst, fang klein an: Nimm ein neues Projekt oder ein internes Tool und setze es mit FilamentPHP um. Sobald du die Flexibilität erlebst, stellt sich die Frage nach Nova nicht mehr. Und für die Migration bestehender Projekte – lass Claude Code die Schwerarbeit machen. Dafür ist es da.