anomaly/file-field_type
File field type for the Anomaly Streams platform. Adds a file upload field to Streams entries, letting you store, browse, and manage files through Laravel’s filesystem and the Streams control panel.
Architecture fit. anomaly/file-field_type is not a standalone Laravel package — it is a field-type addon for the Anomaly Streams Platform (the data/streams layer underpinning PyroCMS 3.x). Architecturally it registers itself into the platform's field-type registry and delegates actual file persistence to the companion anomaly/files-module. That means its "fit" is binary: it is a clean, idiomatic citizen inside a Streams-based application and a non-starter anywhere else. It should be evaluated as an extension point, not as a library you composer require into an arbitrary Laravel app.
Integration feasibility. Feasible only under explicit preconditions: a Laravel version supported by the installed Streams Platform release, the files module present and migrated, and a stream/assignment defined to carry the field. There is no meaningful path to use the field type in isolation, and no adapter layer to graft it onto Eloquent models. Feasibility therefore reduces to "are we already committed to Streams?"
Technical risk.
composer.json constraints must line up with the Streams Platform and files module versions; mismatches typically surface as field-type registration failures at boot rather than clear dependency errors.Key questions.
anomaly/files-module a hard dependency, and which version range is pinned?Stack fit. PyroCMS 3.x / Anomaly Streams Platform on Laravel. If the target application is already Streams-based, this is a natural, low-friction addition. If it is a bespoke Laravel app, the correct decision is to not adopt this package — either write a small custom file-upload layer or adopt the platform wholesale.
Migration path.
anomaly/files-module (storage config, disks, permissions).anomaly/file-field_type at the matching version.file field on the target stream/assignment via the admin UI or a seeder/migration.Compatibility. Verify three axes before committing: platform version ↔ field type version, files module ↔ field type version, and Laravel/PHP ↔ platform version. Any deviation typically fails at boot or at field-render time, so pin all three in composer.json and in CI.
Sequencing. The dependency order is fixed and must be respected: platform → files module → file field type → stream/assignment configuration → data migration. Attempting to define the field before the module and its storage are in place produces confusing runtime errors. For brownfield apps, run a parallel environment with the full chain installed and validate against a copy of production data before cutover.
Maintenance. Expect to track the upstream Streams/PyroCMS release train rather than this mirror's tags. Because the package is small and highly coupled, upgrades are usually "safe or broken," not "subtly degraded" — which makes a pinned lockfile and staged upgrades the primary maintenance control. Budget effort for periodic platform upgrades rather than this package in isolation.
Support. Support flows through the Anomaly Labs / PyroCMS community (GitHub issues, docs, community channels) rather than commercial SLAs. For a business-critical deployment, plan for internal ownership of the field type: forkability under MIT is the real support guarantee.
Scaling. File I/O cost is dominated by the files module and the configured storage disk, not by the field type. The field type itself is thin metadata and adds negligible overhead per entry; scaling concerns are storage throughput, CDN/transform caching, and database joins when listing entries that reference files. Multiple files per entry will multiply the metadata rows and any eager-loading requirements — verify query behavior under realistic list views.
Failure modes.
Ramp-up. For a developer already fluent in PyroCMS/Streams, this is hours — read the field type's class, understand the files module contract, wire it up. For a Laravel developer without Streams exposure, budget days: the Streams abstractions (streams, assignments, fields, field types, addon bootstrapping) are the real learning curve, and this package only makes sense once those are internalized. Include at least one admin/editor-facing walkthrough, since field configuration is a UI surface that non-developers will operate.
How can I help you explore Laravel packages today?