greg0x46/masked-field
Masked Field is a Laravel package for adding input masks to forms, making it easy to format and validate values such as phone numbers, dates, and documents. It offers reusable mask definitions and a clean, framework-friendly API for consistent user input.
Architecture fit. Unchanged. greg0x46/masked-field remains a Nova-only custom field — a Vue component plus a Field subclass. Integration surface is still composer require + MaskedField::make('Phone') in a NovaResource. Not usable for Filament, Livewire/Inertia front ends, or API-only services. Fit remains conditional on already running Nova, still a paid closed-source product.
What v1.2.0 changes. Two of the six open questions from the prior assessment are now substantially answered:
raw option (Q2, largely). The masked-vs-raw persistence question — previously the highest-severity risk in the assessment, because it can silently corrupt stored phone/tax-ID data — now has an explicit, configurable answer. That is a material de-risking, not a cosmetic one.Technical risk. Reduced in severity, not in category.
raw option converts a potential data-corruption failure into a documented configuration choice. Residual risk is that it must be defaulted correctly and verified per field; a permissive default that persists the masked string would reintroduce the original hazard for anyone who does not read the changelog. This is now a configuration-review item, not a blocker.laravel/nova constraint moved to ^5 only, that is a breaking change for existing installs and would need to be treated as a major-version event, not a minor bump. v1.2.0 is a minor semver number; confirm the constraint actually reflects that.imask, maska, Alpine directives) and a 30-line in-repo implementation carries no supply-chain, no upgrade-coupling, and no abandonment risk. The raw option and Nova 5 support make the package better, but they do not make it necessary.Key questions (revised).
raw? Masked or unmasked persistence out of the box? Is the option per-field or global config?raw change the value handed to Laravel validation/rules, or only the stored payload? Server-side rules() compatibility is still the gap between "renders nicely" and "safe to persist."Stack fit. Unchanged: Laravel + Nova only, now including Nova 5. Still a no-op for Filament, Livewire, or headless services. The Nova 5 support widens the addressable case for teams that have already upgraded — for teams on Nova 3/4 the relevant question is now whether they get left behind.
Migration path. Two paths instead of one:
v1.2.0, set raw explicitly on every field, keep the underlying column and validation rules independent of the field so removal is a one-line swap. Reversibility remains the strongest argument in the package's favor.Text field plus maska/Alpine. Unchanged in cost (~0.5–1 day) and now the less attractive option than before only if the team is Nova-heavy and wants format consistency across many resources.Compatibility. This is the release-specific action item. Pin exactly, and record the matrix (Nova major × PHP × Laravel × Vue). Test on the oldest Nova version the team still runs, not just the newest — v1.2.0's headline feature is forward compatibility, and forward compatibility is often bought by dropping backward compatibility.
Sequencing.
composer.json on v1.2.0 and diff against v1.1.1. Determine if Nova 3/4 are still allowed. This single check decides whether the upgrade is trivial or a migration.raw to one low-risk resource, save, and inspect the database column directly. Do not infer behavior from the README.raw defaults to unmasked persistence. Otherwise the in-repo fallback remains the better endpoint.Text field.Maintenance. The delta is real but shallow. An external contributor shipping Nova 5 support and a requested feature is evidence the project is not dead — meaningful, given the prior assessment assumed abandonment risk. It is not evidence of a maintained dependency: no SLA, no CI, no stated support window. We still become the de facto maintainer of last resort, but the probability of needing to fork in the next 12 months is lower than previously assessed.
Support. Unchanged. GitHub issues only; Nova's commercial support does not extend to third-party fields. An admin-panel breakage from a masking field still damages internal-tooling trust disproportionately to the feature's triviality.
Scaling. Unchanged. Runtime cost is negligible. The scaling concern is format consistency across resources and teams, which an unmaintained micro-package does not enforce. The raw option slightly improves governability — a documented, explicit persistence choice beats an implicit one.
Failure modes.
composer update could break every masked field on older Nova. New, and the most likely immediate failure.raw misconfiguration: a permissive or ambiguous default persists formatted strings, breaking validation, deduplication, and search — the original risk, now user-settable rather than intrinsic.Ramp-up. Unchanged and low. One new item: the raw option adds a per-field decision that must be documented as a team convention, or different developers will configure it differently across resources and produce inconsistent data.
Recommendation — revised from "do not adopt" to "adopt conditionally, pending the constraint audit." The prior assessment recommended against adoption primarily on supply-chain and data-semantics grounds. v1.2.0 addresses the semantics risk directly and the compatibility risk partially, with a credible signal of active maintenance. The commodity-functionality argument still stands and should still make a 1-day in-repo implementation the default for a single field. But for a team already committed to Nova 5 across many resources, a pinned v1.2.0 with raw explicitly configured is now defensible where it previously was not. Gate adoption on the Nova 3/4 constraint question and on confirming raw's default; treat the composite score of 0.255 as stale but directionally valid until adoption metrics move.
How can I help you explore Laravel packages today?