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

Liform Bundle Laravel Package

startsevdenis/liform-bundle

LiformBundle integrates Liform with Symfony to generate forms directly from JSON Schema. It supports schema-driven form creation, validation, and serialization, reducing manual form configuration for APIs and dynamic Symfony applications.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Despite being catalogued alongside Laravel/PHP packages, this is a Symfony Bundle — its primary artifact is a DI extension plus service wiring that assumes the Symfony kernel (bundles.php, container compilation, autoconfiguration). The actual value is the form-to-JSON-Schema translation, which is almost certainly a thin integration over an existing generator (the liform family of libraries). For a Laravel codebase this is a poor architectural fit at the bundle layer and a potentially acceptable fit at the library layer. Laravel has no symfony/form in its request/validation path; adopting this means introducing Symfony Form as a parallel form-definition system purely to obtain schema output, which is a second source of truth next to Laravel's FormRequest/validation rules. That duplication is the single biggest architectural concern, independent of code quality.

Integration feasibility. Technically feasible but not off-the-shelf. symfony/form, symfony/options-resolver, symfony/property-access, and symfony/event-dispatcher are all Composer-installable as standalone components and coexist with Laravel's container in practice. What does not carry over is the bundle: there is no Laravel service provider, no config publishing, no auto-discovery. Realistic path is to register the underlying generator as a singleton in a small app-level service provider and build Form types by hand, or to fork the bundle and strip the Symfony-specific bootstrapping. Budget for an adapter, not an install.

Technical risk. High, driven mostly by provenance rather than complexity. Zero stars, zero dependents, and a single-maintainer release cadence mean no community validation, no third-party bug reports, and no evidence of production hardening. Because the package is a bundle, most of its surface is configuration glue that will be discarded on Laravel — meaning you inherit maintenance of the wrapper while getting value only from the dependency beneath it. Secondary risks: coupling to Symfony Form internals across major versions (6→7→8), incomplete mapping of custom form types and constraints, and JSON Schema draft-version ambiguity. The generation path is read-only and offline, so the security blast radius is small; the correctness blast radius is not, if downstream consumers validate payloads against the emitted schema.

Key questions.

  • Which underlying generator and version does this wrap, and is that library usable without the bundle?
  • Does the bundle expose a framework-agnostic service, or is all state carried in container parameters?
  • What JSON Schema draft is emitted, and are $ref/definitions handled or inlined?
  • How are form transformers, data mappers, and PRE_SUBMIT/POST_SUBMIT listeners reflected in output?
  • Is there a test suite, and does it assert schema output snapshots or just smoke-test the service?
  • What is the intended consumer — OpenAPI docs, client codegen, or runtime validation? Mismatched intent is a common failure.
  • Given the opportunity score, is the problem (single schema source for API contracts) the real bet, with this package merely a candidate implementation?

Integration Approach

Stack fit. Treat this as a library extraction, not a bundle install. Two viable shapes: (a) Laravel service provider binding the underlying generator, with form types authored in app/Forms and kept out of the request lifecycle; or (b) an artisan schema:generate command that runs at build time and writes JSON Schema artifacts to storage/app/schemas or a public API endpoint. Option (b) is strongly preferred — it isolates the Symfony dependency to a dev/build context and keeps it out of the request hot path and out of production's dependency graph where practical.

Migration path. Start by proving the underlying library works standalone in a bare Laravel app with two or three representative forms. If it does, skip the bundle entirely and depend on the library directly; the bundle adds nothing you can use. If the bundle contains non-trivial logic, vendor it (path repository or a fork under your org) so you control the Symfony version constraint. Do not adopt the package as an unqualified require in a production composer.json at zero dependents.

Compatibility. Verify PHP constraint alignment with your Laravel version, and confirm each Symfony component can be pinned independently of any Symfony framework packages already present. Watch for transitive constraints that force a Symfony major your other tooling does not want. Check whether the release cadence (last release noted as 2026-01-30) tracks Symfony majors promptly — a bundle that lags a Symfony major by more than a few months is a stranded asset.

Sequencing.

  1. Spike: standalone generator against two hand-written Form types mirroring existing FormRequest rules; compare emitted schema to actual validation behavior.
  2. Decide build-time vs request-time; default to build-time with cached artifacts.
  3. Wrap in a Laravel service provider plus an Artisan command; add snapshot tests on generated schema.
  4. Pilot on one non-critical API resource; publish schema to docs/consumers only.
  5. Reassess before broadening — if step 1 shows more than ~10% hand-patching of output, stop and evaluate alternatives (e.g., generating schema from existing Laravel validation rules with a maintained tool).

Operational Impact

Maintenance. The dominant cost is ownership of a fork or adapter for a package with one maintainer and no downstream users. Assume you are the de facto maintainer. Pin exact versions, commit the lockfile, and keep a documented patch set. Every Symfony Form major bump becomes your upgrade project, not a composer update.

Support. No community, no Stack Overflow corpus, no issue history to mine. Internal knowledge will live with whoever writes the adapter — a single-point-of-failure risk. Mitigate with a short ADR and schema snapshot tests so behavior is pinned by CI rather than by memory.

Scaling. Generation is CPU-bound and idempotent; scale is a non-issue provided you generate at build time and cache artifacts. If run per-request, expect noticeable overhead on form-heavy endpoints and potential memory growth from repeated form instantiation. Cache aggressively and invalidate on deploy.

Failure modes.

  • Silent schema drift — emitted schema diverges from real validation rules; consumers break without any error in your app. Highest-severity failure and the hardest to detect; snapshot tests plus contract tests against live endpoints are the mitigation.
  • Unsupported form types throw at generation time, breaking the build — acceptable (fail fast) if generation is in CI, damaging if it is in the request path.
  • Constraint mapping gaps (regex, conditional/expression constraints, Callback) producing permissive schemas — fail-open behavior in any downstream validator.
  • Transitive Symfony major skew after an unrelated dependency bump, breaking generation with no code change on your side.
  • Abandonment — no release for a Symfony major cycle leaves you pinned and eventually blocked.

Ramp-up. Low for the mechanics (a competent Laravel engineer gets a working spike in a few days) but non-trivial for the domain: JSON Schema semantics, Symfony Form internals, and the mapping between them are the real learning curve. Budget roughly one to two sprints for spike plus adapter plus tests before committing, and treat the opportunity score as a signal about the problem space (schema generation from server-side form definitions) rather than a reason to adopt this specific package. Given zero stars and zero dependents, the recommendation is: prototype against the underlying library, and only proceed to production if the adapter stays thin enough that replacing it later is a one-week exercise.

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.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console