megawilddaddy/formflow-bundle
Formflow Bundle is a PHP package for managing form flows in bundle-based applications, offering structure for defining form steps and handling submissions so developers can organize form-driven workflows with lightweight integration.
Architecture fit — poor for the stated target stack. This package is a Symfony bundle (a fork/mirror of craue/CraueFormFlowBundle), not a Laravel package. It extends Bundle, ships a DependencyInjection extension, and registers services into the Symfony container. Its core depends on symfony/form, symfony/event-dispatcher, symfony/http-foundation, and the Symfony kernel's bundle bootstrapping. There is no ServiceProvider, no Laravel facade, and no adaptation layer. Dropping it into a Laravel application is not a configuration exercise — it is a re-platforming exercise. The megawilddaddy/formflow-bundle name versus the CraueFormFlowBundle repository URL also suggests a renamed fork, which needs provenance verification before anything else.
Integration feasibility — low. Two paths exist, both costly. (1) Pull symfony/form in standalone mode and re-implement the flow state machine and storage adapter outside the bundle, effectively rewriting the package's value-add. (2) Run Symfony components side-by-side with Laravel's container, which creates dual service containers, dual event dispatchers, and two session abstractions — an architectural smell that will metastasize. Neither is justified for a multi-step form feature that Laravel can express with sessions, form requests, and a controller-per-step or Livewire/Inertia wizard pattern.
Technical risk — high, on several independent axes.
NOASSERTION while upstream Craue is MIT. Unverified licensing is a legal blocker for commercial distribution; a fork that has altered or dropped the LICENSE file is a classic supply-chain smell.Key questions for the requester/owner.
craue/CraueFormFlowBundle?Stack fit. If the application is Laravel (as the brief implies), this package does not fit. The correct framing is: we are not integrating a package, we are deciding whether to import a Symfony subsystem. Recommend treating the Symfony Form component as inspiration, not a dependency — the flow concepts (step definitions, per-step validation groups, session-persisted flow data, transition guards) are sound and can be reimplemented in ~1–2 sprints with Laravel-native primitives.
Migration path (if a Symfony host exists). Standard Composer install, register the bundle in config/bundles.php, define a flow class per form, and wire step templates. That path is well-trodden upstream. For a Laravel host, the migration path is inverted: build a FormFlow service backed by the session store, a StepRegistry, per-step FormRequest validation, and a controller that resolves the current step and enforces forward-only transitions. This preserves the domain model while eliminating the cross-framework bridge.
Compatibility. Assume no compatibility with current Laravel (10/11) or current PHP without verification. Symfony bundle conventions changed materially after 2021 (attribute-based routing, container compilation changes, service autowiring defaults). Budget a spike to confirm it even installs cleanly in a modern PHP runtime, and treat a failed install as a likely outcome rather than a surprise.
Sequencing.
symfony/form in the Laravel app to measure real friction; timebox to 2–3 days.Maintenance. Effectively unmaintained. Adopting this artifact means the team becomes the maintainer of a Symfony bundle embedded in a non-Symfony application — the worst of both worlds. Upstream Craue absorbs Symfony compatibility work; this fork does not. Any future PHP or framework upgrade becomes an internal project rather than a Composer bump.
Support. No maintainer, no issue triage, no security disclosure channel, no dependents to corroborate behavior. Internal debugging of flow-state edge cases (resumed flows, expired sessions, back-button navigation) would be entirely on us, with a codebase we did not write and cannot diff against a trusted baseline.
Scaling. The flow model persists step data in the session. That has concrete consequences: session size growth on long flows, session affinity requirements if the session driver is not shared (Redis/DB), and invalidation behavior under horizontal scaling or rolling deploys. For high-traffic or stateless-API-shaped products, the session-coupled design is a scaling constraint that must be designed around, not discovered in production.
Failure modes. Expect: lost flow state on session expiry mid-wizard (user-facing data loss), step-skipping or replay if transition state is client-influenced, validation drift when step validation groups are misconfigured, and silent breakage on PHP/Symfony upgrades given the unmaintained baseline. Each needs an explicit mitigation — idempotent step submission, server-side transition enforcement, and durable draft persistence outside the session if the form is long or the data is valuable.
Ramp-up. The team would need working knowledge of Symfony's Form component, event subscribers, and DI extension conventions to debug this safely — a non-trivial skill investment for a feature (multi-step forms) that is otherwise commodity. Onboarding cost is disproportionate to the business value delivered.
Verdict for planning purposes. Treat as do not adopt on the current evidence: license unresolved, artifact abandoned, zero adoption, and a framework mismatch with the target stack. The defensible move is to use the upstream Craue bundle if a Symfony host exists, and a native Laravel wizard implementation otherwise — reusing the flow pattern, not the package.
How can I help you explore Laravel packages today?