movex-ukraine/secure-array-files
A PHP package for securely storing arrays in files. It persists array data to disk while guarding against unsafe unserialization, offering Laravel apps a simple file-backed alternative to databases or caches for configuration and small datasets.
This is a Laravel Nova custom field package (v1.0.0) that stores uploaded files as an array of objects on a model attribute and exposes a download endpoint that streams files back from a response. It is a narrow, single-purpose UI/storage component rather than a general file-management library.
Architecture fit: Fits only within the Laravel + Nova stack, and Nova is a commercial product requiring a paid license and a matching major version. The field's storage model (serializing files into array/JSON objects on the record) diverges from Laravel's native filesystem abstraction (Storage, disks, HasMedia/Mediable patterns). This creates a parallel persistence path that teams must reason about separately from their normal file handling. "Secure save" implies encryption or access control, but the release note does not substantiate the mechanism, so the security posture is unverified.
Integration feasibility: Straightforward for an existing Nova shop: composer require, register the field in NovaServiceProvider, and attach it to a resource. The main friction is that the array-of-objects storage shape must align with how the consuming model expects to read files back, and the download behavior is coupled to the field rather than exposed as a reusable route/service. Feasible as a contained admin feature; not feasible as core application storage infrastructure.
Technical risk: Elevated. v1.0.0 with a one-line changelog and no documentation of the storage schema, encryption, or authorization on the download endpoint. Storing file bytes (or base64 blobs) inside a JSON/array column risks row-size limits (MySQL TEXT/JSON caps, PostgreSQL TOAST degradation), backup bloat, and slow queries. Unauthenticated or IDOR-prone download routes are a common failure in this class of field. Nova major-version coupling means upgrades can break the field with little notice.
Key questions:
Stack fit: Only viable in a Laravel application already running Nova. If the team uses Nova for back-office administration, the field slots into existing resource definitions with low ceremony. If the team does not use Nova, this package is irrelevant.
Migration path: Add via Composer, register the field class in NovaServiceProvider::fields(), then add the field to the target resource. Because it stores files as an array of objects, introducing it into an existing model likely requires a schema addition (a JSON/text column) and a data-migration decision for any records already holding files through Storage. Plan for a dual-write or backfill only if the field becomes load-bearing; for a pure admin convenience, scope it to new records.
Compatibility: Pin the package against the exact Nova major in use and validate against the project's PHP and Laravel versions before adoption. Treat Nova upgrades as a gated event requiring re-verification of the field.
Sequencing:
Maintenance: Low-to-moderate burden driven by Nova coupling. Expect to touch the field on every Nova major upgrade and to monitor an immature package's issue tracker. Pin the version and avoid floating constraints.
Support: Community/single-maintainer support is likely; no vendor SLA. Teams should be prepared to fork or patch, especially for the download route, which is the most security-sensitive surface. Internal ownership must be assigned before production use.
Scaling: The array-of-objects-in-a-column model scales poorly. Large files inflate rows, slow queries, and bloat backups and replication. It is suitable for small numbers of modest files in admin contexts; it is not suitable as the primary store for high-volume or large-file workloads. Downloads should be streamed, and request timeouts/limits configured.
Failure modes:
Ramp-up: Low for developers already fluent in Nova — the field is a drop-in resource component. The real ramp-up cost is the security and storage review, not the API. Budget a short spike to read the source and confirm the download authorization model before committing.
How can I help you explore Laravel packages today?