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

Nova Date Range Field Laravel Package

marshmallow/nova-date-range-field

marshmallow/nova-date-range-field is a Laravel Nova field that adds a date range picker for selecting start and end dates. It helps manage date ranges in Nova resources, useful for admin forms and filters.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Unchanged in substance: this is a presentation-layer plugin for Laravel Nova, the first-party (Laravel-owned) admin panel. A Nova field is a thin contract — a PHP class extending Laravel\Nova\Fields\Field declaring resolve/fill, plus a Vue component and a compiled asset bundle registered through Nova::script() or the package's service provider. It belongs in the admin surface only and should never be a dependency of domain, API, or reporting code. That keeps blast radius low if the field persists to two ordinary date/datetime columns. If it persists a serialized range into a single JSON or string column, the decision escapes the admin layer and constrains exports, BI, whereBetween reporting, and any future non-Nova UI. The release notes do not touch persistence, so confirming the storage contract remains the single highest-value task before committing.

Integration feasibility. The major feasibility blocker identified previously — Nova 5 compatibility — is now addressed. PR #5 ("added support for nova 5") ships in 5.0.0, so the package is viable on current Nova. The version jump from 1.0.6 to 5.0.0 is the more consequential detail: the maintainer has adopted a numbering scheme that tracks the Nova major (a common convention in the Nova add-on ecosystem). The practical implication is that Nova 4 and Nova 5 are now on divergent major lines, and we must not assume a single release supports both. Mechanically it remains a composer install, provider auto-discovery, asset publish, and one line in fields(). The wiring is hours; the risk sits in tag hygiene and in whether the 5.0.0 branch carries forward the 1.0.6 bugfix and the Vue 3 / Inertia asset pipeline correctly. Note the changelog's compare link is v1.0.6...5.0.0 — inconsistent tag prefixes suggest loose release hygiene, so verify the actual Packagist versions and their composer.json Nova constraints rather than trusting the notes.

Technical risk. Materially improved but still thin on ecosystem signal: 3 stars, 0 dependents, a score of 0.105, single publishing organization (Marshmallow, a Dutch agency with a broad portfolio of small Nova add-ons). Two positive data points now exist where there was previously inference:

  1. Demonstrated Nova-major turnaround. Nova 5 shipped in early 2025; this package's Nova 5 support landed 2025-08-28 — roughly a six-month lag. That is a usable benchmark for planning future Nova upgrades, and better than the "unknown" the prior assessment had to work with.
  2. External contribution and bugfix throughput. PR #2 (Undefined array key) came from @shuvroroy, a first-time contributor outside the agency, and was merged. That is weak but real evidence of a maintained issue queue rather than a dormant repo.

Still absent from the metadata: any declared test suite or CI matrix, any stated Nova/PHP/Laravel support range, and any community canary traffic. The compiled dist/ bundle remains an opaque supply-chain artifact whose reproducibility from the Vue source we cannot confirm. A six-month Nova-major lag is acceptable for an admin field but should be treated as the expected window, not a worst case — plan the Nova upgrade runbook around it. If the host app is still on Nova 4, the risk shifts: 1.0.6 is now a legacy branch, and it is unclear whether the PR #2 bugfix was backported to it.

Key questions to answer before adoption.

  1. What exactly does the field persist — two datetime columns, one JSON column, or a virtual/computed field? (still unanswered; highest priority)
  2. Which Nova majors does 5.0.0 declare, and does it retain any Nova 4 support? Is the constraint a caret range or an exact pin?
  3. Is the 1.0.x line still maintained, and was the Undefined array key fix backported to it? What is the support policy for Nova 4 users?
  4. Do the tags and Packagist versions align with the changelog (v1.0.6 vs 5.0.0 prefix inconsistency)?
  5. Is the Vue source in the repo, and does the committed dist/ build reproducibly from it against the Vue 3 / Inertia pipeline Nova 5 requires?
  6. How are timezones handled on write and display — server tz, app tz, or user tz? Is there DST/off-by-one exposure at day boundaries?
  7. Does the field integrate with Nova filters, sorting, and index/table display, or is it detail-form only?
  8. Is there any automated test coverage, and does CI exercise the current Nova version?
  9. What is the license, and is the package a fork of a more established date-range field?
  10. What is the JS picker dependency chain (flatpickr, Vue datepicker, etc.), and does it drag in a stale transitive dependency, particularly one that is Vue 2-only?
  11. Does the field support validation rules for ordered ranges (end >= start), and is that server-side or client-only?

Integration Approach

Stack fit. The assumed target is a Laravel 10/11/12 application on Nova 5, PHP 8.1+, using the standard Nova resource pattern. Fit is now good on Nova 5, which was previously the open question. Fit remains good on Nova 4 via the 1.0.x line, but with the caveat that it appears to be a frozen branch and should be treated as a short-term bridge rather than a supported platform. Fit degrades sharply if the host app has central-timezone storage conventions the field does not respect, or if range data is already consumed by reporting queries that assume a specific column layout.

Migration path. The three postures are unchanged, with version-pinning guidance added:

  • Direct dependency. composer require marshmallow/nova-date-range-field, publish assets, use the field class directly in resources. Fastest; every call site now names a third-party namespace.
  • Thin local wrapper (recommended). Subclass the field once in application code (App\Nova\Fields\DateRange extends Marshmallow\...\DateRange) and reference only the local class in resources. Swapping packages, forking, or replacing with a hand-rolled pair of Date fields becomes a one-file change with zero resource churn. It also gives a natural place to enforce app-wide timezone and range-validation defaults, and — now that the upstream major version tracks the Nova major — a single place to absorb the next namespace or API shift.
  • Vendor/fork. Copy into the repo or a private VCS. Warranted if the package is abandoned mid-upgrade, if the compiled-asset provenance cannot be established, or if the 1.0.x branch is needed long-term and proves unmaintained. Costs ongoing ownership of the Vue build.

If the existing UI is two separate Nova Date fields, the data model likely already matches what this field wants, making the swap presentational and reversible. If a single-column format is in play, treat it as a schema migration with a backfill and dual-read window, not a UI swap.

Compatibility and sequencing. The Nova 5 constraint is now satisfiable, so this moves from "hard stop" to "verify." Sequence:

  1. Read composer.json at tag 5.0.0, the README, and the Vue source; answer the storage, timezone, and Nova 4/5 support-scope questions. Confirm Packagist tag names match the changelog.
  2. Decide the branch strategy explicitly: Nova 5 host → ^5.0; Nova 4 host → ^1.0 with an eye on the Nova 5 upgrade as the forcing function.
  3. Spike one resource behind a feature branch; confirm asset publishing works under the app's nova:publish/build pipeline and does not collide with app-side asset compilation.
  4. Decide and document the storage contract; if a schema change is needed, ship the migration and backfill separately from the UI change.
  5. Roll out to one low-traffic resource, verify filters, index columns, exports, and API payloads that read the same columns.
  6. Pin the exact version in composer.lock and add a note to the Nova upgrade runbook, including the ~6-month observed lag for Nova-major support as the planning assumption.

Note that a future Nova 6 upgrade becomes a coupled upgrade: Nova and this package must move together, and the admin field will block the Nova bump until upstream ships.

Operational Impact

Maintenance. Low ongoing effort in steady state — a pinned dependency with no runtime services. The 5.0.0 release improves the outlook by demonstrating the maintainer does track Nova majors, which was previously unproven. The real cost remains event-driven: every Nova major triggers a compatibility review gated on the maintainer's responsiveness. Budget a half-day per Nova major plus the observed ~6-month upstream lag in the upgrade plan, with the local wrapper making a revert to two Date fields a contained change. Track the upstream repo for release activity; a 12-month silence on a Nova-adjacent package should be treated as an abandonment signal. Watch specifically whether the 1.0.x branch receives further fixes — silence there while 5.x advances is the leading indicator of an EOL'd Nova 4 path.

Support. Self-supported. The package is small enough that the source is the documentation, which is acceptable for a field of this size, but there is no vendor escalation path for picker edge cases. The merged external bugfix is a mild positive for issue responsiveness. Establish internally who owns the wrapper class and the timezone convention, since both are application-level decisions the package will not make for us.

Scaling impact. Negligible on the server: this is a form input, not a data-processing component. The only scaling-relevant concern is query shape — if range data is filtered with whereBetween in Nova filters or dashboards, ensure the underlying columns are indexed and the range predicate is sargable. Client-side picker performance is irrelevant at any realistic admin concurrency.

Failure modes.

Failure Trigger Blast radius Mitigation
Field stops rendering after Nova upgrade Nova 6 released, package unpatched Resources using the field break Local wrapper; revert path to two Date fields; plan ~6-month lag
Nova 4 line silently frozen Maintainer focuses on 5.x, 1.0.x unmaintained Nova 4 hosts accrue unfixed bugs Treat 1.0.x as a bridge; schedule Nova 5 upgrade; fork if needed
Bugfix not backported PR #2 merged only to 5.x Known Undefined array key defect persists on Nova 4 Verify changelog scope; test the specific failure path
Version/tag confusion Inconsistent tag prefixes (v1.0.6 vs 5.0.0) Wrong version resolved; assets mismatched to Nova major Pin exact tag in composer.lock; verify Packagist
Compiled asset overwritten or missing nova:publish / app build pipeline Field renders blank or stale UI Pin asset tag; document publish step; CI smoke test
Vue 2 asset residue Bundle not rebuilt for Vue 3 / Inertia Field unusable on Nova 5 despite declared support Rebuild from source in the spike; verify in browser
Timezone drift Server/app/user tz mismatch at day boundaries Off-by-one-day range records, wrong reports Explicit tz convention, server-side validation, test at DST edges
Storage mismatch JSON/single-column persistence discovered late Schema rework, downstream query breakage Answer storage question in step 1
Validation gap Client-only range ordering Invalid ranges persisted Enforce end >= start server-side in the FormRequest

Ramp-up. Low: a Laravel developer familiar with Nova understands this field in well under an hour, and the wrapper class keeps the learning curve confined to whoever owns that file. The non-obvious knowledge — timezone convention, the asset publish step, and now the Nova-major-to-package-major version mapping — should be written into the team's Nova conventions doc rather than left in a PR description. Overall this remains a reasonable, cheap, contained bet for an admin-only date range input, and 5.0.0 improves the case by resolving the Nova 5 question and demonstrating Nova-major tracking; the low ecosystem-maturity signal still argues for the wrapper, an exact version pin, and confirming the storage contract before adopting.

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.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin