PHPackages                             uttam-official/laravel-panel-generator - 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. [Admin Panels](/categories/admin)
4. /
5. uttam-official/laravel-panel-generator

ActiveLibrary[Admin Panels](/categories/admin)

uttam-official/laravel-panel-generator
======================================

Generate Laravel panel structures such as admin, vendor, seller, customer, and staff panels.

v0.1.0-alpha.1(yesterday)06↑2400%MITCSSPHP ^8.1

Since Jun 13Pushed yesterdayCompare

[ Source](https://github.com/uttam-official/laravel-panel-generator)[ Packagist](https://packagist.org/packages/uttam-official/laravel-panel-generator)[ RSS](/packages/uttam-official-laravel-panel-generator/feed)WikiDiscussions master Synced today

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

UttamOfficial Laravel Panel Generator
=====================================

[](#uttamofficial-laravel-panel-generator)

Composer package:

```
uttam-official/laravel-panel-generator
```

Main command:

```
php artisan panel:generate admin
php artisan panel:generate vendor
php artisan panel:generate --name=vendor
```

This package generates Laravel panels such as `admin`, `vendor`, `seller`, `staff`, or `customer` from reusable template files.

What it generates
-----------------

[](#what-it-generates)

For:

```
php artisan panel:generate admin --register-route --update-vite
```

it creates:

```
resources/views/admin/
resources/js/admin/
resources/css/admin/
routes/admin.php
app/Http/Controllers/Admin/
app/Http/Requests/Admin/
app/Http/Middleware/Admin/
app/Trait/

```

For:

```
php artisan panel:generate vendor --register-route --update-vite
```

it creates:

```
resources/views/vendor/
resources/js/vendor/
resources/css/vendor/
routes/vendor.php
app/Http/Controllers/Vendor/
app/Http/Requests/Vendor/
app/Http/Middleware/Vendor/
app/Trait/

```

`app/Trait` is common for the whole Laravel application. It is not generated inside `Admin`, `Vendor`, or any other panel folder.

Local installation inside a Laravel project
-------------------------------------------

[](#local-installation-inside-a-laravel-project)

Paste this package folder here:

```
your-laravel-project/packages/UttamOfficial/LaravelPanelGenerator

```

The package composer file should be here:

```
your-laravel-project/packages/UttamOfficial/LaravelPanelGenerator/composer.json

```

Then run these commands from your Laravel project root:

```
composer config repositories.laravel-panel-generator path packages/UttamOfficial/LaravelPanelGenerator
composer require uttam-official/laravel-panel-generator:@dev
php artisan optimize:clear
```

After editing package files during local development, run:

```
composer dump-autoload
php artisan optimize:clear
```

If Composer copied instead of symlinked the package, run:

```
composer update uttam-official/laravel-panel-generator -W
php artisan optimize:clear
```

Check the command:

```
php artisan list panel
```

Generate panels
---------------

[](#generate-panels)

Generate admin:

```
php artisan panel:generate admin --register-route --update-vite
```

Generate vendor:

```
php artisan panel:generate vendor --register-route --update-vite
```

Generate with auth middleware:

```
php artisan panel:generate admin --middleware=web,auth --register-route --update-vite
```

Overwrite existing generated files:

```
php artisan panel:generate admin --force --register-route --update-vite
```

After package.json changes, run:

```
npm install
npm run dev
```

or:

```
npm run build
```

Where to paste your panel template files
----------------------------------------

[](#where-to-paste-your-panel-template-files)

Inside the package, use this folder:

```
packages/UttamOfficial/LaravelPanelGenerator/resources/panels/

```

### Default template for all panels

[](#default-template-for-all-panels)

Paste common panel template files here:

```
resources/panels/default/
  views/
  js/
  css/
  controllers/
  requests/
  middleware/
  routes/
  package.json

```

If you run `panel:generate admin` and no `resources/panels/admin` folder exists, the command uses `resources/panels/default`.

### Panel-specific template

[](#panel-specific-template)

For admin-specific files, paste here:

```
resources/panels/admin/
  views/
  js/
  css/
  controllers/
  requests/
  middleware/
  routes/
  package.json

```

For vendor-specific files, paste here:

```
resources/panels/vendor/
  views/
  js/
  css/
  controllers/
  requests/
  middleware/
  routes/
  package.json

```

The command checks the panel-specific folder first. If it does not exist, it uses the default template.

Common system files
-------------------

[](#common-system-files)

Files that should be common for the full Laravel app should go here:

```
resources/common/

```

For traits, paste here:

```
resources/common/trait/

```

Example:

```
resources/common/trait/Validation/FailedValidationTrait.php
resources/common/trait/Model/UuidTrait.php

```

They are copied to:

```
app/Trait/Validation/FailedValidationTrait.php
app/Trait/Model/UuidTrait.php

```

They are **not** copied to:

```
app/Trait/Admin/
app/Trait/Vendor/

```

The default trait namespace is:

```
App\Trait
```

If you prefer Laravel-style plural `App\Traits`, change `config/panel-generator.php`:

```
'paths' => [
    'traits' => app_path('Traits'),
],

'namespaces' => [
    'traits' => 'App\\Traits',
],
```

Where files go after generation
-------------------------------

[](#where-files-go-after-generation)

For `admin`:

```
resources/panels/admin/views/*       -> resources/views/admin/*
resources/panels/admin/js/*          -> resources/js/admin/*
resources/panels/admin/css/*         -> resources/css/admin/*
resources/panels/admin/controllers/* -> app/Http/Controllers/Admin/*
resources/panels/admin/requests/*    -> app/Http/Requests/Admin/*
resources/panels/admin/middleware/*  -> app/Http/Middleware/Admin/*
resources/panels/admin/routes/*      -> routes/admin.php
resources/common/trait/*             -> app/Trait/*

```

For `vendor`:

```
resources/panels/vendor/views/*       -> resources/views/vendor/*
resources/panels/vendor/js/*          -> resources/js/vendor/*
resources/panels/vendor/css/*         -> resources/css/vendor/*
resources/panels/vendor/controllers/* -> app/Http/Controllers/Vendor/*
resources/panels/vendor/requests/*    -> app/Http/Requests/Vendor/*
resources/panels/vendor/middleware/*  -> app/Http/Middleware/Vendor/*
resources/panels/vendor/routes/*      -> routes/vendor.php
resources/common/trait/*              -> app/Trait/*

```

If using the default template:

```
resources/panels/default/views/*       -> resources/views/{panel}/*
resources/panels/default/js/*          -> resources/js/{panel}/*
resources/panels/default/css/*         -> resources/css/{panel}/*
resources/panels/default/controllers/* -> app/Http/Controllers/{Panel}/*
resources/panels/default/requests/*    -> app/Http/Requests/{Panel}/*
resources/panels/default/middleware/*  -> app/Http/Middleware/{Panel}/*
resources/panels/default/routes/*      -> routes/{panel}.php
resources/common/trait/*               -> app/Trait/*

```

Important template tokens
-------------------------

[](#important-template-tokens)

Use tokens in view/controller/request/route/middleware files so the same files can generate `admin`, `vendor`, `seller`, etc.

### Blade views

[](#blade-views)

Use:

```
@extends('___PANEL_VIEW_NAMESPACE___.layouts.app')
@include('___PANEL_VIEW_NAMESPACE___.layouts.partials.sidebar')
@vite(['___PANEL_CSS_PATH___/app.css', '___PANEL_JS_PATH___/app.js'])
{{ route('___PANEL_ROUTE_NAME___dashboard') }}
{{ route('___PANEL_ROUTE_NAME___auth.login') }}
```

For admin, these become:

```
@extends('admin.layouts.app')
@include('admin.layouts.partials.sidebar')
@vite(['resources/css/admin/app.css', 'resources/js/admin/app.js'])
{{ route('admin.dashboard') }}
{{ route('admin.auth.login') }}
```

### Controllers

[](#controllers)

Use:

```
namespace ___PANEL_CONTROLLER_NAMESPACE___;

use ___PANEL_REQUEST_NAMESPACE___\Auth\LoginRequest;

return view('___PANEL_VIEW_NAMESPACE___.dashboard');
return redirect(route('___PANEL_ROUTE_NAME___auth.login'));
```

For admin, this becomes:

```
namespace App\Http\Controllers\Admin;

use App\Http\Requests\Admin\Auth\LoginRequest;

return view('admin.dashboard');
return redirect(route('admin.auth.login'));
```

### Requests

[](#requests)

Paste request templates here:

```
resources/panels/default/requests/Auth/LoginRequest.php

```

Use:

```
namespace ___PANEL_REQUEST_NAMESPACE___\Auth;

use ___COMMON_TRAIT_NAMESPACE___\Validation\FailedValidationTrait;
```

For admin, this becomes:

```
namespace App\Http\Requests\Admin\Auth;

use App\Trait\Validation\FailedValidationTrait;
```

### Middleware

[](#middleware)

Paste middleware templates here:

```
resources/panels/default/middleware/___PANEL_CLASS___Middleware.php

```

Use:

```
namespace ___PANEL_MIDDLEWARE_NAMESPACE___;

class ___PANEL_MIDDLEWARE_CLASS___
{
    // ...
}
```

For admin, this generates:

```
app/Http/Middleware/Admin/AdminMiddleware.php

```

For vendor, this generates:

```
app/Http/Middleware/Vendor/VendorMiddleware.php

```

### Routes

[](#routes)

Paste route templates here:

```
resources/panels/default/routes/___PANEL_SLUG___.php

```

Use:

```
use ___PANEL_CONTROLLER_NAMESPACE___\AuthController;
use ___PANEL_CONTROLLER_NAMESPACE___\DashboardController;
use Illuminate\Support\Facades\Route;

Route::middleware([___PANEL_ROUTE_MIDDLEWARE_ARRAY___])
    ->prefix('___PANEL_ROUTE_PREFIX___')
    ->as('___PANEL_ROUTE_NAME___')
    ->group(function () {
        Route::controller(AuthController::class)->as('auth.')->group(function () {
            Route::get('login', 'login')->name('login');
        });

        Route::controller(DashboardController::class)->group(function () {
            Route::get('/', 'index')->name('dashboard');
        });
    });
```

For admin, this becomes `routes/admin.php` with prefix `admin` and route names like `admin.dashboard`.

package.json dependency merge
-----------------------------

[](#packagejson-dependency-merge)

Paste frontend npm packages into the template package file:

```
resources/panels/default/package.json
resources/panels/admin/package.json
resources/panels/vendor/package.json

```

Example:

```
{
    "dependencies": {
        "@popperjs/core": "^2.11.8",
        "bootstrap": "^5.3.3",
        "jquery": "^3.7.1"
    },
    "devDependencies": {
        "sass": "^1.77.0"
    },
    "scripts": {}
}
```

When you run:

```
php artisan panel:generate admin
```

the command checks the Laravel project's root `package.json` and adds only missing packages. If a package already exists in `dependencies`, `devDependencies`, `peerDependencies`, or `optionalDependencies`, it is skipped.

After generation, run:

```
npm install
```

Vite entries
------------

[](#vite-entries)

The default layout uses Vite:

```
@vite(['___PANEL_CSS_PATH___/app.css', '___PANEL_JS_PATH___/app.js'])
```

For admin, this becomes:

```
@vite(['resources/css/admin/app.css', 'resources/js/admin/app.js'])
```

For vendor, this becomes:

```
@vite(['resources/css/vendor/app.css', 'resources/js/vendor/app.js'])
```

Use this option to try adding entries to `vite.config.js` automatically:

```
php artisan panel:generate admin --update-vite
```

If your Vite config is custom, add entries manually:

```
laravel({
    input: [
        'resources/css/app.css',
        'resources/js/app.js',
        'resources/css/admin/app.css',
        'resources/js/admin/app.js',
    ],
    refresh: true,
})
```

Then run:

```
npm run dev
```

or:

```
npm run build
```

Publish editable templates into the Laravel app
-----------------------------------------------

[](#publish-editable-templates-into-the-laravel-app)

Instead of editing the package directly, you can publish templates:

```
php artisan vendor:publish --tag=panel-generator-panels
php artisan vendor:publish --tag=panel-generator-common
```

Then paste custom files here:

```
resources/vendor/panel-generator/panels/default/
resources/vendor/panel-generator/panels/admin/
resources/vendor/panel-generator/panels/vendor/
resources/vendor/panel-generator/common/trait/

```

The command checks the published template path first. If a matching panel template exists there, it uses that. Otherwise, it uses the package template.

Options
-------

[](#options)

```
php artisan panel:generate admin
php artisan panel:generate admin --force
php artisan panel:generate admin --register-route
php artisan panel:generate admin --middleware=web,auth
php artisan panel:generate admin --template=default
php artisan panel:generate admin --update-vite
php artisan panel:generate admin --skip-views
php artisan panel:generate admin --skip-js
php artisan panel:generate admin --skip-css
php artisan panel:generate admin --skip-assets
php artisan panel:generate admin --skip-controllers
php artisan panel:generate admin --skip-requests
php artisan panel:generate admin --skip-middleware
php artisan panel:generate admin --skip-traits
php artisan panel:generate admin --skip-routes
php artisan panel:generate admin --skip-package-json
```

Generate CRUD modules for a panel
---------------------------------

[](#generate-crud-modules-for-a-panel)

Use this command when the panel already exists, or when you want the command to create/update the panel route file automatically:

```
php artisan panel:make-module User --panel=admin
php artisan panel:make-module Product --panel=vendor
```

With custom fields:

```
php artisan panel:make-module User --panel=admin --fields="name:string,email:string,password:string,status:boolean"
php artisan panel:make-module Product --panel=admin --fields="name:string,description:text:nullable,price:decimal,status:boolean"
```

For `User` in the `admin` panel, the command creates files only when they do not already exist:

```
app/Models/User.php
app/Http/Controllers/Admin/UserController.php
app/Http/Requests/Admin/User/StoreUserRequest.php
app/Http/Requests/Admin/User/UpdateUserRequest.php
database/migrations/YYYY_MM_DD_HHMMSS_create_users_table.php
resources/views/admin/users/index.blade.php
resources/views/admin/users/create.blade.php
resources/views/admin/users/edit.blade.php
resources/views/admin/users/show.blade.php
resources/views/admin/users/_form.blade.php
routes/admin.php

```

It also appends this resource route inside the existing `routes/admin.php` group if the route is not already present:

```
Route::resource('users', \App\Http\Controllers\Admin\UserController::class);
```

Generated route names become:

```
admin.users.index
admin.users.create
admin.users.store
admin.users.show
admin.users.edit
admin.users.update
admin.users.destroy

```

Generated URL examples:

```
/admin/users
/admin/users/create
/admin/users/{user}/edit

```

### Module command options

[](#module-command-options)

```
php artisan panel:make-module User --panel=admin
php artisan panel:make-module User --panel=admin --force
php artisan panel:make-module User --panel=admin --register-route
php artisan panel:make-module User --panel=admin --fields="name:string,email:string,status:boolean"
php artisan panel:make-module User --panel=admin --table=users
php artisan panel:make-module User --panel=admin --route-uri=users
php artisan panel:make-module User --panel=admin --route-name=users
php artisan panel:make-module User --panel=admin --skip-model
php artisan panel:make-module User --panel=admin --skip-migration
php artisan panel:make-module User --panel=admin --skip-controller
php artisan panel:make-module User --panel=admin --skip-requests
php artisan panel:make-module User --panel=admin --skip-views
php artisan panel:make-module User --panel=admin --skip-routes
```

Use `--register-route` when the command creates a new `routes/{panel}.php` file and you also want it to add this line to `routes/web.php`:

```
require __DIR__ . '/admin.php';
```

### Field syntax

[](#field-syntax)

Use this format:

```
field:type
field:type:nullable

```

Examples:

```
--fields="name:string,email:string,status:boolean"
--fields="title:string,description:text:nullable,price:decimal,published_at:date:nullable"
--fields="category_id:foreignId,name:string,sort_order:integer,status:boolean"
```

Supported basic types:

```
string
text
longText
integer
bigInteger
foreignId
boolean
date
dateTime
timestamp
decimal
json

```

### Where to customize module CRUD templates

[](#where-to-customize-module-crud-templates)

Default module templates are inside the package:

```
resources/modules/default/
  models/
  migrations/
  controllers/
  requests/
  views/
  routes/

```

To publish editable module templates into your Laravel app:

```
php artisan vendor:publish --tag=panel-generator-modules
```

Then edit:

```
resources/vendor/panel-generator/modules/default/

```

You can also create a module-specific template. For example:

```
resources/vendor/panel-generator/modules/user/
resources/vendor/panel-generator/modules/product/

```

The command checks the module-specific template first, then falls back to `default`.

### Important module template tokens

[](#important-module-template-tokens)

Use these tokens inside module model, migration, controller, request, view, and route templates:

```
___PANEL_SLUG___
___PANEL_CLASS___
___PANEL_VIEW_NAMESPACE___
___PANEL_CONTROLLER_NAMESPACE___
___MODULE_CLASS___
___MODULE_TITLE___
___MODULE_PLURAL_TITLE___
___MODULE_VARIABLE___
___MODULE_PLURAL_VARIABLE___
___MODULE_TABLE___
___MODULE_ROUTE_URI___
___MODULE_ROUTE_NAME___
___MODULE_ROUTE_PREFIX___
___MODULE_VIEW_NAMESPACE___
___MODULE_MODEL_NAMESPACE___
___MODULE_MODEL_FULL_CLASS___
___MODULE_CONTROLLER_NAMESPACE___
___MODULE_REQUEST_NAMESPACE___
___MODULE_STORE_REQUEST_CLASS___
___MODULE_UPDATE_REQUEST_CLASS___
___MODULE_FILLABLE_ARRAY___
___MODULE_CASTS_ARRAY___
___MODULE_MIGRATION_COLUMNS___
___MODULE_STORE_RULES___
___MODULE_UPDATE_RULES___
___MODULE_FORM_FIELDS___
___MODULE_TABLE_HEADERS___
___MODULE_TABLE_CELLS___
___MODULE_SHOW_ROWS___

```

For `User --panel=admin`, examples become:

```
___PANEL_VIEW_NAMESPACE___  => admin
___MODULE_VIEW_NAMESPACE___ => admin.users
___MODULE_ROUTE_PREFIX___   => admin.users.
___MODULE_MODEL_FULL_CLASS___ => App\Models\User

```

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance100

Actively maintained with recent releases

Popularity6

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity28

Early-stage or recently created project

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

Unknown

Total

1

Last Release

1d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b9674ca7e8e5d3e021380adf122bd18049b9356119d8b632f4da5dc7d40a54c8?d=identicon)[uttam-official](/maintainers/uttam-official)

### Embed Badge

![Health badge](/badges/uttam-official-laravel-panel-generator/health.svg)

```
[![Health](https://phpackages.com/badges/uttam-official-laravel-panel-generator/health.svg)](https://phpackages.com/packages/uttam-official-laravel-panel-generator)
```

###  Alternatives

[laravel/ai

The official AI SDK for Laravel.

9782.1M155](/packages/laravel-ai)[illuminate/queue

The Illuminate Queue package.

20432.2M1.5k](/packages/illuminate-queue)[moonshine/moonshine

Laravel administration panel

1.3k239.9k73](/packages/moonshine-moonshine)[tallstackui/tallstackui

TallStackUI is a powerful suite of Blade components that elevate your workflow of Livewire applications.

719160.4k12](/packages/tallstackui-tallstackui)[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)[erag/laravel-disposable-email

A Laravel package to detect and block disposable email addresses.

252143.0k](/packages/erag-laravel-disposable-email)

PHPackages © 2026

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