Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Nova Excel Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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

  • It is a thin adapter, not a subsystem: a Nova Action (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.
  • Fits naturally because it reuses primitives the app already has: the Nova resource query, Nova's per-action authorization (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.
  • Hard prerequisite: a paid Laravel Nova license and an existing Nova admin. If Nova is not already in the stack, this package is irrelevant — the decision is really "do we run Nova," and exports are a minor rider on that decision.
  • It is explicitly not a fit for scheduled/recurring reports, cross-model joins, multi-sheet workbooks with business logic, or delivery to external recipients. Those need a purpose-built export/job layer.

Integration feasibility

  • Very high. composer require maatwebsite/laravel-nova-excel, add new DownloadExcel to actions(), done. Configuration is fluent and per-resource (withFilename, only(), allFields(), withDisk).
  • Blast radius is contained to Nova resource classes, which makes it cheap to pilot, cheap to reverse, and cheap to run on one resource while leaving others untouched.
  • Two live major lines complicate selection: 1.3.x on Laravel Excel 3.x (still receiving CVE bumps, broadest Nova 4/5 coverage) and 2.0.x on Laravel Excel 4.0 (released 2026-08, already at 2.0.2). The 2.0.x line is young; the 1.3.x line is proven but trails the newer dependency.

Technical risk

  • Nova-internal coupling is the dominant risk. The release history is a sequence of break-fix patches tracking Nova releases (1.3.2, 1.3.3, 1.3.4, and 1.3.12 "fix incompatibility with Nova 5.6.2"). Every Nova upgrade is a regression-test event for exports.
  • Queued exports are the weakest advertised feature. Queueing was deprecated in 1.2.0 citing serialization issues that "cannot be solved without rewrite," then re-enabled in 1.2.2. Filters and lens queries are serialized into job payloads via laravie/serialize-queries. Treat queued exports as beta and validate them explicitly with your actual filters and lenses.
  • Transitive CVE surface. 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.
  • Ecosystem signal is thin. 401 stars, zero tracked dependents, single-vendor maintainer with community PRs, MIT + postcardware (a request, not an obligation). No commercial SLA, no escalation path.
  • Exfiltration primitive. An export button turns any Nova screen into a bulk data-download endpoint. This is the risk that needs a product decision, not an engineering one.

Key questions to resolve before committing

  1. Which Nova version and Laravel/PHP baseline are we on, and can we pin Nova for the duration of the rollout?
  2. Does anything else in the app already depend on Laravel Excel 3.x? If so, 2.0.x forces an app-wide v3→v4 upgrade.
  3. Who is allowed to export which resources and which columns — and is there any PII/column-level authorization requirement that Nova policies alone don't satisfy?
  4. What is the realistic max row count per export, and is that expected to run synchronously in a web request?
  5. Do we need an audit trail (who exported what, when, how many rows)? The package provides none.
  6. Are exports expected to become a business-critical workflow? If yes, the support model is wrong and we should own a fork or build in-house.

Integration Approach

Stack fit

  • Requires: Laravel app + Laravel Nova 4 or 5, PHP 8.x, a working queue (Redis/SQS/database) if queueing is used, and a storage disk — local, or S3/remote for Vapor/multi-server setups (supported since 1.2.7).
  • Verify the app's 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

  • No data migration. Greenfield additions are additive; brownfield adopters should run this alongside existing bespoke exporters and retire them resource by resource, so there is always a known-good fallback.
  • Rollback is clean: remove the action from 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

  1. Spike (1–2 days): one low-risk resource, one filter, one lens, both CSV and XLSX, synchronous and queued. Confirm column output matches Nova display for computed/relationship fields.
  2. Policy: enumerate exportable resources, default column sets, and role gating. Decide PII exclusions up front.
  3. Guardrails: row cap per export, memory/max_execution_time review, dedicated queue for exports, timeout and failure surfacing.
  4. Pilot to one team, then roll out resource by resource with the same pattern.
  5. Instrument: log export invocations (user, resource, row count, format) even if the package doesn't.
  6. Document: a short runbook covering version pinning, Nova upgrade checklist, and the "export hung/failed" path.

Operational Impact

Maintenance

  • Low volume, non-zero: expect a small break-fix cycle with each Nova upgrade plus periodic dependency bumps. Budget roughly one engineer-day per Nova release for export regression testing, and pin exact versions rather than floating constraints.
  • Add automated dependency alerts on maatwebsite/excel and phpoffice/phpspreadsheet given the CVE history, and re-test exports after any bump.

Support

  • Community-only: GitHub issues, no SLA, postcardware licensing with no contractual obligation from Spartner. Acceptable for a convenience feature; unacceptable if exports become part of a customer commitment. If that happens, the exit is a small in-house Action wrapping Laravel Excel directly — the surface area to reimplement is genuinely small.

Scaling

  • Chunking controls memory, not wall-clock time. A synchronous export of tens of thousands of rows will still hit PHP/proxy timeouts and tie up a web worker; the UI will simply fail.
  • Queued exports move the cost to workers, but introduce serialization fragility and backlog risk. Use a dedicated queue so a 200k-row export cannot starve transactional jobs, and prefer CSV over XLSX at volume — XLSX generation is materially more CPU- and memory-intensive.
  • Exports contend with the primary database; a wide 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

  • Timeout or memory exhaustion mid-request → truncated download or opaque 500. Mitigate with row caps and queueing.
  • Queued job serialization failure when a filter or lens payload contains unserializable state → silent non-delivery.
  • Column drift: a renamed or added Nova field silently changes export shape, breaking downstream spreadsheet consumers. Version your export contracts or freeze column sets.
  • Authorization drift: the action visible to a role that shouldn't have bulk data access. Gate at the policy level and re-verify on every Nova permission change.
  • Audit gap: no record of who exported what. Add logging if exports touch regulated data.
  • Storage misconfiguration on Vapor/multi-server → file written to a node-local disk and the signed download 404s.

Ramp-up

  • For a Laravel developer: under half a day to a first working export; the docs site is dedicated and reasonably complete.
  • For the organization: the real cost is the policy, guardrail, and audit work in steps 2–5 above — call it one to two weeks end-to-end for a multi-resource rollout with gating and logging.
  • For end users: near-zero. It's a Nova action button with a modal; no training required.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log
hsluv/hsluv
seampact/codegen
seampact/hooks
seampact/ir
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table