nova-kit/nova-queued-export-as-csv
Adds queued CSV exports to Laravel Nova resources, so large datasets export asynchronously through background jobs instead of timing out or blocking the UI. Useful for admin panels needing reliable, scalable data exports.
Architecture fit. The package plugs into Laravel Nova's first-class Action extension point: an export action is registered on a resource's actions() method, and on invocation it dispatches a queued job that materializes the resource index query into CSV and delivers a download link. For teams already running Nova, this is a clean fit — it does not touch the application domain layer, introduces no schema changes, and stays inside Nova's existing permission/action conventions. The queued execution model is the right architecture: CSV generation over large Nova indexes routinely exceeds PHP request timeouts, so moving it to the queue is the correct boundary. The package is not useful outside a Nova install, and Nova is a paid commercial dependency, which is the dominant adoption constraint.
Integration feasibility. High. Installation is a standard Composer require plus a registration line per resource, with configuration limited to a queue connection and a target filesystem disk. There is no service provider surgery, no middleware, and no frontend build step. A Laravel developer familiar with Nova actions can wire this up in hours. The real feasibility question is environmental, not code-level: it presumes a working queue worker and a storage disk with a retention story already in place.
Technical risk.
canSee visibility, and lens/filter context matters — a bulk export is a classic privilege-escalation surface.cursor()/LazyCollection or hydrates an Eloquent collection determines whether memory blows up at 100k+ rows.Key questions.
Stack fit. Targets Laravel + Nova + a queue driver (database, Redis, or SQS) + a filesystem disk (local or S3). It composes with existing stacks rather than displacing them — maatwebsite/excel, custom report controllers, or a data warehouse sync can coexist. The main compatibility checks are the Composer constraint matrix (Nova major version, Laravel 10/11/12, PHP 8.1+) and the queue/storage configuration the job assumes.
Migration path. Additive and low-ceremony. Typically: composer require nova-kit/nova-queued-export-as-csv, add the action class to the target resource's actions(), publish/override config for queue connection and disk. Rollback is removing the action from actions() — no data migration, no orphaned state beyond generated files. There is no meaningful migration from an existing exporter so much as a parallel path: keep the incumbent export in place while the new one is validated on a low-risk resource.
Compatibility. Verify three axes before committing: (1) Nova major version, (2) PHP/Laravel versions, (3) queue driver semantics — serialized action payloads behave differently on database vs Redis vs SQS, particularly around payload size and retry behavior. Confirm the delivery mechanism works with the org's mail/notification infrastructure if it emails links.
Sequencing.
Maintenance. Small surface area — one action class plus a job — so day-to-day upkeep is negligible. The liability is upgrade-adjacent: pin the package version, and re-test on every Nova major bump. Budget for a fork-or-replace contingency; at this popularity level the realistic plan is "we can vendor it in a day if it dies."
Support. No vendor, no SLA, thin documentation. Ownership must be assigned internally to the team that owns Nova. Issues will surface as production support tickets from admins ("my export never arrived") rather than as library bugs.
Scaling. Queue-based execution scales horizontally and decouples export cost from the web request, which is the main win. Watch four things: worker memory on large exports (the deciding factor between "fine" and "OOM at 50k rows"), queue concurrency isolation so a batch of exports doesn't starve transactional jobs, storage growth from accumulated CSVs, and read load from long-running cursor() queries against the primary database. A dedicated queue name for exports is a cheap, worthwhile guard.
Failure modes.
Ramp-up. Hours for a Laravel developer to integrate on one resource; roughly one sprint to operationalize responsibly — queue isolation, storage lifecycle, monitoring on failed jobs, permission validation, and a documented retention policy. The code is easy; the governance around bulk data egress is the actual work.
How can I help you explore Laravel packages today?