maatwebsite/laravel-nova-excel
Export Laravel Nova resources, lenses, and filtered selections directly to Excel or CSV with automatic chunking, queued exports, and filter-aware queries for fast, scalable exports.
Verdict: Adopt as a scoped convenience layer for internal Nova back-office exports — not as a reporting, ETL, or customer-facing data-delivery mechanism. It buys real developer time (a per-resource export button in ~one line of code) at the cost of a thin, externally maintained dependency that is tightly coupled to Nova internals.
Architecture fit
DownloadExcel) that hands a query to maatwebsite/excel, which handles chunking, CSV/XLSX writing, and disk delivery. No schema changes, no new services, no data store.authorizedToSee/policy), existing filters, and lens queries. That means export row scope matches on-screen scope by construction — the single biggest correctness win versus a homegrown exporter.Integration feasibility
composer require maatwebsite/laravel-nova-excel, add new DownloadExcel to actions(), done. Configuration is fluent and per-resource (withFilename, only(), allFields(), withDisk).Technical risk
laravie/serialize-queries. Treat queued exports as beta and validate them explicitly with your actual filters and lenses.maatwebsite/excel and PhpSpreadsheet parse and generate untrusted-adjacent files; two releases (1.3.9/1.3.10) exist purely to pull CVE fixes. Lockfile hygiene is mandatory.Key questions to resolve before committing
Stack fit
composer.json for existing maatwebsite/excel or phpoffice/phpspreadsheet constraints first; that constraint, not the Nova plugin, determines which major line is available.Migration path
actions(), composer remove. Nothing persists except any exports written to a disk.Compatibility matrix to confirm in a spike
| Dimension | Decision point |
|---|---|
| Nova 4 | 1.3.x |
| Nova 5 | 1.3.11+ (1.3.12/1.3.13 for 5.6.2-era fixes) or 2.0.x |
| Laravel 11 | 1.3.7+ |
| Laravel Excel 3 vs 4 | Determines 1.3.x vs 2.0.x, and whether other app code must be upgraded |
| PHP / PhpSpreadsheet | Must satisfy the locked transitive version |
Sequencing
max_execution_time review, dedicated queue for exports, timeout and failure surfacing.Maintenance
maatwebsite/excel and phpoffice/phpspreadsheet given the CVE history, and re-test exports after any bump.Support
Scaling
allFields() export across a large table is effectively an unbounded scan. Cap rows and default to explicit column sets rather than allFields().Failure modes to design for
Ramp-up
How can I help you explore Laravel packages today?