simonhamp/laravel-nova-csv-import
A Laravel Nova package that adds CSV import support to your resources. Upload a CSV, map columns to model fields, validate rows, and import records directly from Nova with progress feedback and customizable import logic.
Architecture fit. Unchanged by this release. The package remains a Nova-native CSV importer: you subclass a provided import action, declare the target Eloquent model and the fields exposed to the mapping UI, register the action on a Nova resource, and end users upload a CSV and map columns to attributes in the Nova UI. It is a thin orchestration layer over Laravel's Eloquent/validation stack plus a CSV parser (league/csv family), not a standalone import engine. That makes it an excellent fit only if Nova is already the system of record for admin operations. The hard dependency on Nova — a paid, closed-source product — remains the defining architectural constraint: the package inherits Nova's version cadence, its authorization model, and its request lifecycle, and it cannot be reused for headless imports, API-driven ingestion, or queue-only workers without reimplementation.
Integration feasibility. Low effort, and marginally lower than before. Composer install, publish assets/config, one Action class per importable model, register on the resource. A Laravel developer familiar with Nova should have a working pilot in under a day. Two things improve the picture in v0.8.0: Nova 5 is now an explicitly supported target (previously an open compatibility risk), and the addition of Workbench (orchestra/workbench, PR #77, from a Laravel core contributor) gives the package a standard, modern package-testing harness. That second point matters for feasibility more than it first appears — it means the "fork it if we have to" fallback is now materially cheaper, because there is a working harness to test a fork against rather than a bespoke ad-hoc test setup. The real cost is still not wiring — it is defining the field allowlist, validation rules, and failure semantics around it.
Technical risk.
0.8.0), 0 Packagist dependents. The recent release is a positive maintenance signal, and v0.8.0 adds two new contributors including one from the Nova ecosystem, which is a mild improvement in contributor breadth. But both PRs in this release are compatibility/tooling work, not evidence of a sustained contributor base. Treat it as "adopt with a fork option," not "adopt and forget." Note: 0.x semver means minor releases may contain breaking changes — pin exactly or with a tight constraint.max_execution_time, and gateway timeouts. v0.8.0 does not address chunked/queued execution. Confirm whether it is supported or must be added.storage/. CSV formula injection is an export concern, but type coercion and encoding issues are import concerns.Key questions to resolve before commitment.
Stack fit. Laravel 10–12, PHP 8.1+, Nova 4 or 5, standard Composer workflow. Fits cleanly into an existing Nova admin surface with no new infrastructure. It does not fit if your ingestion needs to be event-driven, multi-tenant-isolated, or run outside an authenticated Nova session.
Migration path. Unchanged in shape, but a new option is now available: v0.8.0 makes Nova 4 → Nova 5 upgrades viable, so teams blocked on Nova 5 solely by this package are unblocked. Position the package as a replacement for spreadsheet-plus-manual-entry operations or a bespoke one-off importer, not as a replacement for a data pipeline. Keep an artisan command or queued job as the fallback path for large or scheduled imports; the Nova action becomes the human-in-the-loop tool for ad-hoc, moderate-volume loads.
Compatibility. v0.8.0 is a compatibility release, so the pinning discipline gets more important, not less: pin to ~0.8.0 (not ^0.8 if you want to avoid surprise minor-version breaks under 0.x). Add a CI job that runs the import smoke test against any Nova or Laravel version you intend to upgrade to. Watch transitive constraints on the CSV parser and Laravel's validation components. The Workbench integration gives you a better starting point for writing that smoke test — use it.
Sequencing.
Maintenance. Small surface area and MIT licensing keep ongoing cost low, and v0.8.0 lowers the cost of the fork contingency thanks to the Workbench test harness. Ownership must still be explicit: assign an internal maintainer with a standing budget to fork and patch. Budget a fork within 18–24 months; the most likely trigger remains a Nova major release, and the Nova 5 event just demonstrated that trigger is real rather than theoretical — it simply happened before you adopted.
Support. GitHub issues only; no commercial support, no response-time expectation. v0.8.0 shows the project responds to compatibility pressure (and that outside contributors will step up for Nova support specifically), but that is goodwill, not an SLA. Escalation path is "we fix it." Acceptable for an internal admin convenience tool, unacceptable for anything customer-facing or revenue-critical.
Scaling. Unchanged — and untouched by this release. Synchronous request-bound execution is the ceiling. Practical throughput depends on row width and validation complexity; expect low thousands of rows to be comfortable and tens of thousands to require chunking/queueing. Concurrent imports by multiple admins will contend on the database — no built-in coordination.
Failure modes to instrument and test.
Ramp-up. Developer ramp-up is a few hours: the "define an Action" pattern is idiomatic Nova, and the Workbench harness means a developer can bring up a test environment quickly. End-user ramp-up is the larger cost — the mapping UI is approachable, but users need a documented column contract per import type and clear guidance that a failed import may have partially applied. Pair the rollout with a short runbook and a "check row count before/after" habit.
TPM verdict. Marginally upgraded from the prior assessment. Nova 5 compatibility removes the single most likely near-term blocking issue, and the Workbench integration reduces fork cost and improves the odds that future Nova breakage is caught by a test rather than by an operator at 5pm. The core posture is unchanged: high leverage, narrow blast radius, cheap to trial, good fit as an internal ops tool on an existing Nova installation. The gate is still dependency posture — paid closed-source upstream, single maintainer, pre-1.0 API, no support contract — and none of the operational gaps (synchronous execution, no dry-run, no idempotency, no audit trail) were addressed by this release. Approve as a scoped pilot with a documented fork contingency and exact version pinning; do not approve as a load-bearing path for regulated, financial, or customer-facing data ingestion.
How can I help you explore Laravel packages today?