Repository navigation
Releases
v1.2.0
v1.2.0 — Smoother Table Updates & Our First Community Contribution! 🎉
🎉 A huge welcome to our first community contributor!
This release marks a special milestone for Filament Skeleton Loading: our first community-contributed feature! 🥳
A massive thank you to "@goncalosoaresdev" (https://github.com/goncalosoaresdev) (Gonçalo Soares) for building "showSkeletonsOnTableUpdate()", adding documentation and browser tests, and following through on the Filament 4 compatibility fix. 🙌
Your contribution makes table interactions feel smoother for everyone using this package. Welcome to the contributor family, Gonçalo! 🚀👏
✨ What's new
Skeleton rows while tables update — opt-in
Enable skeleton rows whenever an already-loaded Filament table updates, including pagination, searching, filtering, sorting, switching tabs, grouping, and changing the number of records per page.
SkeletonLoadingPlugin::make()
->showSkeletonsOnTableUpdate();
You can also enable it selectively, per table:
SkeletonLoadingPlugin::make()
->showSkeletonsOnTableUpdate(fn (Table $table): bool => $table->getLivewire() instanceof ListRecords);
Or configure it for panels that register the plugin using:
SKELETON_LOADING_SHOW_ON_TABLE_UPDATE=true
Off by default. This option is independent of "deferTables()", preserves the initial loading behavior, and does not alter widgets, sections, or panels without the plugin.
🎨 Filament 4 and 5 styling
- Loading skeleton colors now work in both Filament 4 and Filament 5, using the appropriate native CSS variables.
- Existing panel radius, dark mode, and shimmer preferences continue to apply.
- Added a dedicated Workbench Invoices page and browser coverage for table updates, first-load behavior, and light/dark styling.
🔧 Maintenance
- Updated the "zizmor" GitHub Actions dependency.
- Expanded the README and documentation for configuration and table loading states.
✅ Verification
All five GitHub Actions workflows passed, including package tests, code quality, documentation, package standard, and browser tests.
⬆️ Upgrading
composer update mortalkiller/filament-skeleton-loading
php artisan filament:assets
The new table-update skeletons are optional: enable them explicitly in your panel or environment if you want them.
Compatibility: PHP 8.3+, Laravel 12/13, Filament 4.15.2+ or 5.10.2+.
Pull request: "#6 — showSkeletonsOnTableUpdate()" (#6)
Full changelog: v1.1.1...v1.2.0
Thanks again, Gonçalo — here's to many more community contributions! 🎊
v1.1.1
Fixes
- The optional page loader now uses a separately published Filament asset, registers its listeners once and leaves Livewire SPA navigation to Livewire.
- The loader waits for its configured display threshold without delaying navigation. Links and form submissions targeting another browsing context do not trigger it.
- Lazy stats widgets render their skeleton cards without fetching stats or calculating columns from the widget's data.
Upgrading
This security update supports Filament 4.15.2+ and 5.10.2+. Upgrade Filament first if your application is on an earlier patch of either major. These minimum versions include the upstream tenant tooltip XSS fix.
After updating the package, run php artisan filament:assets to publish the updated stylesheet and the new page loader script.
Full changelog: v1.1.0...v1.1.1
v1.1.0
Added
rounded()sets the corner radius of the skeletons per panel: a theme size (none,xsto4xl,full) or an exact pixel length (8,'2.5px'). Other values throwInvalidArgumentException.selectSearchSkeletons()andglobalSearchSkeletons()show skeleton lines while searchable selects and the global search wait for results. Both are off by default.- Deferred schemas get a form, infolist or list placeholder: chosen from the page (a
ViewRecordpage, a schema inside a repeater) or set with->skeletonPlaceholder(SchemaPlaceholder::Infolist). - Deferred tables follow the visible columns or the card grid when Filament exposes them to the table content hook; older Filament versions keep the fixed rows.
- Tables that use Filament's
loadingSkeleton()get the package's colours and radius while they update.
Fixed
- The page loader no longer blocks the page when the browser stays on it, for example after a cancelled "leave page?" prompt or a link that downloads a file: a click or Escape hides it. Links with a
downloadattribute still never show it.
Compatibility
Unchanged: PHP 8.3 to 8.5, Laravel 12 and 13, Filament 4.12.6+ and 5.8.1+. CI tests the lowest and latest dependency sets of each Filament major, plus browser tests on both majors.
Upgrading
composer update mortalkiller/filament-skeleton-loading, then php artisan filament:assets if your deployment does not already run it: the stylesheet changed.
Documentation
https://docs.pedromonteiro.dev/filament-skeleton-loading/
Full changelog: v1.0.1...v1.1.0
v1.0.1
Patch release: skeletons now stay in the panels that register the plugin, and CI watches for Filament releases that change the markup the package builds on.
Fixes
- Panels without the plugin keep Filament's own loading states. The stylesheet and the
loading-sectionview override used to apply to every panel. Now the stylesheet is loaded on request through the plugin'sSTYLES_AFTERrender hook, the override renders Filament's own view when the current panel does not use the plugin, andHasSkeletonPlaceholderfalls back to Filament's placeholder there.
Improvements
- The test and browser workflows also run weekly, and on demand, against the latest Filament releases.
- Canary tests fail when Filament changes what the package relies on: the lazy placeholder view, its props, or the contents of the table, schema and notifications loading containers.
Documentation
- README opens with the package cover image.
- The documentation site's favicon no longer gets the base path twice.
- API pages describe which panels the stylesheet, view override and trait apply to.
Upgrading
composer update mortalkiller/filament-skeleton-loading, then php artisan filament:assets if your deployment does not already run it. If you relied on skeletons in a panel that does not register SkeletonLoadingPlugin, register the plugin on that panel.
Compatibility
Unchanged: PHP 8.3 to 8.5, Laravel 12 and 13, Filament 4.12.6+ and 5.8.1+.
Full changelog: v1.0.0...v1.0.1
v1.0.0
First stable release.
Skeleton loading states for Filament panels: lazy widgets, lazy sections and deferred tables show the shape of what is coming instead of a grey box or a spinner.
Features
HasSkeletonPlaceholdertrait: typed skeletons for stats overview, chart (bars, line or ring, with the real heading) and table widgets, and for relation managers.- Generic skeleton for every other lazy widget, relation manager or Livewire component.
- Skeleton rows for deferred tables, the database notifications panel and lazy loaded sections.
- Opt-in page loader between pages, shown only when the next page is slower than the delay, with a custom brand symbol and label.
deferTables()plugin option anddefer_tablessetting to defer the panel's tables.- Shimmer that can be turned off and stands still for reduced motion; light and dark mode;
en,pt,pt_PTandpt_BRtranslations.
Compatibility
PHP 8.3 to 8.5, Laravel 12 and 13, Filament 4.12.6+ and 5.8.1+. CI tests the lowest and latest dependency sets of each Filament major, plus browser tests on both majors.