osamaatef/filament-drilldown-sidebar
A Filament plugin that turns selected sidebar groups into clickable buttons that slide into a detail view. Supports inline nested sub-groups, auto-discovery from resources/pages, and an optional live search.
Groups not marked for drill-down keep the standard Filament collapsible accordion. Both styles coexist in the same sidebar, rendered in their original registration order.
| Plugin Version | Filament | Laravel |
|---|---|---|
| 1.x | 3.x, 4.x, 5.x | 10, 11, 12 |
The plugin automatically detects your Filament version and publishes the correct sidebar view:
components/sidebar/index.blade.php)livewire/sidebar.blade.php)After upgrading Filament to a new major version, re-publish the views:
php artisan vendor:publish --tag=drilldown-sidebar-views --force
composer require osamaatef/filament-drilldown-sidebar
Publish the sidebar view:
php artisan vendor:publish --tag=drilldown-sidebar-views --force
The
--forceflag is required because this plugin overrides Filament's default sidebar view.
Register the plugin in your panel provider and list the group labels that should use drill-down navigation:
use OsamaAtef\DrilldownSidebar\DrilldownSidebarPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
DrilldownSidebarPlugin::make()
->drilledGroups([
'Service Management',
'Content Management',
]),
]);
}
Groups listed in drilledGroups() render as buttons with chevrons. Clicking one slides into a detail view with that group's items and a back button. All other groups render as the standard Filament collapsible accordion.
A drilled parent group can contain nested sub-groups. Inside the drill detail, each sub-group renders as a native Filament collapsible sidebar.group — so the UI remains consistent with the rest of the panel.
Declare the parent on each Resource / Page via a static $navigationParentGroup property. The plugin reflects over the panel's registered Resources and Pages and builds the hierarchy automatically.
// app/Filament/Resources/WorkshopResource.php
class WorkshopResource extends Resource
{
protected static ?string $navigationGroup = 'Activities';
protected static ?string $navigationParentGroup = 'Lighthouse';
}
// app/Filament/Resources/SportResource.php
class SportResource extends Resource
{
protected static ?string $navigationGroup = 'Activities';
protected static ?string $navigationParentGroup = 'Lighthouse';
}
// In AdminPanelProvider:
DrilldownSidebarPlugin::make()
->drilledGroups(['Lighthouse']);
Result: clicking Lighthouse opens a detail view containing an Activities sub-group with Workshop and Sport items nested inside.
DrilldownSidebarPlugin::make()
->drilledGroups(['Lighthouse'])
->subGroups([
'Lighthouse' => ['Activities', 'Bookings', 'Analytics'],
]);
When subGroups() is set, auto-discovery is skipped and your map wins.
A drilled parent doesn't need direct items — if all its content lives in sub-groups (none of its resources register $navigationGroup = the parent label directly), the plugin still renders the drill button. Its icon falls back to the first sub-group's icon.
Sub-groups are sorted by their position in your panel's ->navigationGroups([...]) array — the same list that orders top-level groups. Labels missing from that array fall to the end.
->navigationGroups([
'Lighthouse',
'Activities',
'Bookings',
'Analytics',
// ...
])
In the drill detail, children of Lighthouse will appear in this same order. If you want a different order, reorder the labels.
Manual ->subGroups([...]) config is used as-is (no re-sort).
Optional inline search input inside the drill detail view. Filters the parent's direct items by label (case-insensitive substring match).
DrilldownSidebarPlugin::make()
->drilledGroups(['Service Management'])
->withSearch(); // enable
// ->withSearch(false) to explicitly disable
Search is off by default.
If the current page belongs to a drilled group or any of its sub-groups, the sidebar opens that group's detail view automatically on page load — no extra wiring required.
When the sidebar is collapsed to icon-only mode, all groups use Filament's default icon dropdown regardless of drill-down status.

navigationGroups() order.$navigationParentGroup on Resources; sub-groups render inline as native Filament groups; redesigned drill detail header; fallback to native Filament rendering for non-drilled parents.->subGroups([...]) config, optional ->withSearch() live search.MIT License. See LICENSE for details.
How can I help you explore Laravel packages today?