Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

List Field Type Laravel Package

emange/list-field_type

A Laravel/PHP field type add-on for the Streams Platform that adds configurable list fields to forms and models. It makes it easy to define, store, validate, and render ordered options or values in PyroCMS/Streams-based applications, with a lightweight setup and straightforward Composer installation...

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. emange/list-field_type follows the Streams Platform (*_field_type) addon convention used by PyroCMS 3, so it is designed to plug into the addon/field-type registry rather than into application code directly. Its stated purpose — storing an array of text/textarea values in a single column without provisioning a dedicated stream — is a legitimate architectural trade: it collapses a one-to-many child stream into a serialized column on the parent entry. That is a good fit for low-cardinality, presentation-oriented data (bullet lists, spec tables, contact blocks, FAQ snippets) and a poor fit for anything that needs to be queried, sorted, filtered, reported on, or referenced from elsewhere. Treat it as a content-authoring convenience, not a data-modelling primitive.

Integration feasibility. Mechanically low effort: add a VCS repository entry to composer.json, require the package, ensure the addon is discovered/registered, then create a field of this type on an existing stream. No core patching is implied. The real cost is verification, not wiring — the package is distributed via Bitbucket with no visible release history, no star signal, and zero dependents, so there is no community evidence of it working against any specific Streams Platform version. Budget a spike to read the field type class, its getView()/modifier/accessor logic, its $columnType, and its validation rules before committing.

Technical risk. Several risks are inherent to this class of addon, independent of code quality:

  • Storage format opacity. List field types typically persist serialized PHP or JSON. PHP serialize/unserialize on database content is a deserialization risk if any write path is untrusted, and is brittle across class changes. Confirm JSON encoding and a safe decode path with a sane fallback on malformed data.
  • Schema lock-in. Once entries carry serialized blobs, migrating to a proper child stream later requires a data migration and re-authoring of templates — cheap at 50 entries, expensive at 50,000.
  • Query and reporting gaps. No SQL-level filtering, sorting, full-text search, or aggregation over the inner values. Any future "find all entries mentioning X inside the list" requirement becomes a scan.
  • Output safety. Textarea values rendered back into the CP or front end must be escaped; check the addon's views for raw output.
  • Version drift. Streams Platform / PyroCMS 3 is a mature, slow-moving ecosystem; an unmaintained addon pinned by branch rather than tag can silently break on a platform bump or a PHP minor upgrade.
  • Bus-factor and provenance. Single-author Bitbucket repo, no Packagist presence, no CI, no tests visible from metadata. You are effectively adopting vendored code.

Key questions.

  1. Which Streams Platform / PyroCMS and PHP versions is it actually tested against, and is there a tagged release or only a default branch?
  2. How are values persisted — JSON, PHP serialize, or a delimited string — and what happens on malformed or legacy data?
  3. Does the field type expose validation rules (min/max items, per-item length, required) and a sensible default/empty state?
  4. Is there a defined column type and migration behaviour, and does it survive a stream field rename or a platform upgrade?
  5. Are the CP views escaped, and does it support localization/multi-locale if the platform does?
  6. What is the license, and are we permitted to fork and vendor it internally if the author disappears?

Integration Approach

Stack fit. Only relevant if the target is a Laravel application running PyroCMS 3 / Streams Platform. It is not a general-purpose Laravel package and offers nothing to a vanilla Laravel, Filament, Nova, or Livewire stack — in those environments an equivalent is a JSON cast plus a repeater form component, which is a few hours of work and fully owned. Confirm the platform dependency before anything else; if the answer is "we are on PyroCMS 2 or a custom Laravel app," close the evaluation.

Migration path. There is no migration from an existing solution unless one already exists; the realistic path is into and out of this addon. Inbound: create the field on a non-critical stream, populate, and verify round-t rip fidelity (multi-line text, quotes, unicode, empty items, reordering). Outbound: if the requirement hardens into relational data, you will need a script that reads each entry's serialized value and writes rows into a real stream/table, then a template change and a field-type swap. Design the content model now so that swap stays a contained exercise.

Compatibility. Pin to a commit SHA rather than a branch, and record the exact platform and PHP versions validated during the spike. Because the package is installed from a VCS source, Composer will not protect you with constraint resolution; the pin is your compatibility guarantee. Verify addon discovery works with the project's addon path configuration and that no autoload or service-provider conflict appears alongside other field-type addons.

Sequencing.

  1. Source review and license confirmation (0.5–1 day).
  2. Spike: install pinned, create a field on a scratch stream, exercise create/edit/reorder/delete, and inspect the raw column values and rendered output.
  3. Decision gate: adopt as-is, fork-and-own, or build a small internal equivalent (JSON cast + repeater view) — the last is the default recommendation unless the platform-native UX is essential.
  4. If adopted: pin, vendor or mirror to internal Git, document the authoring conventions (what belongs in a list field and what does not), and roll out to one low-risk stream before broader use.

Operational Impact

Maintenance. Near-zero upstream maintenance is likely — no stars, no dependents, no evidence of an active release cadence. Plan for the package to be frozen. That means owning it: mirror the repository internally, pin the commit, and accept that any fix on a platform or PHP upgrade is yours to write. Budget a small annual allowance for that, or budget the one-off cost of replacing it with in-house code and avoid the dependency entirely.

Support. No vendor, no community, no issue-tracker signal. Internal documentation of the field type's behaviour, storage format, and known limitations is mandatory if more than one developer will touch content modelling. Content editors will also need guidance, because a list field invites arbitrary structure — inconsistent item counts and shapes across entries are the predictable outcome.

Scaling. Fine for read-heavy, low-cardinality, entry-scoped data at modest volumes. Degrades on three axes: (a) row size — long textarea lists bloat the entries table and slow full-row selects; (b) query needs — any filtering, sorting, search, export, or API projection over inner items requires application-side parsing; (c) edit concurrency — a serialized column is a whole-value write, so two editors saving the same entry will clobber each other's items with no per-item merge. There is also no referential integrity: nothing prevents a value that points at a deleted record.

Failure modes. Ranked by likelihood and blast radius: malformed or truncated serialized data causing a decode error and a broken entry render; unescaped output producing stored XSS in the control panel; a platform or PHP upgrade breaking the addon's class contract and taking every stream using the field type down at once (a shared failure surface — one bad field type is a fleet-wide risk); a Composer update pulling an unpinned branch and changing behaviour silently; and content-model drift where editors overload the field with data that later must be migrated. Mitigate with a pinned commit, a decode fallback, escaping review, a backup taken before first use, and a documented "do not use for relational data" rule.

Ramp-up. Low for developers — the addon surface is small and installation is a Composer entry plus a field definition, roughly half a day including verification. Low for editors — the UI is a repeatable text input, self-explanatory. The genuine ramp-up cost sits with whoever owns the content model: they must internalize the boundary between "list-shaped presentation data" and "relational data that belongs in a stream," because that judgement is what keeps this dependency cheap. Overall recommendation: viable as a small, pinned, internally-mirrored convenience in a PyroCMS 3 codebase; not viable as a strategic dependency, and not worth adopting at all outside that platform.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
mydnic/volet-feature-board-filament-plugin
wmde/email-address
refinery29/test-util
dees040/laravel-api-responses
teamzac/geocoder
ideatica/config-writer
keaton-php/pipe-dream
jacksonwebservices/laravel-user-suite
maksimru/conditional-laravel-debugbar
gismatul/nova-support-chat
gismatul/laravel-support-chat
networkrailbusinesssystems/oracle-api
alphabalex/messaging-made-easy
rawphp/warp
shootkiran/merobug
narakode/fineauth
numencode/wn-syncops-plugin
ibnnajjaar/mib-global-pay
refinery29/php-cs-fixer-config
parsnick/steak