anomaly/multiple-field_type
Anomaly Multiple Field Type adds a repeatable, multi-value field type to the Streams Platform for Laravel. It lets developers collect multiple entries of a chosen field type, enabling flexible content models and cleaner admin forms without custom code.
Architecture fit
This is not a general-purpose Laravel package. It is a PyroCMS Streams Platform field-type addon — an extension that plugs into the Anomaly streams-platform addon architecture rather than into Laravel's service container directly. Its integration points are addon-specific:
FieldTypeServiceProvider, with addon metadata (manifest.json/addon.php), a custom Composer type, and autodiscovery driven by the Streams addon loader — not standard Laravel package discovery.FieldType base, a presenter for render/serialization, and a migration column stub.resources/config, resources/lang, resources/views using the platform's namespaced asset conventions.Consequence: architecture fit is effectively all-or-nothing. If the target application is PyroCMS 3.x with the Streams Platform installed, this is a native, idiomatic component. If it is any other Laravel application — including a bespoke app using Eloquent casts, Nova, Filament, or Livewire — it provides no reusable value. There is no extractable "multi-value field" abstraction here that survives decoupling from Streams.
Integration feasibility
Low standalone feasibility, moderate feasibility inside a PyroCMS estate.
| Precondition | Assessment |
|---|---|
| PyroCMS 3.x + Streams Platform present | Only viable context |
Laravel 5.x-era app (~5.4–5.8 range typical for this addon generation) |
Likely required |
| PHP 7.1–7.2 | Likely required; verify against composer.json |
| Addon-compatible admin theme/control panel | Required for the form UI to render |
The blocker is not code quality — it is the version envelope. PyroCMS's Streams Platform stagnated in the Laravel 5.x era; modern Laravel (10/11/12) requires PHP 8.1+, typed properties, and a completely reworked package discovery contract. Grafting this addon onto a current Laravel app is not an integration task, it is a rewrite of the host platform.
Technical risk
composer require will almost certainly conflict on laravel/framework, illuminate/*, and anomaly/streams-platform constraints in any modern project.text column as delimited or serialized data. That is a denormalized design — no indexing, no referential integrity, and no queryable structure. Migrating away later requires a data migration, not just a dependency swap.Key questions
composer.json actually pin for php, laravel/framework, and anomaly/streams-platform? This single file determines go/no-go.Stack fit
The stack fit is narrow but clean: PyroCMS 3.x + Streams Platform + PHP 7.x. Within that envelope, the addon is a first-class citizen — it inherits the platform's form builder, validation pipeline, translations, and control-panel rendering for free. Outside that envelope, fit is zero. There is no adapter layer worth writing.
Practical guidance: treat this as a configuration decision inside an existing PyroCMS estate, never as a component selection for a greenfield Laravel build.
Migration path
Two directions to consider:
Adopting it (inside PyroCMS):
dev-master; there is no release cadence to rely on).Migrating away (recommended long-term):
array/json cast, or a proper pivot table if the values are entity references.Compatibility
5.4–5.8 and PHP 7.1/7.2. Confirm, do not assume — an old addon may pin even tighter via a streams-platform transitive constraint.--ignore-platform-reqs; the runtime break will be in the addon loader, not in Composer.laravelcollective/html form macros. That package is itself abandoned and is a second, independent blocker on modern Laravel.Sequencing
composer.json and resolve the PHP/Laravel constraint envelope. (gate)Maintenance
Effectively unmaintained. Zero stars and zero dependents is not a popularity signal to discount — in the PyroCMS addon ecosystem it is a direct proxy for "no one is filing issues, so no one is fixing them." Budget for the addon being org-owned code from day one: fork, vendor, and assign an internal owner. Any upgrade of the host platform becomes an upgrade of this addon too, with no upstream to lean on.
Support
No community, no issue triage, no security advisories. Internal support only. The realistic support path is "read the source," which is tractable — the surface is small (a field type class, a presenter, a view, config, and migrations) — but it requires someone fluent in the Streams Platform addon contract, which is a thin skill pool in 2024+.
Scaling
Adequate at small scale, degrading with data volume:
LIKE '%value%' scans.Recommendation: cap usage to low-cardinality, low-row-count streams, and avoid it on any stream expected to grow past ~10^4 rows or to be filtered in list views.
Failure modes
| Failure | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Composer conflict on platform/Laravel version | High | Blocks install | Resolve constraints before committing to the approach |
| Upstream repo deleted / force-pushed | Medium | Build breaks | Fork and vendor into org VCS |
| Serialized data unreadable after platform upgrade | Medium | Data loss / manual repair | Document encoding; export to portable JSON early |
| Admin UI view breaks with theme changes | Medium | Editors cannot edit records | Pin theme; visual regression check on upgrade |
| Partial/garbled multi-value save (delimiter collision) | Medium | Silent data corruption | Test values containing commas/pipes/quotes; prefer JSON encoding |
| Orphaned values after related entry deletion | Medium | Stale references in UI | Add integrity check job; prefer pivot if values are entity refs |
Ramp-up
Bottom line for the roadmap: the 0.48 score is fair. This is a competent, idiomatic component for a platform generation that has passed. Adopt only if the host is already a pinned PyroCMS 3.x estate with no modernization on the horizon — and even then, fork and vendor it. Otherwise, the correct call is to implement the equivalent as a JSON-cast column plus a native admin control: a small, bounded piece of work with no platform lockdown, no abandoned transitive dependencies, and queryable data.
How can I help you explore Laravel packages today?