Skip to content
Packstub

Filament Spreadsheet

Filament Spreadsheet

An inline-editable table for bulk editing Eloquent records in Filament v4 (4.13+) and v5. A sheet page for any resource: edit cells with the keyboard, paste rows from Excel or Google Sheets, fill down, undo, and press Save once; the server validates every cell with your rules, checks your policies row by row, detects conflicts and writes the batch in one transaction. Free and open source (MIT), built on Tabulator (MIT).

Features

Guides

Guide What it covers
Installation Requirements, the package, the config file, the plugin
Your first sheet A resource page, the SheetAction, what the query decides
Columns Every column type and option, relationships, computed values, read-only cells, rules
Editing The keyboard map, paste from Excel or Sheets, fill-down, undo
Saving The batch, errors on cells, conflicts, all-or-nothing versus per-row
Adding and deleting rows New rows with defaults, deletions, what the policy gates
Search, sort, filters, pagination The toolbar, unsaved changes across pages
Authorization Policies, closures, read-only mode, greyed rows
Tenancy Resource pages in a tenant panel, standalone pages
Events and hooks RowsSaved, RowSaveFailed, beforeSave(), afterSave(), mutateRowBeforeSave()
A sheet outside a resource SpreadsheetPage and the trait in any Livewire component
Styling The CSS variables, dark mode, RTL, translations
Performance Page sizes, thousands of rows, what is queried when
Editable columns vs a sheet When to use which, and the neighbours: import, export, a Sheets-like document
Upgrading Version notes

At a glance

composer require packstub/filament-spreadsheet
php artisan filament:assets
use Packstub\Spreadsheet\Columns\NumberColumn;
use Packstub\Spreadsheet\Columns\SelectColumn;
use Packstub\Spreadsheet\Columns\TextColumn;
use Packstub\Spreadsheet\Pages\SpreadsheetResourcePage;
use Packstub\Spreadsheet\Spreadsheet;

class ProductsSheet extends SpreadsheetResourcePage
{
    protected static string $resource = ProductResource::class;

    public function spreadsheet(Spreadsheet $spreadsheet): Spreadsheet
    {
        return $spreadsheet
            ->columns([
                TextColumn::make('sku')->rules(['required', 'unique:products,sku'])->frozen(),
                TextColumn::make('name')->rules(['required']),
                SelectColumn::make('category_id')->relationship('category', 'name'),
                NumberColumn::make('price')->decimals(2)->min(0),
            ])
            ->searchable(['sku', 'name'])
            ->creatable()
            ->deletable();
    }
}

Requirements

PHP 8.3+, Laravel 12 or 13, Filament 4.13+ or 5.


These pages are published at packstub.dev/docs/filament-spreadsheet from the package's docs/ directory. Spotted a mistake? Open a pull request.