PHPackages                             christyoga123/vuelament - 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. christyoga123/vuelament

ActiveLibrary[Admin Panels](/categories/admin)

christyoga123/vuelament
=======================

Lightning-fast Admin Dashboard &amp; CRUD Generator for Laravel (VILT Stack)

1.7.7(3mo ago)142MITPHPPHP ^8.2

Since Mar 6Pushed 3mo agoCompare

[ Source](https://github.com/ChristYoga123/vuelament)[ Packagist](https://packagist.org/packages/christyoga123/vuelament)[ Docs](https://github.com/christyoga123/vuelament)[ RSS](/packages/christyoga123-vuelament/feed)WikiDiscussions main Synced 3w ago

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

🚀 Vuelament
===========

[](#-vuelament)

A lightning-fast, lightweight, and modern Admin Dashboard &amp; CRUD Generator for Laravel.
 Built on the VILT stack (Vue 3, Inertia.js, Laravel, Tailwind CSS) and powered by Shadcn Vue for a gorgeous UI.

[![Latest Version on Packagist](https://camo.githubusercontent.com/a10a5a4af150eca8a6e4127f518ccf9d2324ab3a6087b838b672057ad8e67640/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636872697374796f67613132332f7675656c616d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/christyoga123/vuelament)[![License](https://camo.githubusercontent.com/288276279f21debaa8ca36611328b3e07271abb69da5176d744dc43b3a9443d5/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f636872697374796f67613132332f7675656c616d656e742e7376673f7374796c653d666c61742d737175617265)](LICENSE)[![PHP Version](https://camo.githubusercontent.com/543686373e8cb9bbfbb9eb0ba358ce0e471955db4ee4562564c0775a9b48716b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f7068702d762f636872697374796f67613132332f7675656c616d656e742e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/christyoga123/vuelament)

---

✨ Features
----------

[](#-features)

- **Ultra Lightweight**: Minimal dependencies, split code-chunking, and no bloat.
- **Beautiful UI**: Uses Tailwind CSS v4 and Shadcn-Vue for a premium, accessible, and easily customizable design.
- **VILT Stack**: Seamless SPA experience powered by Laravel, Inertia, Vue 3, and Tailwind.
- **Filament-Inspired Architecture**: Panel-first, module-based structure with page classes, header actions, and service-based action handling.
- **No Per-Model Controllers**: Generic `ResourceRouteController` handles all CRUD routing automatically — zero boilerplate.
- **Complete Form Builder**: Supports Rich Editor (Vue Quill), Date/Time Pickers (VueDatePicker), File Uploads, Selects, Toggles, Checkboxes, Radios, and responsive Grid Layouts.
- **Client-Side Form Reactivity**: Show/hide, enable/disable, and change required state of fields **instantly without server requests**.
- **Robust Table Builder**: Supports filtering, search, pagination, bulk actions, column toggling, and rich column types (Text, Badge, Toggle, Checkbox, Image, Icon).
- **Service-Based Actions**: Business logic lives in dedicated Service classes — testable, reusable, and separated from framework concerns.
- **Dynamic Modals**: Conditional Action dialogs, flexible modal widths, click-away handling, and dangerous action confirmations.
- **Multi-Panel Support**: Run multiple isolated admin panels (Admin, Sales, etc.) with zero conflict.

📦 Requirements
--------------

[](#-requirements)

- **PHP** 8.2+
- **Laravel** 11.x / 12.x
- **Node.js** 18+ &amp; NPM

---

🛠️ Installation (Step-by-Step Manual)
-------------------------------------

[](#️-installation-step-by-step-manual)

Due to frequent issues with automated Shadcn-Vue installations and Tailwind CSS versions, we highly recommend setting up Vuelament and Shadcn-Vue **manually** following these best practices. Let's build your panel step-by-step!

### 1. Install via Composer

[](#1-install-via-composer)

**Gunakan constraint versi stabil** (bukan `dev-main`) agar dapat update yang ter-tag (mis. 1.7.1):

```
composer require christyoga123/vuelament:^1.7
```

Atau di `composer.json`:

```
"christyoga123/vuelament": "^1.7"
```

Lalu `composer update christyoga123/vuelament` akan mengambil rilis terbaru (mis. 1.7.1). Hindari `dev-main` di production.

### 2. Scaffold Configuration &amp; Base Layouts

[](#2-scaffold-configuration--base-layouts)

Run the install command to publish config &amp; Blade, generate the panel provider, and scaffold Vite/Inertia. **Vue/JS assets (Pages, Layouts, components) are not copied** — they stay in `vendor/christyoga123/vuelament/resources/js`, so when you run `composer update christyoga123/vuelament` the UI (forms, tables, etc.) updates automatically.

```
php artisan vuelament:install
```

To override or customize specific Vue files, copy them into your app first:

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

Then edit the copies in `resources/js/Pages/Vuelament`, `resources/js/Layouts`, or `resources/js/components/vuelament` as needed.

### 3. Install NPM Dependencies

[](#3-install-npm-dependencies)

Install Inertia, Vue, Tailwind plugins, and other essential Vuelament dependencies:

```
npm install @inertiajs/vue3 @vitejs/plugin-vue @vueuse/core @vueup/vue-quill @vuepic/vue-datepicker lucide-vue-next vue-sonner reka-ui class-variance-authority clsx tailwind-merge tw-animate-css
npm install -D typescript vue-tsc
```

### 4. Setup Shadcn-Vue (Manual Initialization)

[](#4-setup-shadcn-vue-manual-initialization)

Run the Shadcn-Vue initialization wizard:

```
npx shadcn-vue@latest init
```

Choose your preferred settings. Make sure to match this `components.json` layout, specifically setting `"typescript": false` and your aliases to `@/components` and `@/lib/utils`:

```
{
  "$schema": "https://shadcn-vue.com/schema.json",
  "style": "new-york",
  "typescript": false,
  "tailwind": {
    "config": "",
    "css": "resources/css/app.css",
    "baseColor": "neutral",
    "cssVariables": true,
    "prefix": ""
  },
  "iconLibrary": "lucide",
  "aliases": {
    "components": "@/components",
    "utils": "@/lib/utils",
    "ui": "@/components/ui",
    "lib": "@/lib",
    "composables": "@/composables"
  }
}
```

### 5. Install Shadcn-Vue Required Components

[](#5-install-shadcn-vue-required-components)

Vuelament relies on several key components. Install them in one go:

```
npx shadcn-vue@latest add alert-dialog avatar breadcrumb button card checkbox dialog dropdown-menu input label pagination popover radio-group scroll-area select separator sheet sidebar skeleton sonner switch table textarea tooltip
```

*Tip: If you encounter an error trying to pull the `sidebar` component (due to strict typescript rules), temporarily change `"typescript": true` inside `components.json`, run the add command again, and revert back to `false`.*

### 6. Run Migrations &amp; Create Admin

[](#6-run-migrations--create-admin)

Finally, finish the setup by running your migrations, creating an initial user, and starting your dev server:

```
php artisan migrate
php artisan vuelament:user
npm run dev
php artisan serve
```

Visit **`http://localhost:8000/admin/login`** to access your dashboard!

**Upgrading:** If you see "Failed to resolve import @vuelament/AppWrapper.vue", your `vite.config.js` is missing the `@vuelament` alias — run **`php artisan vuelament:install`** once. If you see "Failed to resolve import @/lib/utils", run install to create `resources/js/lib/utils.js`. If the **sidebar overlaps the main content** (layout broken), Tailwind isn’t scanning the vendor Vue files — run **`php artisan vuelament:install`** to add `@source "../../vendor/christyoga123/vuelament/resources/js/**/*.vue"` to `resources/css/app.css` so classes like `lg:pl-64` are generated. If you previously published Vue files, remove them from `resources/js` so the app uses the copy in `vendor`.

### Updating Shadcn-Vue components

[](#updating-shadcn-vue-components)

Shadcn-Vue components live in your app (`resources/js/components/ui/`), so they don’t update automatically. To pull the latest version of a component from the registry, run:

```
npx shadcn-vue@latest add
```

Example: `npx shadcn-vue@latest add button sonner`. If the file already exists, the CLI will usually ask whether to overwrite. Choose overwrite to get the new code — if you’ve customized that file, merge your changes manually or keep a backup first.

---

📁 Architecture — Panel-First, Module-Based
------------------------------------------

[](#-architecture--panel-first-module-based)

```
app/Vuelament/{Panel}/{Model}/
    ├── Resources/              ← CRUD page classes (like Filament)
    │    ├── List{Model}s.php        → getHeaderActions(): [CreateAction::make()]
    │    ├── Create{Model}.php       → getHeaderActions(), getFormActions()
    │    └── Edit{Model}.php         → getHeaderActions(), getFormActions()
    │
    ├── Pages/                  ← Custom pages (non-CRUD)
    │
    ├── Services/               ← Business logic (service-based actions)
    │    └── {Model}Service.php
    │
    ├── Widgets/                ← Dashboard widgets
    │
    └── {Model}Resource.php     ← Form schema, table schema, getPages()

```

> **No per-model controller needed!** The framework's generic `ResourceRouteController` handles all CRUD routing automatically. You only need Resource + Page classes + Services.

---

🧩 Artisan Commands
------------------

[](#-artisan-commands)

### Generate a Resource (full module)

[](#generate-a-resource-full-module)

```
# Multi-page mode (default) — generates List, Create, Edit pages
php artisan vuelament:resource Product --panel=Admin

# Single mode — modal-based create/edit (ManageProducts)
php artisan vuelament:resource Product --panel=Admin --simple

# Auto-generate form/table from database columns
php artisan vuelament:resource Product --panel=Admin --generate
```

This generates the full module structure:

```
app/Vuelament/Admin/Product/
    ├── Resources/
    │    ├── ListProducts.php       ← with CreateAction in getHeaderActions()
    │    ├── CreateProduct.php
    │    └── EditProduct.php
    ├── Pages/
    ├── Services/
    │    └── ProductService.php
    ├── Widgets/
    └── ProductResource.php         ← with getPages() referencing page classes

```

### Generate a Service

[](#generate-a-service)

```
# Basic — creates ProductService in the Product module
php artisan vuelament:service Product --panel=Admin

# With explicit resource module
php artisan vuelament:service Payment --panel=Admin --resource=Order
```

### Generate a Custom Page

[](#generate-a-custom-page)

```
# Standalone page
php artisan vuelament:page Analytics --panel=Admin

# Page attached to a resource
php artisan vuelament:page Report --panel=Admin --resource=User
```

### Generate a Panel

[](#generate-a-panel)

```
php artisan vuelament:panel Sales --id=sales
```

### Create Admin User

[](#create-admin-user)

```
php artisan vuelament:user
```

---

🚀 Usage Guide
-------------

[](#-usage-guide)

### Page Classes — Like Filament

[](#page-classes--like-filament)

Page classes define **page-level actions** via `getHeaderActions()`. This is identical to Filament's pattern.

```
// app/Vuelament/Admin/User/Resources/ListUsers.php
use ChristYoga123\Vuelament\Core\Pages\ListRecords;
use ChristYoga123\Vuelament\Components\Actions\CreateAction;

class ListUsers extends ListRecords
{
    protected static ?string $resource = UserResource::class;

    public static function getHeaderActions(): array
    {
        return [
            CreateAction::make(),
            // ExportAction::make(),
            // ImportAction::make(),
        ];
    }
}
```

### Resource Registration — getPages()

[](#resource-registration--getpages)

Resources register their CRUD page classes and custom pages in `getPages()`:

```
public static function getPages(): array
{
    return [
        // CRUD page classes — framework reads getHeaderActions() from these
        'index'  => Resources\ListUsers::class,
        'create' => Resources\CreateUser::class,
        'edit'   => Resources\EditUser::class,

        // Custom pages
        'report' => Pages\ReportPage::route('/{record}/report'),
    ];
}
```

### Table Schema — Row-Level Actions Only

[](#table-schema--row-level-actions-only)

Table schemas contain only **row-level inline actions**. Page-level actions (like "Create") belong in `getHeaderActions()` on the page class.

```
public static function tableSchema(): PageSchema
{
    return PageSchema::make()
        ->components([
            Table::make()
                ->query(fn() => User::query()->latest())
                ->columns([
                    TextColumn::make('name')->searchable()->sortable(),
                    TextColumn::make('email')->sortable()->searchable(),
                    ToggleColumn::make('is_active')->label('Active'),
                ])
                ->actions([
                    // ✅ Row-level actions (inline in table)
                    Action::make('deactivate')
                        ->icon('user-x')
                        ->color('warning')
                        ->requiresConfirmation('Deactivate User', 'Are you sure?')
                        ->action([UserService::class, 'deactivate']),
                    EditAction::make(),
                    DeleteAction::make(),
                ])
                ->bulkActions([
                    ActionGroup::make('Bulk Actions')
                        ->icon('list')
                        ->actions([
                            DeleteBulkAction::make(),
                            RestoreBulkAction::make(),
                        ]),
                ])
                ->filters([
                    TrashFilter::make(),
                ])
                ->searchable()
                ->paginated()
                ->selectable(),
        ]);
}
```

### Defining Forms

[](#defining-forms)

```
use ChristYoga123\Vuelament\Components\Layout\Grid;
use ChristYoga123\Vuelament\Components\Layout\Section;
use ChristYoga123\Vuelament\Components\Form\TextInput;
use ChristYoga123\Vuelament\Components\Form\Toggle;

public static function formSchema(): PageSchema
{
    return PageSchema::make()
        ->components([
            Section::make('General Information')
                ->components([
                    Grid::make(2)->components([
                        TextInput::make('name')->required()->uniqueIgnoreRecord(),
                        TextInput::make('email')->email()->required()->uniqueIgnoreRecord(),
                    ]),
                    Toggle::make('is_active')
                        ->label('Status Active')
                        ->hint('Turn off to prevent user login.'),
                    TextInput::make('password')
                        ->password()
                        ->revealable()
                        ->dehydrateStateUsing(fn (string $state): string => Hash::make($state))
                        ->saved(fn (?string $state): bool => filled($state))
                        ->required(fn (string $operation): bool => $operation === 'create'),
                ])
        ]);
}
```

#### Available Form Controls

[](#available-form-controls)

- `TextInput` — text, email, password, number, with prefix/suffix and revealable support
- `Textarea` — multi-line text input
- `RichEditor` — Rich text editor (powered by VueQuill)
- `DatePicker`, `TimePicker`, `DateRangePicker` — Date/time selection (powered by VuePic)
- `Select` — Dropdown selection
- `Checkbox` — Single or multiple checkbox group
- `Radio` — Radio button group with horizontal/vertical layout
- `Toggle` — Switch toggle (powered by Shadcn Switch)
- `FileInput` — File upload with drag &amp; drop, preview, and reorder support
- `Repeater` — Dynamic repeatable field groups

---

⚡ Service-Based Actions
-----------------------

[](#-service-based-actions)

Unlike Filament (where actions use Livewire Closures), Vuelament uses **dedicated Service classes** for business logic. This makes actions testable, reusable, and framework-agnostic.

### Flow

[](#flow)

```
Resource   →  defines actions with form + service callable
   ↓
Action     →  captures form data, resolves service from container
   ↓
Service    →  executes business logic (pure PHP, testable)
   ↓
Database   →  Eloquent operations

```

### Action in Resource

[](#action-in-resource)

```
Action::make('deactivate')
    ->icon('user-x')
    ->color('warning')
    ->requiresConfirmation('Deactivate User', 'Are you sure?')
    ->action([UserService::class, 'deactivate'])
```

### Service Class

[](#service-class)

```
// app/Vuelament/Admin/User/Services/UserService.php
class UserService
{
    public function deactivate(User $user, array $data = []): void
    {
        $user->update(['is_active' => false]);
    }
}
```

### How It Works

[](#how-it-works)

The framework resolves the service instance from the container and injects dependencies:

```
$instance = app(UserService::class);

app()->call([$instance, 'deactivate'], [
    'user'   => $record,    // injected by lowercase model basename
    'record' => $record,    // also available as generic 'record'
    'data'   => $formData,  // form data from modal
]);
```

### Actions with Forms

[](#actions-with-forms)

```
Action::make('assign_role')
    ->icon('shield')
    ->color('success')
    ->form([
        Select::make('role')->options([
            'admin' => 'Admin',
            'editor' => 'Editor',
        ])->required(),
    ])
    ->action([UserService::class, 'assignRole'])
```

---

🎯 Form Reactivity (Client-Side)
-------------------------------

[](#-form-reactivity-client-side)

Vuelament evaluates form visibility, disabled, and required states **entirely on the client** — no server requests needed.

### ⚔️ Vuelament vs Filament

[](#️-vuelament-vs-filament)

InteractionFilament (Livewire)Vuelament (Vue 3 + Inertia)**Toggle field to show another**🛑 Network request, re-renders component⚡ **Instant**. JavaScript only**Change required state based on selection**🛑 Requires network request⚡ **Instant**. No server overhead**Simple validation visibility**🛑 Network round-trip, can feel sluggish⚡ **Instant**. Zero latency```
Toggle::make('is_active')->label('Active Status'),

// Shows INSTANTLY when is_active is toggled on (no server request!)
TextInput::make('activation_code')
    ->visibleWhen('is_active', true)
    ->requiredWhen('is_active', true),

Select::make('type')->options([
    'standard' => 'Standard',
    'premium'  => 'Premium',
]),

// Shows only when type = 'premium'
TextInput::make('premium_code')
    ->visibleWhen('type', 'premium'),
```

#### Available Reactivity Methods

[](#available-reactivity-methods)

MethodDescription`->visibleWhen('field', value)`Show when field equals value`->hiddenWhen('field', value)`Hide when field equals value`->disabledWhen('field', value)`Disable when field equals value`->enabledWhen('field', value)`Enable when field equals value`->requiredWhen('field', value)`Required when field equals value`->visibleWhenAll([...])`Show when ALL conditions match (AND logic)`->visibleWhenAny([...])`Show when ANY condition matches (OR logic)#### Supported Operators

[](#supported-operators)

`===`, `!==`, `in`, `notIn`, `filled`, `blank`, `>`, `=`, `icon('form')
    ->color('success')
    ->label('Fill Form')
    ->modalHeading('Detailed User Form')
    ->modalWidth('4xl')
    ->modalCloseByClickingAway(false)
    ->modalCancelActionLabel('Close')
    ->form([
        TextInput::make('reference_id')->required(),
        Radio::make('type')->options([
            'a' => 'Type A',
            'b' => 'Type B',
        ])
    ])
    ->action([SomeService::class, 'processForm'])
```

### Action Configuration Methods

[](#action-configuration-methods)

- `->requiresConfirmation()`: Auto-converts the form into a danger Action/Alert Dialog.
- `->modalWidth('2xl')`: Defines the modal width dynamically.
- `->modalCancelAction(false)` / `->modalSubmitAction(false)`: Hide specific modal buttons.
- `->modalCloseByClickingAway(false)`: Prevents accidental closure from outside clicks.

---

🏢 Multi-Panel Support
---------------------

[](#-multi-panel-support)

Vuelament supports multiple isolated admin panels by default.

**Creating a new panel:**

```
php artisan vuelament:panel Sales --id=sales
```

This creates `App\Vuelament\Providers\SalesPanelProvider`. Register in `bootstrap/providers.php`.

**Creating resources for a specific panel:**

```
php artisan vuelament:resource Invoice --panel=Sales
```

Vuelament isolates backend and frontend files into separate silos:

**Backend**: `app/Vuelament/Sales/Invoice/InvoiceResource.php`

- **Frontend**: `resources/js/Pages/Vuelament/Sales/Resource/Invoice/...`

`AdminPanelProvider` and `SalesPanelProvider` have zero conflict.

### Restricting Access via User Model

[](#restricting-access-via-user-model)

By default, any authenticated user can access any panel. To restrict access (e.g., using roles), add a `hasPanelAccess` (or `canAccessPanel`) method your User model (`app/Models/User.php`):

```
use ChristYoga123\Vuelament\Core\Panel;

class User extends Authenticatable
{
    public function hasPanelAccess(Panel $panel): bool
    {
        // Example: Only let users with role 'admin' access the Admin panel
        if ($panel->getId() === 'admin') {
            return $this->role === 'admin';
        }

        // Example: Only let 'sales' role access the Sales panel
        if ($panel->getId() === 'sales') {
            return $this->role === 'sales';
        }

        return true; // Default access
    }
}
```

If a user tries to log in to a Panel they do not possess access to, Vuelament will gracefully prevent login and securely show a "You cannot access this panel" error.

---

🎨 Custom Pages &amp; Widgets
----------------------------

[](#-custom-pages--widgets)

Generate completely custom pages for charts, widgets, or dashboards:

```
php artisan vuelament:page Analytics --panel=Admin
```

This generates two files:

- `app/Vuelament/Admin/Pages/AnalyticsPage.php`
- `resources/js/Pages/Vuelament/Admin/Pages/AnalyticsPage.vue`

```
use ChristYoga123\Vuelament\Core\BasePage;

class AnalyticsPage extends BasePage
{
    protected static ?string $navigationIcon = 'activity';
    protected static ?string $navigationLabel = 'Live Analytics';
    protected static string $slug = 'analytics';

    public static function getData(?\Illuminate\Database\Eloquent\Model $record = null): array
    {
        return [
            'totalUsers' => User::count(),
            'revenue' => 5000000,
        ];
    }
}
```

---

🛠️ Performance &amp; Optimizations
----------------------------------

[](#️-performance--optimizations)

- **Automatic Code Splitting**: Large libraries (`vue-quill`, `vue-datepicker`) are isolated into chunks via Vite.
- **Inertia.js Driven**: Lightning-fast SPA page transitions, no full browser reloads.
- **Client-Side Reactivity**: Form states evaluated in Vue without server requests.
- **Interactive Column Loading States**: Toggle/Checkbox columns disable during server requests, preventing spam.
- **No Per-Model Controllers**: Zero boilerplate controllers — framework handles routing.

---

📁 Frontend Architecture
-----------------------

[](#-frontend-architecture)

```
resources/js/components/vuelament/
├── Table.vue                           # Main table orchestrator
├── table/
│   ├── utils.js                        # Pure helpers (resolveIcon, formatCell)
│   ├── composables/
│   │   └── useTableState.js            # All reactive table state & logic
│   ├── columns/
│   │   ├── ColumnCell.vue              # Dispatcher (selects by col.type)
│   │   ├── TextCell.vue                # Text + prefix/suffix/color
│   │   ├── BadgeCell.vue               # Badge with colors
│   │   ├── ToggleCell.vue              # Shadcn Switch + loading
│   │   ├── CheckboxCell.vue            # Checkbox + loading
│   │   ├── ImageCell.vue               # Image with circle/thumbnail
│   │   └── IconCell.vue                # Dynamic Lucide icon
│   ├── TableToolbar.vue                # Search + filters + column toggle
│   ├── TableFiltersAbove.vue           # Filters above table
│   ├── TableRowActions.vue             # Row actions (edit, delete, custom)
│   ├── TablePagination.vue             # Pagination + per page
│   ├── TableConfirmDialog.vue          # Confirmation dialog
│   └── TableActionFormDialog.vue       # Custom action form dialog
├── form/
│   ├── RichEditor.vue                  # Rich text editor wrapper
│   ├── DatePicker.vue                  # Date/time picker wrapper
│   └── composables/
│       └── useFormReactivity.js         # Client-side form reactivity

```

### Key Design Patterns

[](#key-design-patterns)

- **Composables** (`useTableState`, `useFormReactivity`) — extract all reactive logic from components
- **Provide/Inject** — table sub-components access shared state without prop drilling
- **Column Cell Dispatcher** — `ColumnCell.vue` routes to correct sub-component based on `col.type`
- **HasReactivity Trait** (PHP) — provides `visibleWhen()`, `disabledWhen()`, `requiredWhen()` methods serialized to JSON rules

---

🔧 Configuration
---------------

[](#-configuration)

Publish the config file:

```
php artisan vendor:publish --tag=vuelament-config
```

```
// config/vuelament.php
return [
    'default_panel' => 'admin',
    'user_model' => \App\Models\User::class,
    'app_path' => 'Vuelament',
    'assets' => [
        'auto_publish' => true,
    ],
];
```

### Customizing Stubs

[](#customizing-stubs)

You can publish and customize the code generation stubs:

```
php artisan vendor:publish --tag=vuelament-stubs
```

Stubs will be published to `stubs/vuelament/`. The framework will prioritize custom stubs over package defaults.

---

📋 All Available Commands
------------------------

[](#-all-available-commands)

CommandDescription`vuelament:install`Install Vuelament — publish assets, scaffold, setup`vuelament:resource {Name}`Generate full CRUD module (Resource + Pages + Service)`vuelament:service {Name}`Generate a Service class for action business logic`vuelament:page {Name}`Generate a custom page (PHP class + Vue component)`vuelament:panel {Name}`Generate a new panel provider`vuelament:user`Create an admin user### Common Options

[](#common-options)

OptionDescriptionAvailable On`--panel=Admin`Target panel (default: Admin)resource, service, page`--resource=User`Attach to resource moduleservice, page`--simple`Single-mode (modal create/edit)resource`--generate`Auto-generate from databaseresource`--force`Overwrite existing filesall---

📄 License
---------

[](#-license)

Vuelament is open-sourced software licensed under the [MIT License](LICENSE).

---

Happy Coding! 🎉

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance80

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity58

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

35

Last Release

104d ago

### Community

Maintainers

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

---

Top Contributors

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

---

Tags

laraveltailwindinertiacruddashboardadminvuevilt

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/christyoga123-vuelament/health.svg)

```
[![Health](https://phpackages.com/badges/christyoga123-vuelament/health.svg)](https://phpackages.com/packages/christyoga123-vuelament)
```

PHPackages © 2026

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