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

Laravel Livewire Wizard Laravel Package

spatie/laravel-livewire-wizard

Build multi-step Livewire wizards where each step is its own component, with easy navigation control and full access to regular Livewire features.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. spatie/laravel-livewire-wizard is a headless, thin orchestration layer over Livewire components. A WizardComponent declares an ordered array of StepComponent classes; each step is a normal Livewire component with its own state, validation, and rendering. This fits any Laravel application already standardized on Livewire 3, and it deliberately avoids owning UI, routing, or persistence. For a TPM, that means the package solves step sequencing and cross-step state access, while leaving the product surface (navigation, progress indicators, review screens, accessibility, analytics) as first-class delivery work.

Integration feasibility. Low-to-moderate. Installation is Composer-only, there are no migrations, service providers, or config surfaces to operate, and the public API is small (steps(), navigation helpers, state access including forStepClass, testability helpers such as testStep). The main effort is not package wiring but designing the wizard UX and deciding where step state lives. Multi-wizard-per-page and synthesizable state objects are supported in current releases, which covers most checkout/onboarding patterns.

Technical risk. Moderate, concentrated in product-level concerns rather than the package itself:

  • Headless by design — no prebuilt navigation, CSS, progress UI, or accessibility semantics. Budget front-end and design-system work; the 418 stars and 0 reported dependents reflect a focused utility, not a turnkey wizard framework.
  • State lifecycle — cross-step state is held in the Livewire component tree; page refresh, deep-linking, and abandoned sessions require an explicit persistence strategy (session, draft model, or URL parameters). This is the most common source of "wizard lost my data" defects.
  • Conditional/branching flows — skip-step functionality was removed in 1.0.x; branching must be implemented in steps() or navigation logic, which can become bespoke code if flows are complex.
  • Version coupling — the package tracks Livewire 3 and Laravel 10–12. A future Livewire major is a real upgrade dependency, though Spatie has a strong track record of timely compatibility releases.
  • Ecosystem validation — 0 dependents and an opportunity score near 39 indicate limited third-party adoption evidence; Spatie's brand, docs, changelog, and test suite partially offset this.

Key questions.

  1. Which Livewire and Laravel versions are in production, and is there a committed upgrade cadence to stay within the package's support matrix?
  2. Does the flow require draft persistence, resume-later, or deep-linking to a specific step? If yes, who owns that data model?
  3. Are there conditional branches, dynamic step lists, or steps gated by authorization or feature flags?
  4. What is the validation and finalization contract — per-step validation, a final review step, server-side idempotent submission, and audit logging?
  5. Are file uploads, payments, or third-party calls embedded in steps, and do those need retry/timeout handling outside Livewire's request cycle?
  6. Who owns the navigation UI, accessibility (keyboard, focus management, screen-reader announcements), and analytics instrumentation?
  7. Is Filament already in the stack? If so, its built-in wizard may be a cheaper fit for admin flows.

Integration Approach

Stack fit. Strong for Laravel + Livewire 3 shops building customer-facing multi-step flows: checkout, onboarding, KYC, insurance quotes, multi-part applications, and internal data-entry workflows. Weak for API-only services, non-Livewire front ends (Inertia/Vue/React), and Filament-heavy admin panels where the built-in wizard is closer to turnkey.

Migration path. Adopt incrementally rather than rewriting flows wholesale. Start with a single new or low-traffic wizard, keep existing controllers and Blade views intact, and mount the wizard as a Livewire component inside an existing route. If an existing multi-step flow is server-rendered with session state, the migration is mostly a state-relocation exercise: move per-step fields into StepComponent properties, move validation into per-step rules, and preserve the final submission endpoint so downstream integrations do not change.

Compatibility. Confirm the exact Livewire 3 minor and Laravel version against the package's released support range; pin the package version in composer.json and treat Livewire major upgrades as joint upgrade tickets. Validate that any custom Livewire features used elsewhere (volatile properties, wire:model variants, lifecycle hooks) behave identically inside StepComponent. If the application uses synthesizable objects or DTOs in step state, verify support on the installed package version.

Sequencing.

  1. Spike (1 sprint): build a two-step proof of concept with real validation, cross-step state read, and a final submit; confirm Livewire/Laravel compatibility and test harness (testStep, Livewire test helpers).
  2. Design and state contract: agree on step boundaries, navigation rules, persistence approach, finalization idempotency, and analytics events before building more steps.
  3. First production wizard: ship one contained flow behind a feature flag; instrument completion, abandonment per step, and validation failure rates.
  4. Harden: add per-step tests, accessibility review, error and retry behavior for external calls, and submission idempotency.
  5. Expand: roll out to additional flows only after the first has stable completion metrics; extract shared navigation/progress components to avoid per-wizard duplication.
  6. Governance: add dependency update ownership and a documented upgrade runbook for Livewire majors.

Operational Impact

Maintenance. Low package-level maintenance: MIT license, no infrastructure, no database footprint, and a small API surface. The real maintenance burden is the code you write around it — step components, navigation UI, state persistence, and validation rules. Treat those as product code with tests and owners, not as package configuration. Pin versions and schedule quarterly compatibility checks against Laravel and Livewire releases.

Support. No commercial SLA. Support is community-driven via GitHub issues and Spatie's documentation; Spatie's broader reputation and release discipline are the main mitigants. For business-critical flows (payments, regulated onboarding), plan internal ownership and a fork-or-replace contingency rather than relying on upstream response times.

Scaling. Runtime scaling mirrors Livewire: each step interaction is an HTTP request with a serialized component payload. Wizard payloads grow with the number and size of step properties, so keep step state lean, avoid large file payloads in component state, and move heavy artifacts to storage with references. Horizontal scaling is straightforward for stateless app servers, but any draft-persistence store (session or database) becomes part of the scaling and failover design. Cross-step state access is in-process and cheap; database writes should be confined to explicit finalization or save points.

Failure modes.

  • State loss on refresh or session expiry — most visible user-facing failure; mitigate with draft persistence or clear re-entry UX.
  • Double submission / non-idempotent finalization — guard the terminal action with idempotency keys or a submitted flag.
  • Livewire version drift — upgrade breaks step rendering or event handling; mitigate with pinned versions and upgrade tests.
  • Multiple wizards on one page — historically a navigation bug source; verify on the installed version if this pattern is needed.
  • External service failures inside steps — payment or address-lookup timeouts surface as Livewire errors; wrap with explicit error states and retry paths.
  • Bespoke branching logic — accumulates as unowned complexity if conditional flows are added without a design contract.
  • Accessibility regressions — headless UI means no built-in focus management; treat as a release gate, not a later fix.

Ramp-up. Low for teams already fluent in Livewire (roughly days to first wizard); moderate for Laravel teams new to Livewire (one to two weeks to cover component lifecycle, state hydration, and testing patterns). Front-end/design effort for navigation, progress, and accessibility is the larger estimate and should be staffed accordingly. Recommend a single internal owner for the wizard pattern and a short internal guide covering step conventions, state persistence, validation, and testing, so subsequent wizards do not diverge.

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.
ably/pubsub-server
mstfkhazaal/defender
mfonte/base62x
karnoweb/metapilot
tobya/bcsapiwrapper
swalker2/cpanel
vish4395/laravel-translation-manager
morningtrain/economic
teksite/systeminfo-laravel
atomcms/voting
run6/weather
siokas/laravelembeddirectives
adamlien/pkuuids
gilsonsouza/lara-doc-generator
manelgavalda/enrollment_mobile
unabomber/timezone
delatbabel/contacts
astritzeqiri/g-recaptcha
kevinongko/laravel-genode
developeruz/laravel-analytics