anomaly/language-field_type
A PyroCMS Streams Platform field type that adds a language selector to your forms, letting users pick from configured locales and storing the selected language code with each entry.
Architecture fit. This is not a general-purpose Laravel package — it is a Streams Platform field type addon for PyroCMS 3.x. It plugs into Anomaly Labs' field type contract (a FieldType class plus a FieldTypePresenter and a form view), and its single responsibility is rendering a language selector populated from the anomaly/languages-module repository. It has no meaning outside a PyroCMS/Streams application: there is no service provider for stock Laravel, no config publish, no standalone usage path.
Integration feasibility. Feasible only if the target application is already a PyroCMS 3.x install with the Languages module present. In that context it is a composer require plus addon registration — genuinely low effort. In any other Laravel context (Nova, Filament, Livewire, plain Blade), the cost of adoption is effectively the cost of adopting PyroCMS, which is a platform decision, not a package decision.
Technical risk — high, and concentrated in the "unowned code" category.
anomaly/* dependencies carry the same risk.Key questions before committing.
--ignore-platform-reqs?anomaly/languages-module installed and seeded, or does this field type have nothing to read from?select / enum field type already satisfy the requirement? For most teams the honest answer is yes — a language picker is a static list.Verdict: a ~200-line convenience addon with real, if bounded, technical risk. It is defensible only as a zero-cost add-on inside an existing PyroCMS estate; it is not defensible as a reason to adopt anything.
Stack fit. Narrow. Supported target is PyroCMS 3.x (Streams Platform) with the Languages module. It is not a fit for standard Laravel, and it is not a fit for any headless or API-first architecture, since its value is entirely in the admin form view.
Migration path.
composer.json, register the addon, ensure the Languages module is installed first, then assign the field type to the relevant stream/field. Hours, not days.select field with a static options array, a small languages lookup table, or the native select in Filament/Nova. Reimplementing the behavior is a fraction of the cost of importing the platform.Compatibility. Verify the three-way alignment of PyroCMS version, anomaly/languages-module version, and this package's constraints; they are released independently and are not co-versioned. Confirm autoload namespace (Anomaly\LanguageFieldType\) resolves after install — namespace mismatches on old addons are the most common install failure. Watch for illuminate/* constraint conflicts if the host app has drifted forward.
Sequencing.
anomaly/language-field_type, run composer update in a branch, confirm the resolve.Maintenance. Nominal steady-state effort is near zero. The realistic number is higher: treat this as vendored code we now own. Budget a fork, a composer VCS/path repository entry, and roughly 4–8 hours per PyroCMS upgrade cycle to re-verify the field renders and the presenter resolves. If the org cannot commit that, do not adopt.
Support. Community-only. No vendor, no SLA, and the repository shows no maintenance velocity — expect issues to go unanswered. Internal escalation path is "read the source," which is feasible here precisely because the package is tiny.
Scaling. Non-issue. It is a form input; runtime cost is a single repository lookup per form render, and storage is one column. It scales exactly as well as the admin UI around it, which is to say it is not on any hot path. If the language list is large, the dropdown is the only scaling consideration, and that is bounded.
Failure modes to plan for.
Ramp-up. For a developer already fluent in PyroCMS/Streams field types: a few hours. For a Laravel-only team: days, and the learning is in Streams concepts (streams, assignments, field types, presenters), not in this package — which is the real argument that this dependency is not worth the on-ramp unless the platform is already paid for.
How can I help you explore Laravel packages today?