wezlo/filament-workspace-tabs
Browser-like tabs for Filament panels: open every page in a new tab, persist via localStorage, drag to reorder, pin tabs, reopen recently closed, and use right-click actions plus keyboard shortcuts. Works with Filament v4/v5, SPA and dark mode.
Browser-like tabs for Filament panels. Open multiple pages in tabs without losing context, drag to reorder, pin frequently accessed pages, and right-click for quick actions.
Ctrl+W / Cmd+W to close the active tab.Ctrl+click sidebar links to open in a new tab.->spa() mode and Livewire's wire:navigate.composer require wezlo/filament-workspace-tabs
Add the plugin to your panel provider:
use Wezlo\FilamentWorkspaceTabs\WorkspaceTabsPlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugins([
WorkspaceTabsPlugin::make(),
]);
}
Add the package views to your Filament theme CSS so Tailwind can scan utility classes:
/* resources/css/filament/{panel}/theme.css */
@source '../../../../vendor/wezlo/filament-workspace-tabs/resources/views/**/*';
Then rebuild your frontend assets:
npm run build
All options are available as fluent methods on the plugin:
WorkspaceTabsPlugin::make()
->maxTabs(25) // Maximum open tabs (default: 20)
->persistKey('my_tabs') // localStorage key prefix (default: 'filament_workspace_tabs')
->excludeUrls(['/admin/login']) // URL prefixes to never track as tabs
->contextMenu(false) // Disable right-click context menu
->dragReorder(false) // Disable drag-to-reorder
Once installed, the tab bar appears below the topbar automatically.
| Action | Behavior |
|---|---|
| Click sidebar link | Opens a new tab |
| Click an existing tab | Switches to that tab (navigates to its URL) |
| Middle-click / Ctrl+click a link | Opens in a new tab without navigating |
| Close button (x) | Closes the tab |
| Double-click a tab | Pins / unpins the tab |
| Right-click a tab | Opens context menu |
Ctrl+W / Cmd+W |
Closes the active tab |
| Drag a tab | Reorders it |
Pinned tabs display a pin icon alongside the label, have an indigo left border, and cannot be closed until unpinned. They always stay to the left of unpinned tabs.
When tabs are closed, they're stored in a history list. Click the dropdown arrow on the right side of the tab bar to reopen any of the last 10 recently closed tabs.
localStorage using Alpine.js $persist().Livewire.navigate() for SPA-style page transitions.document.title on each navigation.TOPBAR_AFTER render hook — no template modifications needed.php artisan vendor:publish --tag="filament-workspace-tabs-config"
MIT
How can I help you explore Laravel packages today?