A plugin for Filament 5
Fast Filament table repeaters with hundreds of lines
Warp Repeater draws the lines of a table repeater on a canvas instead of sending every field as HTML. The line you hover or type in is made of real Filament fields, so selects, date pickers, validation and actions work exactly as before, and an invoice with 1,000 lines opens in about a second.
An invoice with 300 lines, measured in Chrome
Five fields per line, one of them a select with 200 products. Run the same comparison yourself in the Speed Lab.
- Page load
- 0.3 s native 3.0 s
- HTML downloaded
- 0.29 MB native 27 MB
- DOM nodes
- 809 native 88,175
At 1,000 lines the native repeater runs out of PHP's 256 MB memory limit; Warp Repeater renders it in about 0.6 MB.
One line on the repeater you already have
Fields, table columns, validation, relationships and actions are defined the native way. Warp Repeater only replaces how the lines are drawn, and falls back to Filament's own repeater for layouts it does not draw.
- Same behavior: typing, Tab between lines, searchable selects, date pickers, live() fields, validation, drag-and-drop reordering, clone and delete.
- Same look: every field is rendered by Filament and drawn from its own CSS, including dark mode, compared pixel by pixel with the native repeater.
- Relationships too: works with relationship() and orderColumn() repeaters, in panels and in standalone forms.
Repeater::make('lines')
->relationship()
->table([
TableColumn::make('Product'),
TableColumn::make('Qty'),
TableColumn::make('Unit price'),
])
->schema([
Select::make('product_id')->searchable(),
TextInput::make('quantity')->numeric(),
TextInput::make('unit_price')->prefix('$'),
])
->warp();
Beyond the native repeater
Sticky header
Keep the header row in view while the page scrolls, also inside modals and slide-overs. Add ->warpStickyHeader().
Multi-level rows
Show each item on two or more lines with a multi-level header and merged cells, like a ledger. Add ->warpMultiLevel().
Column summaries
Sums, averages, minimums, maximums and counts under the columns, updated as you type. Add ->warpSummary() to a field.
Spreadsheet editing
Enter and arrow keys, rows pasted from Excel or Google Sheets, range copy and fill down with Ctrl/Cmd+D. Add ->warpSpreadsheet().
Unsaved changes
Marks on the cells and lines changed since the last save, with the number of changed, new and removed lines. Add ->warpChangeMarks().
Search
Find text in every line, including the ones drawn on the canvas that the browser's find cannot see. Add ->warpSearch().
Sorting and filters
Sort the lines from the column headers and filter them by value, like a spreadsheet, without changing the saved order. Add ->warpSorting()->warpFilters().
Line numbers
A first column with the number of each line, following reordering, cloning and deleting. Add ->warpRowNumbers().
Fixed height
Scroll the lines inside the repeater while the header, the totals and the Save button stay in place. Add ->warpHeight(480).
Wide tables and frozen columns
Scroll twelve columns sideways while the first ones stay in view. Add ->warpTableWidth(1900)->warpFrozenColumns(1).
1,000 lines and more
Long invoices, price lists and time sheets that the native repeater cannot render, edited like any other form.
Pricing
Install with Composer using your email and license key. Every version released during your update period stays yours.
Single Project
$49
1 year of updates
One project that is not a SaaS, in all of its environments.
Buy Single ProjectUnlimited Projects
$99
1 year of updates
Any number of projects, including SaaS applications.
Buy Unlimited ProjectsHear about new releases
An email when a new version of Warp Repeater ships. Nothing else, and you can unsubscribe at any time.
Thanks! You're on the list.