PHPackages                             wdelfuego/nova-wizard - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. wdelfuego/nova-wizard

AbandonedLibrary[Utility &amp; Helpers](/categories/utility)

wdelfuego/nova-wizard
=====================

A tool to create wizards in Nova 4.

v1.1(2y ago)1421.9k↓40.9%8[1 PRs](https://github.com/wdelfuego/nova-wizard/pulls)AGPL-3.0-or-laterPHPPHP ^7.3|^8.0

Since Oct 17Pushed 11mo ago1 watchersCompare

[ Source](https://github.com/wdelfuego/nova-wizard)[ Packagist](https://packagist.org/packages/wdelfuego/nova-wizard)[ RSS](/packages/wdelfuego-nova-wizard/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (1)Versions (4)Used By (0)

Multi-step Wizards for Laravel Nova 4
=====================================

[](#multi-step-wizards-for-laravel-nova-4)

Allows you to construct multi-step wizard forms, supports all native and custom Fields in your Laravel Nova 4 application.

[![Wizard screenshot](https://github.com/wdelfuego/nova-wizard/raw/main/doc/screenshots/screenshot.jpg?raw=true)](https://github.com/wdelfuego/nova-wizard/blob/main/doc/screenshots/screenshot.jpg?raw=true)

Package is abandoned
====================

[](#package-is-abandoned)

As of 2025, I have moved my development efforts to [Filament](https://filamentphp.com) and am no longer using or working on this package.

You are free to make and distribute modified versions of this package publicly as long as you distribute it for free, as a stand-alone package and under the same dual licensing model.

License summary
===============

[](#license-summary)

Anyone can use and modify this package in any way they want, including commercially, as long as the commercial use is a) creating implemented wizards and/or b) using the implemented wizards.

Basically, the only condition is that you can't sublicense the package or embed it in a framework unless you do so under the AGPLv3 license (which is incompatible with the Nova framework). More details [below](#license).

Installation
============

[](#installation)

1. Add the package to your project;

    ```
    composer require wdelfuego/nova-wizard
    ```
2. Publish the config file;

    ```
    php artisan vendor:publish --provider="Wdelfuego\NovaWizard\ToolServiceProvider" --tag="config"
    ```
3. Update the config file (in `config/nova-wizard.php`);

    The config file allows you to specify as many wizards as you want, each under their own key.

    - Update the class name to whatever class name you want to use for this wizard (we will create the class later)
    - Update the uri under which the wizard will be available to your end users
    - Optionally, update the window title for this wizard

    Here's an example minimal config for an `AddUserWizard`:

    ```
    use App\Nova\Wizards\AddUserWizard;

    return [
        'add-user' => [
            'class' => AddUserWizard::class,
            'uri' => 'wizard/add-user',
            'windowTitle' => 'Add user'
        ]
    ];
    ```

    The key used for each entry in the config file is the 'wizard key' (here: `add-user`) and will be required to add the wizard views to your `NovaServiceProvider`.
4. Update your `NovaServiceProvider`;

    - Add the following statement to the top of the file:

        `use Wdelfuego\NovaWizard\NovaWizard;`
    - Add the wizard tool to the array returned by the `tools()` method, supplying the wizard key to its constructor:

        ```
         public function tools()
         {
         	return [
         		new NovaWizard('add-user')
         	];
         }
        ```
    - If you manually specify your application menu in the `boot()` method, add a `MenuSection` or `MenuItem` that links to this wizard.

        Specify the wizard key so the correct URL can be generated, like this:

        ```
         MenuItem::link('Add a user', NovaWizard::pathToWizard('add-user'))
        ```
5. Finally, implement the wizard;

    - Create the class file for your wizard. It can go wherever you want, but `/app/Nova/Wizards` is a good default location if you have no preference.
    - Make sure you correctly specify that class for the wizard in `config/nova-wizard.php`
    - Implement the class to extend `Wdelfuego\NovaWizard\AbstractWizard`.
    - You only need to implement the following three methods:
        - `wizardViewData() : array` to define the steps and fields in your wizard, like this:

            ```
            use Laravel\Nova\Fields;

            public function wizardViewData() : array {
                return [
                    'steps' => [
                        [
                            'title'  => 'Step 1/2',
                            'fields' => [
                                Fields\Text::make(__('Username'), 'username'),
                                Fields\Text::make(__('Text field'), 'myText'),
                                Fields\Textarea::make(__('Longer text'), 'myLongerText')
                                    ->help("You can use Help texts on Nova fields like you're used to"),
                                Fields\Number::make(__('Some number'), 'myNumber')
                                    ->rules('required')
                                    ->withMeta(['value' => 60])
                                    ->min(1)
                                    ->step(1),
                            ],
                        ],
                        [
                            'title'  => 'Step 2/2',
                            'fields' => [
                                Fields\Text::make(__('Text field 2'), 'myText2'),
                                Fields\Textarea::make(__('Longer text 2'), 'myLongerText2')
                                    ->help("You can use Help texts on Nova fields like you're used to"),
                                Fields\Number::make(__('Some number 2'), 'myNumber2')
                                    ->rules('required')
                                    ->withMeta(['value' => 60])
                                    ->min(1)
                                    ->step(1),
                            ],
                        ],
                    ],
                ];
            }
            ```
        - `onSubmit($formData, &$context) : bool` to specify what to do when valid wizard data is submitted, like this:

            ```
            public function onSubmit($formData, &$context) : bool {
            	//
            	// When this method gets called, a valid and complete wizard was submitted.
            	//
            	// $formData is an array that contains the data submitted by the user.
            	//
            	// $context is an empty array that you can store arbitrary info in;
            	// it will be passed to the next method so you can use it
            	// to display specific context info to the user on success.

            	// Parse submitted wizard data somehow
            	$user = User::create(['name' => $formData['username']]);
            	$context['newUserId'] = $user->id;

            	// Return true at the end of this method to indicate success
            	return true;

            	// Or return false if the data can not be parsed successfully;
            	// the user will then stay in the form view and have a chance
            	// to revise the data before resubmitting.
            }
            ```
        - `successViewData($context) : array` to specify what message to show to the user when `onSubmit` returns true, like this:

            ```
            public function successViewData($context) : array {

            	return [
            		'message' => 'Successfully created user with id: ' .$context['newUserId']
            	];
            }
            ```

Adding more wizards
===================

[](#adding-more-wizards)

Repeat step 3 to 5 from the Installation steps above for every wizard you want to add to your Laravel Nova app.

Advanced usage
==============

[](#advanced-usage)

Using query parameters
----------------------

[](#using-query-parameters)

As of version 1.1, thanks to a contribution by @olliescase, you can pass query parameters to your wizard URL, that will then be available within the wizard definition so you can customize your wizard or pre-fill certain fields based on the query parameter values.

For example, if you want to use a wizard to do something in the context of a specific Nova resource instance, you could create a Nova `Action` that returns a parametrized URL:

```
return $this->redirect('/' . NovaWizard::pathToWizard('my-wizard') . "?parentId={$resource->id}");

```

Then in the wizard definition you can get the specified parameter value like this:

```
$this->request->get('parentId')

```

Or, if you want to use the same wizard definition for two slightly different forms, you could add it to the application menu twice, but differentiate using a query parameter. You can then get the value of that query parameter in the wizard definition using `$this->request->get('paramName')` so you can customize the wizard fields and how submissions are processed depending on the context.

Support &amp; Documentation
===========================

[](#support--documentation)

For any problems or doubts you might run into, please [open an issue](https://github.com/wdelfuego/nova-wizard/issues) on GitHub.

License
=======

[](#license)

Copyright © 2023 • Willem Vervuurt, Studio Delfuego, wdelfuego

This entire copyright and license notice must be included with any copy, back-up, fork or otherwise modified version of this package.

You can use this package under one of the follwing two licenses:

1. GNU AGPLv3 for GPLv3-or-newer compatible open source projects. Note that this license is not compatible with usage in Nova, so this package can't be used under this license until a version exists that can be included in Laravel/Vue3 projects without depending on Nova. You can find the full terms of this license in LICENSE-agpl-3.0.txt in this repository and can also find a copy on .
2. A perpetual, non-revocable and 100% free (as in beer) do-what-you-want license that allows both non-commercial and commercial use, under the following 6 conditions:

- You can use this package to implement and/or use as many wizards in as many applications on as many servers with as many users as you want and charge for that what you want, as long as you and/or your organization are either a) the developer(s) responsible for implementing the wizard(s), or b) the end user(s) of the implemented wizard(s), or c) both.
- Sublicensing, relicensing, reselling or charging for the redistribution of this package (or a modified version of it) to other developers for them to implement wizard views with is not allowed under this license.
- You are free to make any modifications you want and are not required to make your modifications public or announce them.
- You are free to make and distribute modified versions of this package publicly as long as you distribute it for free, as a stand-alone package and under the same dual licensing model.
- Embedding this package (or a modified version of it) in free or paid-for software libraries or frameworks that are available to developers not within your organization is expressly not allowed under this license. If the software library or framework is GPLv3-or-newer compatible, you are free to do so under the GNU AGPLv3 license.
- The following 2 disclaimers apply:

    - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    - YOU ASSUME ALL RISK ASSOCIATED WITH THE INSTALLATION AND USE OF THE SOFTWARE. LICENSE HOLDERS ARE SOLELY RESPONSIBLE FOR DETERMINING THE APPROPRIATENESS OF USE AND ASSUME ALL RISKS ASSOCIATED WITH ITS USE, INCLUDING BUT NOT LIMITED TO THE RISKS OF PROGRAM ERRORS, DAMAGE TO EQUIPMENT, LOSS OF DATA OR SOFTWARE PROGRAMS, OR UNAVAILABILITY OR INTERRUPTION OF OPERATIONS.

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance38

Infrequent updates — may be unmaintained

Popularity35

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 60% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~28 days

Total

3

Last Release

888d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1326136?v=4)[wdelfuego](/maintainers/wdelfuego)[@wdelfuego](https://github.com/wdelfuego)

---

Top Contributors

[![silentpatrik](https://avatars.githubusercontent.com/u/77385235?v=4)](https://github.com/silentpatrik "silentpatrik (3 commits)")[![olliescase](https://avatars.githubusercontent.com/u/95719736?v=4)](https://github.com/olliescase "olliescase (1 commits)")[![wdelfuego](https://avatars.githubusercontent.com/u/1326136?v=4)](https://github.com/wdelfuego "wdelfuego (1 commits)")

---

Tags

laravelformwizardnovamultistepmulti step

### Embed Badge

![Health badge](/badges/wdelfuego-nova-wizard/health.svg)

```
[![Health](https://phpackages.com/badges/wdelfuego-nova-wizard/health.svg)](https://phpackages.com/packages/wdelfuego-nova-wizard)
```

###  Alternatives

[optimistdigital/nova-sortable

This Laravel Nova package allows you to reorder models in a Nova resource's index view using drag &amp; drop.

2872.1M6](/packages/optimistdigital-nova-sortable)[outl1ne/nova-sortable

This Laravel Nova package allows you to reorder models in a Nova resource's index view using drag &amp; drop.

2861.8M9](/packages/outl1ne-nova-sortable)[optimistdigital/nova-multiselect-field

A multiple select field for Laravel Nova.

3403.5M7](/packages/optimistdigital-nova-multiselect-field)[digital-creative/conditional-container

Provides an easy way to conditionally show and hide fields in your Nova resources.

116593.8k4](/packages/digital-creative-conditional-container)[sbine/route-viewer

A Laravel Nova tool to view your registered routes.

57215.9k](/packages/sbine-route-viewer)[markwalet/nova-modal-response

A Laravel Nova asset for Modal responses on an action.

14720.0k](/packages/markwalet-nova-modal-response)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
