jagdeepbanga/nova-date-time
jagdeepbanga/nova-date-time provides a simple date and time field for Laravel Nova, making it easy to add date/time selection to resource forms and manage datetime attributes in your admin panel.
Architecture fit. This is not a general Laravel package — it is a Nova field extension. It contributes a PHP field class extending Laravel\Nova\Fields\Field plus a compiled Vue component registered through Nova::booting(...) and Nova's asset pipeline (Nova::script() / Nova::style()). That means it has zero utility outside Laravel Nova, and Nova is a commercial, closed-source product with its own release cadence and per-site licensing. The architectural dependency chain is therefore: our app → Laravel → Nova (paid, versioned) → this package (unmaintained). We are three links deep on a 5-star, 0-dependent artifact.
Integration feasibility. Mechanically simple — composer require plus a field class in a Nova resource. The real feasibility question is version alignment. Last release was 2020-09-28, which places it in the Nova 3.x era. Nova 4 (2022) was a ground-up rebuild — Inertia.js, Tailwind 3, Vue 3 — and changed the Nova.booting signature and the field-component contract. Packages written for Nova 1–3 generally do not load on Nova 4+ without a rewrite. Assume broken on current Nova until a spike proves otherwise.
Technical risk.
DateTime, Date, and Time fields since 2.x/3.x. The differentiator was picker UX (range selection, seconds, min/max, week start, locale) — a narrowing gap with each Nova release.Key questions.
DateTime lack for us — seconds, ranges, timezone display, min/max, locale/week-start? Can we get there with ->withMeta() on the native field?Stack fit. Zero value without Nova; marginal cost near zero if Nova is already licensed. Treat the adoption decision as "Nova field UX decision," not "package decision."
Compatibility.
| Dimension | Assessment |
|---|---|
| Laravel | Likely fine (field classes are thin) |
| Nova 1–3 | Plausible, unverified |
| Nova 4–5 | Very likely broken (Vue 3 / boot API) |
| PHP 8.2+ | Untested by upstream; class is trivial, likely OK |
| Node/Vite asset build | Stale toolchain, needs rebuild regardless |
Migration path. Do not install directly. Recommended path:
withMeta, (b) vendor the MIT-licensed Vue SFC and PHP class into our own first-party Nova asset bundle and rebuild against current Vue, or (c) build a thin custom field from scratch (~2–3 dev-days).vendor/, so composer update cannot silently drop it. Add a smoke test asserting the field renders and persists.Sequencing. Gap analysis and the compatibility spike gate everything else and should run in parallel — the spike is cheap insurance against a long gap-analysis cycle on a feature we can't actually ship. Only after both pass does a build/fork estimate make sense.
Maintenance. Treat as abandoned upstream. If adopted, we own it fully: fork, vendor, and budget roughly 1–2 dev-days per Nova upgrade cycle (Nova ships majors roughly every 18–24 months). Without adoption, ongoing cost is zero.
Support. None. No maintainer responsiveness assumed, no security disclosure channel, no backport path. Internal escalation must terminate at our own team.
Scaling. Negligible. It's a form-control component on admin screens — no runtime hot path, no query impact, no concurrency concerns. Risk is correctness, not throughput.
Failure modes (ranked by severity):
->rules('required') guard on critical fields.Ramp-up. Low to read (~1 hour: one PHP class, one Vue SFC), moderate to safely own — Nova's internals are closed-source, so debugging a broken field means reverse-engineering undocumented contracts. Any fork should be accompanied by a short internal README covering the Nova version it targets and the upgrade checklist.
Bottom line. Score 0.285 with opportunity 35.71 reads correctly: a real but modest UX gap served by a weak, unmaintained vehicle. Do not adopt as a dependency. Validate the gap against native Nova fields first; if it's real, vendor the MIT code or build a ~3-day internal field so we own the Nova-version contract.
How can I help you explore Laravel packages today?