afs19/filament-vertical-tabs
Filament Vertical Tabs is a plugin for Filament panels that renders form tabs vertically instead of horizontally, giving long forms a cleaner sidebar-style layout. Easy to install and configure, it helps organize forms with many tabs into a compact, navigable vertical structure.
composer require afs19/filament-vertical-tabs. Laravel package auto-discovery handles the service provider in a standard Filament v3 app — only register manually if you've disabled discovery or use a custom bootstrap (bootstrap/providers.php).php artisan filament:cache-components && php artisan view:clear, then hard-refresh the panel.vendor/afs19/filament-vertical-tabs/src/. The package is small — the component class (and any published Blade view) is the whole surface area. Read that tag's README in vendor/, not the main branch docs, since small packages rename classes between releases.EditResource that already splits its form across 4+ tabs (General / SEO / Media / Advanced) and swap the horizontal container for the vertical one — the tab labels become a left-hand rail, form fields stay in the right panel.Minimal shape (confirm the exact class/namespace against the installed README):
public static function form(Form $form): Form
{
return $form->schema([
VerticalTabs::make()
->columnSpanFull()
->tabs([
Tab::make('General')->schema([...]),
Tab::make('SEO')->schema([...]),
]),
]);
}
Keep Tab::make() imported from Filament\Forms\Components\Tabs\Tab — only the container changes.
Filament\Forms\Components\Tabs. Migrate one resource, eyeball it, then roll out. Because Tab and the schema API are unchanged, the diff stays tiny and reviewable.->columnSpanFull() on the container so the rail plus panel span the grid. Without it the component can render in a single narrow column and look broken.persistTabInQueryString(), wire it up so support can send /admin/posts/1/edit?tab=seo and land on the right panel. This is the single highest-value integration for admin teams.->modalWidth('5xl')). A rail plus form fields squeezed into md is unusable.php artisan vendor:publish), publish it and align Tailwind classes with your panel's primary color and density. Load any custom CSS via ->viteTheme().Wizard and Section. Vertical tabs as the top-level container, a Wizard inside one tab for multi-step flows, Section for grouping within a tab — that's the pattern that scales.3.x bump, smoke-test one resource with vertical tabs before promoting to staging; internal tab-rendering changes are the usual breakage.php artisan filament:assets, view:clear, and config:clear. Add these to your deploy script.Class not found after install usually means a renamed namespace between versions. Check composer.lock for the exact installed version, run composer dump-autoload, and read that tag's source rather than trusting the README on main.->live() / ->reactive() fields there can fire validation and queries while the user types in a different tab. Move cross-field logic to afterStateUpdated or ->lazy() on the heavy fields.assertSee on form fields or assertFormSet-style assertions over tab-order selectors.App\Filament\Components\VerticalTabs so a future upgrade is a one-file swap.app/ and treat it as first-party — it's a few hundred lines and that insulates you from abandonment without meaningfully increasing maintenance.How can I help you explore Laravel packages today?