alperenersoy/filament-export
Filament Export lets you add Excel and CSV export buttons to Filament resources and tables. Customize columns, formatting, and file names, and filter which records are exported, so admins can download data straight from the panel.
Architecture fit. This is a Filament panel plugin, not a general-purpose export library. It registers actions into Filament's table/resource layer and renders export and print output through Blade views. That makes it a strong fit for exactly one scenario: an internal back-office admin panel already built on Filament, where operations staff need ad-hoc CSV/XLSX/PDF extracts and printable record views. It is a poor fit as a customer-facing export or reporting mechanism — the abstraction is a UI action, not a data pipeline, so there is no scheduling, delivery, or downstream contract to build on.
Integration feasibility. Mechanically low-effort: composer require, register the plugin in the PanelProvider, optionally publish config and views, then attach the export action and bulk action to the relevant tables. A competent Filament developer should reach a working pilot on one resource in one to two days. The real work is not installation — it is verifying authorization semantics and behavior at production data volumes.
Technical risk.
Key questions.
getEloquentQuery(), and therefore honor tenant scoping and policies?maatwebsite/excel, dompdf, wkhtmltopdf? Do any require a system binary?Stack fit. Assumes Laravel 10–12, PHP 8.1+, and a Filament panel as the admin surface. Database-agnostic in practice, but export memory behavior differs materially between MySQL and Postgres on wide tables with joins. If the application's admin is not Filament, stop here — there is no partial-adoption path.
Migration path. No schema or data migration is required, which is the package's main political advantage: it is a stateless UI-layer addition that can be trialed and removed without residue. If it replaces an existing export tool (raw SQL reports, a legacy PhpSpreadsheet script, manual DB access), the migration work is in report definition parity — column sets, header labels, locale-specific formatting, date and currency rendering — not in data movement. Enumerate the existing ad-hoc exports before starting, or you will discover them one support ticket at a time.
Compatibility. Pin the package version explicitly and lock it against the Filament major in use. Verify asset registration: Filament v3+ has its own asset pipeline and Tailwind scoping, and published views that assume older markup will render incorrectly. Confirm the PDF engine's system dependencies are present in every environment, including CI and any container image — a missing binary is a runtime failure, not a build failure, so it will surface in production first.
Sequencing.
Maintenance. This becomes a dependency you own, not one you consume. Budget a named internal owner and an explicit fork-and-patch contingency: shallow clone, patch, and point Composer at a VCS repository. Track Filament release notes and re-test the plugin on every major and minor bump; the coupling to table internals means minor releases are not automatically safe. Realistic ongoing cost is low single-digit engineering days per year — until a Filament major lands, at which point it is a project.
Support. Community-only. GitHub issues, no SLA, no vendor to escalate to. Do not place this on a path where a broken export blocks a regulatory deadline, month-end close, or customer commitment. Where export is business-critical, wrap it behind an internal service class so you can swap the implementation without touching call sites.
Scaling. The scaling axis is not request volume — it is dataset size and concurrency per export. Exports are bursty and correlated with business calendar events (month-end, quarter-end, audits), which is exactly when synchronous, in-memory generation fails. Mitigations: cap rows per export with a clear user-facing message, force large exports through a queue with notification-on-completion, rate-limit per user, and schedule heavy extracts off-peak. Each of these may require wrapping or replacing the package's default action behavior — verify extensibility before committing.
Failure modes.
Ramp-up. Low for developers already fluent in Filament — the mental model is "add an action to a table." Higher for everyone else: the README-level documentation typical of single-maintainer packages will not explain the authorization or performance semantics, so the internal write-up you produce during the pilot is the actual onboarding artifact. Plan for that documentation cost explicitly; it is the difference between a one-off integration and a reusable capability.
How can I help you explore Laravel packages today?