corleonis/formmetadata
Corleonis FormMetadata is a Laravel package for attaching and managing structured metadata on forms, making it easy to store custom field attributes, configuration, and other form-related details in a consistent, retrievable way.
Architecture fit. The first thing a TPM should record is a framing conflict in the source material: the package description describes a Laravel library, but the repository is FormMetadataBundle — a Symfony bundle built on the Symfony Form component and Doctrine entity metadata. There is no Laravel service provider, no Eloquent integration, no Blade/Livewire surface. Against a Laravel estate, architectural fit as a dependency is essentially zero. The capability it embodies — declarative field metadata co-located with the domain class, consumed by one generic CRUD controller — is framework-agnostic and directly relevant to any roadmap containing CMS-style dynamic entities, tenant-defined content types, or a generic admin layer. So the TPM verdict splits cleanly: the concept is roadmap-relevant; the artifact is not adoptable.
Integration feasibility. Low as a dependency, moderate as a pattern. There is no composer require path into a Laravel app and no Symfony version we can confirm from the repository metadata. Real adoption means reimplementing four things: (a) metadata declaration, as PHP 8 attributes rather than docblock annotations; (b) a registry resolving class → field definitions; (c) a builder translating definitions into Laravel validation rules and form/Blade output; (d) a generic controller that authorizes and persists against an explicit field allowlist. That is a bounded internal library — days of engineering, not weeks — but it is a build, and the build must be staffed and owned. The package's real contribution is prior art on the metadata shape and the annotation-to-form-builder bridge, which de-risks the spike.
Technical risk. High and multi-axis.
doctrine/annotations 2.x removed the reader and Symfony has been migrating configuration to PHP 8 attributes. A bundle of this vintage likely does not run unmodified on Symfony 6/7 or PHP 8.2+.composer.json constraints, last-commit date, license, or test coverage. A Symfony shop cannot even evaluate compatibility without a hands-on spike.Key questions.
php, symfony/*, and doctrine/* constraints, and when was the last commit? What license, and is there a fork/transfer path if the maintainer is inactive?Stack fit. Poor for Laravel, plausible only for a Symfony + Doctrine ORM estate. In Laravel, the nearest analogues are a schema-driven form builder over Eloquent casts plus a generated validation-rule set; nothing in the framework reads class-level metadata to drive forms. In Symfony, the bundle is at least idiomatic — but only if version constraints resolve, which is unverified.
Migration path. Recommended: do not adopt; replicate the pattern. Use the repository as a design reference for the metadata contract — field name, type, options, constraints, per-class association — then build an internal package: PHP 8 attributes for declaration, a compiled and cached metadata registry (not per-request reflection), a builder emitting FormRequest rules plus Blade/Livewire field components, and a generic resource controller that authorizes each declared field explicitly. If the estate is Symfony and constraints check out, the path inverts: fork, convert annotations to attributes, pin internally, and publish an upgrade cadence.
Compatibility. Blocking gates before any commitment: PHP floor, Symfony major version, Doctrine ORM/annotations versions, and whether the code depends on the removed annotation reader. On PHP 8.1+ the annotation mechanism is a dead end regardless of what the bundle claims — attributes are the only defensible declaration format going forward. On the Laravel side, the gates are the framework major version, the validation API, and whether the chosen UI layer (Blade vs Livewire vs Inertia) can consume generated field schemas.
Sequencing.
FormBuilder mapping (likely a few hundred lines) to extract the contract.Maintenance. Effectively self-maintained from day one. With zero stars, zero dependents, and a score of 0, assume no upstream fixes, no security patches, and no framework-version upkeep. Any fork becomes an owned asset needing a named owner, a changelog, and a scheduled upgrade review — a recurring headcount cost that must be budgeted explicitly rather than absorbed as "just maintenance."
Support. No vendor, no community, no issue-tracker throughput. Documentation is a README describing annotation syntax. Expertise will concentrate in whoever writes the port — a bus-factor-1 risk unless the metadata contract, builder, and authorization model are documented and covered by tests.
Scaling. Metadata resolution via reflection is per-request work; compile the attribute scan at build time and cache it (Redis/file), never resolve on every admin page load. Metadata-driven forms also complicate validation and field-level authorization at scale: the generic controller must not become a policy bypass, and every declared field needs an explicit allowlist entry for both rendering and persistence. Expect the authorization model, not the rendering, to be the scaling bottleneck.
Failure modes.
Ramp-up. High for a Laravel team — new paradigm, stale docs, and no working examples in the target stack; budget a spike before committing engineering time. Moderate for a Symfony team fluent in Form types and Doctrine metadata, though the annotation-to-attribute conversion, constraint vetting, and authorization review must complete before the first production entity ships. In both cases the practical ramp-up cost is the internal contract spec and its tests, not the third-party code.
How can I help you explore Laravel packages today?