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.
TOPBAR_AFTER hook for minimal template disruption. Aligns with Filament’s SPA/Livewire architecture (supports wire:navigate).localStorage + Alpine.js $persist() for persistence, reducing server-side complexity. Ideal for admin panels where user context (e.g., open tabs) is ephemeral.WorkspaceTabsPlugin::make()) enables granular configuration (e.g., disabling drag/reorder) without monolithic changes.Livewire.navigate) change.composer require + Tailwind source inclusion.TOPBAR_AFTER).@source directive in theme.css (may need npm run build in CI/CD pipelines).filament_workspace_tabs:{panel_id}), which is correct but may need customization for multi-panel apps.->spa()). Traditional server-side navigation may behave differently (e.g., page reloads on tab switch).| Risk Area | Severity | Mitigation Strategy |
|---|---|---|
| Frontend Conflicts | Medium | Audit existing JS/CSS for Alpine/SortableJS clashes. Test with other Filament plugins (e.g., filament-spa). |
| State Sync Issues | Low | LocalStorage persistence is reliable, but edge cases (e.g., multiple tabs open in same browser) may require ->persistKey() customization. |
| Performance | Low | Bundle size (~50KB) is negligible for admin panels. Monitor memory usage if tabs exceed maxTabs(25). |
| Filament Version Lock | High | Hard dependency on Filament v4/v5. Upgrade path unclear if Filament evolves its render hooks (e.g., TOPBAR_AFTER deprecation). |
| Security | Low | LocalStorage persistence is user-specific; no server-side storage risks. |
->spa()? If not, how critical is SPA-like navigation for your use case?/admin/analytics) from tab tracking?maxTabs(20) may need adjustment for power users.wire:navigate for seamless transitions, reducing full-page reloads.composer show filament/filament) and PHP/Laravel compatibility.theme.css for Tailwind conflicts (e.g., duplicate @source directives).->spa() enabled if applicable.composer require wezlo/filament-workspace-tabs
Update resources/css/filament/{panel}/theme.css:
@source '../../../../vendor/wezlo/filament-workspace-tabs/resources/views/**/*';
Rebuild assets:
npm run build
app/Providers/Filament/AdminPanelProvider.php):
public function panel(Panel $panel): Panel {
return $panel->plugins([
WorkspaceTabsPlugin::make()
->maxTabs(30)
->excludeUrls(['/admin/reports/export'])
->contextMenu(true),
]);
}
Ctrl+W).filament-spafilament-notificationslocalStorage, document.title). No known issues with evergreen browsers (Chrome, Firefox, Edge, Safari).maxTabs, excludeUrls, etc.wezlo/filament-workspace-tabs for Filament v5+ compatibility. Subscribe to the repo for breaking changes.npm run build) after Filament or package updates that modify the topbar.maxTabs limits (e.g., via a tooltip).Ctrl+W) and context menu options for non-technical users.localStorage or check persistKey configuration.contextMenu(true) is set and no CSS is hiding the menuHow can I help you explore Laravel packages today?