masoudi/nova-progress-field
A Laravel Nova field for displaying progress bars directly in your resource forms and detail views. Render percentage-based progress with a clean, customizable bar, ideal for tracking completion, goals, or any numeric value inside Nova.
Architecture fit
The package is a Laravel Nova custom field: a PHP field class extending Laravel\Nova\Fields\Field paired with a compiled Vue component registered through Nova's asset pipeline. It is a presentation-layer artifact, not a domain or infrastructure dependency. It does not touch models, migrations, queues, or persistence, and it introduces no runtime coupling beyond the Nova field registry.
That narrow surface area is the package's only genuine architectural strength. It is a leaf node in the dependency graph — safe to isolate, safe to remove, and incapable of cascading into application logic. If the team already runs Nova, the conceptual fit is clean: a progress bar is a first-class Nova use case (task completion, quota consumption, upload state, budget burn-down).
The fit degrades sharply on everything else:
Integration feasibility
Mechanically trivial. composer require masoudi/nova-progress-field, then reference the field in a resource's fields() method. No configuration, no migrations, no published assets beyond Nova's standard nova:publish. A single developer can wire it up in under an hour.
The blocker is not effort, it is provenance. The repository is archived, carries 1 star, 0 dependents, and its last release is 2022-08-26. Archival is an explicit maintainer statement that the package will not receive fixes — including fixes for Nova 4/5 compatibility, PHP 8.2/8.3 deprecations, or Vue 3 build breakage. Combined with a composite score of 0.0025, the package should be treated as reference source code, not a dependency.
Technical risk
value/max, or a 0–100 integer), malformed input likely yields a broken bar or a thrown exception rather than graceful degradation.Key questions
Stack fit
Appropriate only for teams already on Laravel Nova with a Nova 3-era stack. On Nova 4 or 5, assume the package will not work out of the box and budget for a rewrite. If the team is not on Nova, this package is irrelevant — a plain Blade component or a Tailwind progress bar covers the same need with zero dependency.
Migration path
Do not install as a Composer dependency. Instead:
app/Nova/Fields/ProgressBar.php and resources/js/nova/components/ProgressBar.vue). This converts an abandoned third-party dependency into first-party code under our control — eliminating supply-chain, archival, and abandonment risk in one step.php artisan nova:field).resolve/displayUsing) into a bounded 0–100 integer, clamp out-of-range values, and define behavior for null. Emit a neutral/empty state rather than throwing.This preserves the 100% of the package's value (a small render component) while discarding 100% of its risk.
Compatibility
Verify explicitly before any work: Nova version, PHP version, Vue version, Node/build toolchain, and whether Nova's asset compilation is used or overridden. The PHP side is near-certainly fine on modern PHP after a deprecation pass; the Vue side is the actual work.
Sequencing
nova:field scaffolding is often faster than adapting unfamiliar archived code.Maintenance
Ownership transfers entirely to the adopting team. As a Composer dependency: indefinite, unbounded maintenance debt with no upstream. As vendored source: a small, self-owned component with a maintenance cost measured in hours per Nova major upgrade — acceptable and plannable. The vendored path is the only defensible operating model.
Support
None available. Archived repository, no maintainer response, no issue tracker activity, no community of adopters (0 dependents). Internal escalation path is "read the code" — which is viable precisely because the codebase is tiny. This must be stated explicitly in the adoption record so no one assumes upstream support exists.
Scaling
Operationally negligible. The field renders per-row in Nova index views; cost is bounded by Nova's pagination. No queries, no I/O, no caching concerns. At large result sets the constraint is Nova's own table rendering, not this component. There is no scaling dimension on which this package becomes a bottleneck.
Failure modes
Ramp-up
Near-zero for any developer comfortable with Laravel and Nova. The PHP field is a standard Nova field class; the Vue component is a small presentational component. A mid-level Laravel developer can read, understand, and modify the entire codebase in under two hours. The real ramp-up cost is not the code — it is Nova-specific knowledge (field registration, asset compilation, resolve/displayUsing semantics), which the team needs regardless of whether this package is used.
TPM recommendation: Adopt the pattern, not the dependency. Reimplement or vendor the field under first-party ownership, document it in the internal Nova component library, and record the decision to avoid archived packages in the admin panel as a standing dependency policy.
How can I help you explore Laravel packages today?