Behavior Changes
These are intentional fixes, but they change existing behavior. Review them before upgrading.
- PostgreSQL string filters are now case-insensitive. The wildcard string filters (
contains,notContains,startsWith,notStartsWith,endsWith,notEndsWith) now useilikeon PostgreSQL instead oflike, matching the search box. Queries that previously relied on case-sensitive filtering will return more rows. No other driver is affected — PostgreSQL is the only supported driver whoselikeis case-sensitive by default. resources/views/components/table/th/bulk-actions.blade.phpchanged. The "select all" header checkbox now routes through the AlpinesetAllSelected()method sosetDelaySelectAllEnabled()is honoured, and readspaginationTotalSelectableItemCountinstead ofpaginationTotalItemCount. If you published this view, your copy is unaffected by the upgrade and will keep the old behavior — re-publish it or merge the change by hand to pick up the fix.
New Features
- Laravel 13 support by @rappa819 in #2332
- Icon support on
WireLinkColumnviasetIcon(),setIconLeft()/setIconRight(), andsetIconAttributes()by @shynne109 in #2316 setBulkActionsRowFilter()excludes rows from bulk actions — filtered rows get no checkbox and are left out of "select all" by @RazvanDrelciuc in #2303- The filter button and its badge are now stylable through configuration by @HussamAlhennawi in #2182
Bug Fixes
- DateColumn no longer blanks out
immutable_date/immutable_datetimecasts —CarbonImmutableis now formatted directly instead of being coerced to a string and re-parsed by @rappa819 in #2332 - Search is now case-insensitive on PostgreSQL, which uses
ilikeinstead oflike— originally reported and fixed by @ARL-Steve in #2284, landed via #2332 - The wildcard string filters now use
ilikeon PostgreSQL too, extending @ARL-Steve's fix in #2284 tocontains,notContains,startsWith,notStartsWith,endsWith, andnotEndsWith - The "select all" header checkbox now routes through Alpine, so
setDelaySelectAllEnabled()is honoured instead of every row being fetched immediately by @matberry in #2122 - Cursor pagination now honours
setShouldRetrieveTotalItemCountDisabled()— avoiding thecount()is the point of cursor pagination, but the toggle was only checked for simple pagination by @mattusik in #2231 - Bulk action checkboxes now have accessible names — every one of them was previously announced by screen readers as a bare "checkbox" by @belkri in #2300
- Livewire lazy loading no longer throws Alpine
ReferenceErrors by @shynne109 in #2320 - Aggregate subqueries are skipped for deselected columns when
setExcludeDeselectedColumnsFromQuery()is on by @glamax13 in #2278 - The Tailwind per-page dropdown is aligned with the column-select beside it by @inforisorse in #2209
- 22 of 24 locales rendered the literal string
cancelon the reorder toolbar — seven missing keys (cancel,loading,save,min,max,Bulk Actions Confirm,Select All On Page) are now filled across all 23 affected locale files - The Bootstrap search input no longer applies
form-controlon Tailwind whengetSearchFieldAttributes()omits thedefaultkey —??binds looser than&&, so the condition parsed the wrong way - Prevent InvalidCharacterError by correctly rendering x-cloak attribute by @pascalberski in #2266
- Key the x-cloak for TableAttributes by @lrljoe in #2271
- Change w-100 to w-auto for Bootstrap Bulk Actions Menu and ColumnSelect by @lrljoe in #2270
Tweaks
- Pin Livewire to
^3.0, dropping thedev-mainconstraint that pulled in Livewire 4 by @rappa819 in #2332 - Restore CI: run the test suite across Laravel 10–13, add the localisation unit tests to the unit suite, and remove the stale bot by @rappa819 in #2332
- Indonesian translations for Cancel, Bulk Actions Confirm, and Select All On Page by @ilsyaa in #2279
- Document the plain BooleanFilter form by @Muetze42 in #2286
- Run the localisation presence suite in CI, so a missing translation key fails the build
- Guard that every pagination
<button>carriestype="button"— an untyped button submits the surrounding form