visiosoft/list-field_type
Visiosoft list-field_type is a Laravel/PHP field type addon that adds list fields to Visiosoft forms and entries, making it easy to define, store, and display multiple values in a simple ordered list within Streams-based admin interfaces.
Architecture fit — This is not a general-purpose library; it is a Streams Platform field type addon, i.e. a plug-in component that extends the field type registry in visiosoft/streams-platform (the Visio/OpenClassify fork of the PyroCMS Streams ecosystem). It registers a service provider, a field type class, a presenter, validation rules, and an admin view. Its value is entirely conditional on the host application already being a Streams-based CMS (Visio/OpenClassify/PyroCMS lineage). In a vanilla Laravel application there is no integration surface: there is no framework-agnostic cast, validation rule, or Eloquent mutator to lift out, because the class contract is defined by Streams, not Laravel.
Integration feasibility — The package is published to Packagist, so composer require is mechanically possible, but the practical install path is a constraint-resolution exercise. Last release May 2020 implies an expected target of roughly Laravel 5.5–6.x and Streams 1.x. The realistic failure mode at install time is a Composer constraint conflict against a modern host, not a code defect. Because a field type is small (typically one field type class, one presenter, one validation rule, one or two Blade/Vue views), a full source audit is measured in hours, not weeks — which is the main mitigating factor.
Technical risk — High on provenance, moderate on code. One star, zero dependents, and no releases in five-plus years means no community validation, no security disclosure path, and no one to ask when the Streams field type contract shifts. The more substantive risk is data-shape: "list" field types conventionally serialize an array of child values into a single text/JSON column. If that is the case here, you inherit a bespoke serialization format with no upstream migration story, and list values become awkward to query, sort, index, or report on. If the field type instead fans out to related records, the risk profile shifts toward schema coupling and cascade behavior. That distinction should be resolved before any commitment.
Key questions
visiosoft/streams-platform / Laravel versions appear in the composer.json require block, and does the host app satisfy them unmodified?Stack fit — Green light only inside an existing Visio/OpenClassify/PyroCMS-Streams application that needs multi-value or repeater-style fields and is already pinned to a compatible platform generation. Red light for modern Laravel (9–11) applications, headless/API-first services, or any codebase where Streams is not already the content backbone. Do not adopt this to get "a list field" in a normal Laravel app; a JSON column with a cast and a custom validation rule is a smaller, better-owned solution.
Migration path — Treat this as vendored code, not a dependency. Fork or copy into an internal repository (or use a Composer path/VCS repository entry with an exact commit pin) so upstream disappearance or a Packagist metadata change cannot break builds. If the audit shows the field type is a few hundred lines, the cleanest end state is often to re-home the field type class inside your own addon namespace and drop the dependency entirely — you keep the behavior and lose the supply-chain question.
Compatibility — Verify in order: Composer require constraints, service provider and addon manifest registration conventions, the field type base class and presenter interface signatures, and the admin-side view assets. The admin view is the historically brittle layer across Streams panel versions; the PHP side is usually the stable part. Confirm the field type renders and saves in the actual admin panel version you run, not a sibling version.
Sequencing
composer require and resolve constraints; capture the exact resolved versions.Maintenance — Effectively unmaintained upstream. Adoption means ownership transfer: your team becomes the maintainer of record. Expect a one-to-three-day initial audit and fork, then a low, steady trickle of work — primarily re-validating after Streams/Laravel upgrades and after admin panel asset changes. Budget for it explicitly rather than assuming it is free.
Support — No vendor, no release cadence since 2020-05, one star, zero dependents. GitHub issues are unlikely to receive a response. Internal ownership must be named: a specific engineer responsible for the fork, the upgrade path, and the data format. If no one will accept that ownership, do not adopt.
Scaling — The field type itself is thin and adds negligible runtime cost; deserialization is per-record and cheap. The scaling concern is the data model, not the code. If list values are stored serialized in a text column, you lose the ability to index, filter, sort, or aggregate on list contents, and reporting requirements will force either full-table scans in application code or a later normalization project. If you anticipate querying on list values, plan a normalized side table or a JSON column with generated columns from day one rather than retrofitting.
Failure modes
Ramp-up — Low for a Laravel developer already fluent in the Streams addon pattern; the field type's surface area is small and the platform's base classes are the real documentation. Moderate-to-high for anyone unfamiliar with Streams, because public documentation for this specific package appears nonexistent and onboarding means reading the platform's field type base class alongside the addon source. Estimate half a day for a Streams-fluent engineer to be productive, and plan to write an internal README capturing the storage format, registration steps, and upgrade checklist — that document, not the package, is what makes this sustainable.
How can I help you explore Laravel packages today?