armincms/json
A Laravel package that simplifies working with JSON data in Eloquent models. Fluent helpers let you read, write, query, and cast JSON columns, making nested structures and dynamic attributes easier to manage throughout your application.
Architecture fit. armincms/json is an admin-surface artifact, not a platform component: a Laravel Nova field that renders a JSON editor bound to an Eloquent attribute, plus a thin set of Eloquent casting helpers for nested keys. It carries no domain logic, no background processing, and no request-path footprint for end users. That is the TPM's central framing — a failure here degrades an internal operator's workflow, not customer traffic. Fit is a hard gate on two conditions: (1) Nova is the sanctioned admin framework in the current and next planning horizon, and (2) the requirement is genuinely arbitrary JSON. If the need is a known schema of a dozen keys, Nova's built-in KeyValue field or a bespoke field wins on maintainability, validation, and permissions at comparable effort.
Integration feasibility. Mechanically a one-line Composer require plus a field declaration in a Nova resource. The friction is version drift: last release 2020-06-18 places it in the Nova 2/3, Laravel 6/7, PHP 7.x era. Nova 4 moved the field layer to Vue 3 and Nova 5 tightened constraints further, so composer why-not armincms/json will likely block resolution on a modern estate — and a forced constraint override can still fail at render time because the Vue component contract changed. With 25 stars and 0 dependents, there is no public evidence of anyone running this against current Nova. We would be first, in production, alone.
Technical risk.
array, json, AsArrayObject) are all unpatched — and will surface as upgrade-time blockers, not steady-state noise.Key questions.
JSON vs TEXT columns — is there double-encoding under an array cast?Stack fit. Assumes Laravel + Eloquent JSON columns + Nova. The write path is the subtle hazard: Nova fields typically set the attribute directly, so an array cast may double-encode while a json cast may mask a malformed payload. Verify in a scratch resource before any real table is touched.
Migration path. Do not take a direct dependency on the vendor package. Two routes, both of which reframe the decision from "adopt an abandoned package" to "vendor a small piece of MIT code":
app/Nova/Fields/ — likely a single class. Cheaper to own, harder to upstream, entirely appropriate at this size.Compatibility. Run composer why-not armincms/json first; that one command decides whether this is a one-hour or one-week task. Then maintain an explicit matrix — Nova N-1/N, PHP 8.1/8.2/8.3, MySQL and PostgreSQL JSON columns, create and update paths — as a tracked artifact, not tribal knowledge.
Sequencing.
KeyValue and a custom field. Arbitrary JSON → proceed to fork; bounded keys → stop and use the built-in.Maintenance. The code is small; the maintenance is entirely ours. With no upstream to absorb Nova 4/5 or PHP 8.x changes, the fork must be explicitly slotted into the platform upgrade cycle. An unowned fork is worse than a dependency: it fails silently during a Nova upgrade and becomes a mid-migration blocker. Fund one owner and a standing line item, or do not adopt.
Support. No vendor, no SLA, no changelog, thin documentation. Support means one internal engineer who has read the field source and the Nova field API. Record that as a named single point of failure in the risk register rather than leaving it implicit.
Scaling. Negligible from a systems standpoint — it is a form control, with no effect on throughput, queue depth, or API latency. The real constraints are human and payload-sized: very large JSON blobs inflate admin page weight and are miserable to edit, and database JSON columns have practical size limits. Neither rejects the package, but both argue for a policy: enforce a size cap and a "one sub-document, not a whole config tree" rule.
Failure modes.
Ramp-up. Low for a Laravel developer: an afternoon to integrate and read the class. The non-obvious cost is fork maintenance — editing a Nova field means touching the Vue component and Nova's front-end build, a narrower skill than backend Laravel and often absent on the team. Plan for one engineer able to own both halves, or accept in writing that the fork will only ever receive backend-side patches and that any front-end break is a stop-the-line event.
TPM recommendation. Do not adopt as a dependency. If JSON editing in Nova is on the roadmap, allocate a bounded effort — days, not weeks — to fork or rebuild the field internally with validation, escaping review, tests, and CI. That converts an unmaintained third-party risk into a small, owned internal asset with a named owner. Scope usage to trusted internal users editing low-risk metadata; keep it away from customer-facing configuration, anything requiring audit trails or field-level permissions, and anything where a silent malformed write would be expensive to unwind. Treat the package as source material in a build-versus-adopt comparison, not as a strategic platform bet.
How can I help you explore Laravel packages today?