PHPackages                             nativecodein/laravel-install-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. [Localization &amp; i18n](/categories/localization)
4. /
5. nativecodein/laravel-install-wizard

ActiveLibrary[Localization &amp; i18n](/categories/localization)

nativecodein/laravel-install-wizard
===================================

A modern, multilingual Laravel installation wizard — shadcn-style UI, light/dark/system theme, RTL support, and zero CDN runtime dependencies.

v1.0.1(3w ago)11MITPHPPHP ^8.1CI passing

Since May 19Pushed 3w agoCompare

[ Source](https://github.com/nativecodein/laravel-install-wizard)[ Packagist](https://packagist.org/packages/nativecodein/laravel-install-wizard)[ Docs](https://github.com/nativecodein/laravel-install-wizard)[ RSS](/packages/nativecodein-laravel-install-wizard/feed)WikiDiscussions main Synced 1w ago

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

laravel-install-wizard
======================

[](#laravel-install-wizard)

 A minimal, modern, multilingual Laravel installation wizard.
 shadcn-style UI · light / dark / system theme · 10 languages · zero CDN runtime deps.

 [![Latest Version on Packagist](https://camo.githubusercontent.com/9e2ef4c6817a12706d3ea71192c9e662b479291f7a632dfb7965006f46d1eb0a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6e6174697665636f6465696e2f6c61726176656c2d696e7374616c6c2d77697a6172642e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/nativecodein/laravel-install-wizard) [![Total Downloads](https://camo.githubusercontent.com/77a564362c4942481cf9c64a33cd0a84d50511baa0d93e9868f610843b34eac3/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6e6174697665636f6465696e2f6c61726176656c2d696e7374616c6c2d77697a6172642e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/nativecodein/laravel-install-wizard) [![PHP Version](https://camo.githubusercontent.com/9a374fcfa75fcb9f1d9ed11930ed1e708d55ef8921a7bf10c0dc7cf3b0e1d7a5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f6e6174697665636f6465696e2f6c61726176656c2d696e7374616c6c2d77697a6172642e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/nativecodein/laravel-install-wizard) [![Tests](https://camo.githubusercontent.com/37b07bc614bb18cc7b8bcf5087341698ca983abb254a21b548de7b83813267fd/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6e6174697665636f6465696e2f6c61726176656c2d696e7374616c6c2d77697a6172642f74657374732e796d6c3f6272616e63683d6d61696e267374796c653d666c61742d737175617265266c6162656c3d7465737473)](https://github.com/nativecodein/laravel-install-wizard/actions) [![License](https://camo.githubusercontent.com/e27989bad94cd4267084b178c1c15b99535018dd79a5db5cc84995dc303aaae8/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6e6174697665636f6465696e2f6c61726176656c2d696e7374616c6c2d77697a6172642e7376673f7374796c653d666c61742d737175617265)](LICENSE)

---

When a fresh Laravel app has not yet been installed, `laravel-install-wizard` gently redirects every route to a clean web-based installer. The user names the app, configures the environment and database, sees PHP requirement and folder permission checks, then clicks **Install**. A `.installed` lock file is written and the wizard never appears again.

Table of contents
-----------------

[](#table-of-contents)

- [Highlights](#highlights)
- [Screenshots](#screenshots)
- [Requirements](#requirements)
- [Installation](#installation)
- [Quick start](#quick-start)
- [Configuration](#configuration)
- [Multilingual support](#multilingual-support)
- [Theming](#theming)
- [Customizing views and assets](#customizing-views-and-assets)
- [Resetting installation](#resetting-installation)
- [Security](#security)
- [Testing](#testing)
- [Contributing](#contributing)
- [Versioning](#versioning)
- [Credits](#credits)
- [License](#license)

Highlights
----------

[](#highlights)

- **Multi-step wizard** — Welcome → Environment → Database → Requirements → Permissions → Install
- **Dynamic branding** — enter `NativeCode` and the installer becomes the *NativeCode Installer* everywhere
- **Live database test** — MySQL, PostgreSQL, SQLite, SQL Server, validated before continuing
- **Safe `.env` writer** — preserves comments, leaves unrelated keys alone, validates key format
- **10 languages out of the box** — English, Spanish, French, German, Portuguese, Italian, Japanese, Chinese, Arabic (RTL), Hindi
- **Light / Dark / System theme** — `localStorage` persistence, OS-preference reactive, no FOUC
- **shadcn-style UI** — HSL CSS variables, Outfit font, accessible menus, keyboard nav
- **Zero CDN runtime deps** — all CSS, JS and confetti inlined; only Google Fonts for Outfit
- **Production-ready** — works without JavaScript via progressive enhancement
- **Auto-discovered** — drop in via Composer, no service-provider wiring required

Screenshots
-----------

[](#screenshots)

> Add screenshots here once the package is hosted. Suggested shots: `docs/welcome-light.png`, `docs/database-dark.png`, `docs/complete-rtl.png`.

```
[ welcome — light ]   [ database — dark ]   [ complete — confetti ]

```

Requirements
------------

[](#requirements)

- PHP 8.1, 8.2, 8.3 or 8.4
- Laravel 10, 11 or 12

Installation
------------

[](#installation)

```
composer require nativecodein/laravel-install-wizard
```

The service provider is auto-registered. On first request, since `storage/.installed` doesn't exist yet, every route redirects to `/install`.

### Publishing files (optional)

[](#publishing-files-optional)

```
# everything
php artisan vendor:publish --tag=installwizard

# or individually
php artisan vendor:publish --tag=installwizard-config
php artisan vendor:publish --tag=installwizard-views
php artisan vendor:publish --tag=installwizard-lang
php artisan vendor:publish --tag=installwizard-assets
```

Quick start
-----------

[](#quick-start)

1. Install via Composer.
2. Open any route in your Laravel app — you'll be redirected to `/install`.
3. Enter your application name (e.g. `NativeCode`).
4. Fill in environment, database, watch the requirement and permission checks pass.
5. Click **Install NativeCode**. The package writes `.env`, generates `APP_KEY`, clears caches, creates `storage/.installed`.
6. Confetti fires. You're sent back to the route you originally requested.
7. Future visits never see the wizard again.

Configuration
-------------

[](#configuration)

After publishing the config, all behavior lives in `config/installwizard.php`:

KeyDefaultDescription`installed_file``storage_path('.installed')`Lock file that gates the wizard`route_prefix``install`URL prefix for wizard routes`auto_apply_middleware``true`Append the gating middleware to the `web` group automatically`redirect_after_install``/`Fallback target after install if no intended URL`required_extensions`12 standard extsPHP extensions checked in step 4`writable_paths`storage + bootstrap/cachePaths verified in step 5`final.run_migrations``false`Run `migrate --force` at the end`final.run_seeders``false`Run `db:seed --force` at the end`final.generate_key``true`Generate `APP_KEY` if missing`final.clear_caches``true`Clear config/route/view/cache stores`locales`10 localesLanguages offered in the switcher`rtl_locales``['ar','he','fa','ur']`Forced right-to-left layout`default_theme``system`Initial theme: `light`, `dark`, or `system`Multilingual support
--------------------

[](#multilingual-support)

Ten locales ship out of the box. A globe button in the header opens a language picker; the choice persists in the user's session.

CodeLanguageCodeLanguage`en`English`it`Italiano`es`Español`ja`日本語`fr`Français`zh`中文`de`Deutsch`ar`العربية (RTL)`pt`Português`hi`हिन्दी### Adding a language

[](#adding-a-language)

```
php artisan vendor:publish --tag=installwizard-lang
```

Create `lang/vendor/installwizard/{locale}/messages.php`, copy keys from `en/messages.php`, translate, then declare it in config:

```
// config/installwizard.php
'locales' => [
    'en' => 'English',
    'tr' => 'Türkçe', // new
],
'rtl_locales' => ['ar', 'he', 'fa', 'ur'], // add new RTL locales here
```

RTL locales render with `dir="rtl"` automatically.

Theming
-------

[](#theming)

The theme toggle in the header offers three modes:

- **Light** — `` has no `dark` class
- **Dark** — ``
- **System** — follows `prefers-color-scheme` and reacts live to OS changes

The choice is stored in `localStorage` under `installwizard.theme`. An inline `` in `` applies the class before paint, so there is no flash.

### Customizing colors

[](#customizing-colors)

Publish the views, then edit the CSS variables at the top of `resources/views/vendor/installwizard/layout.blade.php`:

```
:root {
    --primary: 240 5.9% 10%;
    --background: 0 0% 100%;
    /* … */
}
.dark {
    --primary: 0 0% 98%;
    /* … */
}
```

All variables follow [shadcn/ui](https://ui.shadcn.com) conventions — HSL component triplets consumed with `hsl(var(--token))`.

Customizing views and assets
----------------------------

[](#customizing-views-and-assets)

```
php artisan vendor:publish --tag=installwizard-views
```

Views land in `resources/views/vendor/installwizard/` and override the package versions automatically. Edit them however you like — the package will pick up your changes immediately.

Assets are inlined into the layout by default, so publishing CSS/JS is only needed if you want to bundle the wizard into your own Vite pipeline.

Resetting installation
----------------------

[](#resetting-installation)

```
# wipe the lock file — wizard appears on the next request
rm storage/.installed
```

Or programmatically:

```
app(\Nativecodein\LaravelInstallWizard\Services\Installer::class)->removeLockFile();
```

Security
--------

[](#security)

- The `EnvWriter` validates env keys against `/^[A-Z_][A-Z0-9_]*$/` and rejects anything else.
- Existing comments and unrelated `.env` values are preserved during writes.
- All forms are CSRF-protected through the `web` middleware group.
- The locale switcher validates against the configured allow-list before persisting.
- The gating middleware only stores intended URLs for GET requests (never AJAX/XHR), preventing redirect loops.
- API requests get a 503 JSON response instead of a redirect, preventing fetch/axios redirect loops.
- No external CDN dependencies at runtime — all CSS, JS and confetti are inlined.

If you discover a security vulnerability, please email **** rather than opening a public issue.

Testing
-------

[](#testing)

```
composer install
vendor/bin/phpunit
```

The suite uses [Orchestra Testbench](https://github.com/orchestral/testbench) and covers:

- redirects when not installed / access granted when installed
- creation of the `.installed` lock file
- safe `.env` writing (comment &amp; key preservation)
- database tester (success &amp; failure paths)
- requirement checker (extensions, writable paths)
- middleware redirect-loop avoidance
- locale persistence, RTL detection, per-locale translation rendering

Contributing
------------

[](#contributing)

Contributions are welcome. To get started:

```
git clone https://github.com/nativecodein/laravel-install-wizard.git
cd laravel-install-wizard
composer install
vendor/bin/phpunit
```

### Submitting changes

[](#submitting-changes)

1. Fork the repo and create a feature branch: `git checkout -b feature/your-thing`
2. Write or update tests for your change.
3. Ensure `vendor/bin/phpunit` passes locally.
4. Open a pull request describing the *why* (motivation) and the *what* (change summary).

### Reporting issues

[](#reporting-issues)

When opening a bug report, please include:

- Laravel and PHP versions (`php artisan --version`, `php -v`)
- The contents of `config/installwizard.php` if you've customized it
- Browser and OS for UI bugs
- A minimal reproduction repo if possible

### Translations

[](#translations)

To contribute a new language, copy `src/resources/lang/en/messages.php`, translate, and submit a PR. Native speakers reviewing existing translations are also very welcome.

### Code style

[](#code-style)

This project follows PSR-12. Keep controllers thin, services pure, and Blade views accessible. Avoid introducing runtime CDN dependencies — everything that ships in the layout is inlined deliberately.

Versioning
----------

[](#versioning)

This package follows [Semantic Versioning](https://semver.org). Breaking changes only ship in major releases.

Credits
-------

[](#credits)

- [NativeCode](https://nativecode.in) — original author and maintainer
- [Laravel](https://laravel.com) — the framework this package extends
- [shadcn/ui](https://ui.shadcn.com) — design tokens and component vocabulary that inspired the UI
- [Outfit](https://fonts.google.com/specimen/Outfit) — typeface
- All [contributors](https://github.com/nativecodein/laravel-install-wizard/contributors)

License
-------

[](#license)

The MIT License (MIT). Please see the [LICENSE](LICENSE) file for more information.

---

 Contributed by [**NativeCode**](https://nativecode.in)

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance96

Actively maintained with recent releases

Popularity4

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity43

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~0 days

Total

2

Last Release

21d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/e03b544ea991ef6b77ad20073cc179154eee019e45dbc97216ac94e063bc8124?d=identicon)[nativecodein](/maintainers/nativecodein)

---

Top Contributors

[![iamkbkarthikeyan](https://avatars.githubusercontent.com/u/39895890?v=4)](https://github.com/iamkbkarthikeyan "iamkbkarthikeyan (4 commits)")

---

Tags

install-wizardinstaller-scriptlaravel-install-wizardlaravel-installerlaravel-setup-wizardlaravel-web-installersetup-wizardwizardlaraveli18ninstallermultilinguallaravel-packagewizardshadcndark-modeshadcn-uirtllaravel Installerlaravel setupinstallation-wizardsetup-wizardlaravel-web-installerlaravel-install-wizardlaravel-setup-wizardinstall-wizard

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/nativecodein-laravel-install-wizard/health.svg)

```
[![Health](https://phpackages.com/badges/nativecodein-laravel-install-wizard/health.svg)](https://phpackages.com/packages/nativecodein-laravel-install-wizard)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[laravel/ai

The official AI SDK for Laravel.

9782.1M153](/packages/laravel-ai)[moonshine/moonshine

Laravel administration panel

1.3k239.9k72](/packages/moonshine-moonshine)[outhebox/laravel-translations

Manage your Laravel translations with a beautiful UI. Add, edit, delete, import, and export translations with ease.

81096.3k](/packages/outhebox-laravel-translations)[erag/laravel-lang-sync-inertia

A powerful Laravel package for syncing and managing language translations across backend and Inertia.js (Vue/React) frontends, offering effortless localization, auto-sync features, and smooth multi-language support for modern Laravel applications.

4721.5k](/packages/erag-laravel-lang-sync-inertia)[jayesh/laravel-gemini-translator

An interactive command to extract and generate Laravel translations using Gemini AI.

712.2k1](/packages/jayesh-laravel-gemini-translator)

PHPackages © 2026

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