PHPackages                             ginkelsoft/buildora - 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. ginkelsoft/buildora

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

ginkelsoft/buildora
===================

A dynamic Laravel package for automatic resource and form generation.

v1.0.37(5mo ago)0343[1 issues](https://github.com/ginkelsoft-development/buildora/issues)MITPHPPHP ^8.1|^8.2|^8.3|^8.4CI failing

Since Apr 1Pushed 5mo ago1 watchersCompare

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

READMEChangelog (10)Dependencies (13)Versions (91)Used By (0)

Buildora
========

[](#buildora)

Buildora is a Laravel package for building admin panels, resources, forms, datatables, widgets and actions — fully based on Eloquent models and a minimal amount of configuration.

---

1. Requirements
---------------

[](#1-requirements)

- Laravel 10, 11 or 12
- PHP 8.1+
- Tailwind CSS (via CDN or Vite)
- Laravel Jetstream (optional)
- `spatie/laravel-permission` (recommended)

---

2. Installation via Composer
----------------------------

[](#2-installation-via-composer)

```
composer require ginkelsoft/buildora
```

If you are using a local path-based package:

```
"repositories": [
  {
    "type": "path",
    "url": "packages/ginkelsoft/buildora",
    "options": {
      "symlink": true
    }
  }
]
```

Then:

```
composer require ginkelsoft/buildora:*
```

---

3. Publish the config (optional)
--------------------------------

[](#3-publish-the-config-optional)

If Buildora provides configuration, you can publish it with:

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

---

4. Run the interactive installer
--------------------------------

[](#4-run-the-interactive-installer)

```
php artisan buildora:install
```

This command will:

- Detect Laravel version
- Run migrations
- Add necessary traits to your User model
- Generate Buildora resources for all your models
- Generate permissions (if Spatie is installed)
- Create a default admin user

---

5. Command: `buildora:resource`
-------------------------------

[](#5-command-buildoraresource)

Generate a Buildora resource class based on an Eloquent model:

```
php artisan buildora:resource User
```

This will create a file like: `app/Buildora/Resources/UserBuildora.php`

You can customize fields, filters, actions, and views inside this class.

---

6. Command: `buildora:widget`
-----------------------------

[](#6-command-buildorawidget)

Create a dashboard widget:

```
php artisan buildora:widget StatsWidget
```

This will generate:

- `app/Buildora/Widgets/StatsWidget.php`

Each widget implements a `render()` method and can return a Blade view or raw HTML.

---

7. Field types
--------------

[](#7-field-types)

Buildora supports multiple field types. Each field can be configured using a fluent API:

Examples:

```
TextField::make('name')->sortable()
EmailField::make('email')->readonly()
PasswordField::make('password')->hideFromIndex()
NumberField::make('price')->step(0.01)
CurrencyField::make('amount', '€')
DateTimeField::make('created_at')->readonly()
BelongsToField::make('company_id')->relation('company')
```

You can add new field types by extending the `Field` base class and implementing the `render()` method.

---

8. Widgets
----------

[](#8-widgets)

Widgets can be used on dashboards or as panels on detail pages.

```
class TotalUsersWidget extends Widget
{
    public function render(): string
    {
        $count = User::count();

        return view('widgets.total-users', compact('count'))->render();
    }
}
```

Widgets are registered in your resource via:

```
public function defineWidgets(): array
{
    return [
        TotalUsersWidget::make()->columnSpan(6),
    ];
}
```

---

9. Panels
---------

[](#9-panels)

Panels are relation-based data sections shown on the detail page of a resource.

```
public function definePanels(): array
{
    return [
        Panel::relation('orders', OrderBuildora::class)->label('Recent Orders'),
        Panel::relation('invoices', InvoiceBuildora::class),
    ];
}
```

This will show a datatable of related data on the detail page. Buildora automatically eager-loads these relations to prevent N+1 query issues.

---

10. Actions
-----------

[](#10-actions)

Actions allow you to perform operations on individual records (RowAction) or multiple selected records (BulkAction).

### Row Actions

[](#row-actions)

Row actions appear on individual rows in datatables and detail pages:

```
public function defineRowActions(): array
{
    return [
        RowAction::make('Edit', 'fas fa-edit', 'route', 'buildora.edit')
            ->params(['resource' => 'user', 'id' => '{id}'])
            ->method('GET'),

        RowAction::make('Delete', 'fas fa-trash', 'route', 'buildora.destroy')
            ->params(['resource' => 'user', 'id' => '{id}'])
            ->method('DELETE')
            ->confirm('Are you sure you want to delete this record?'),
    ];
}
```

### Bulk Actions

[](#bulk-actions)

Bulk actions allow operations on multiple selected records:

```
public function defineBulkActions(): array
{
    return [
        BulkAction::make('Delete Selected', 'buildora.bulk.delete')
            ->method('DELETE')
            ->confirm('Are you sure you want to delete the selected records?'),

        BulkAction::make('Export Selected', 'buildora.bulk.export')
            ->method('POST'),
    ];
}
```

---

11. Permissions
---------------

[](#11-permissions)

Buildora integrates with Spatie Laravel Permission for authorization. Permissions are automatically generated per resource.

### Available Commands

[](#available-commands)

```
# Generate permissions for all resources
php artisan buildora:generate-permissions

# Sync permissions (registers new permissions without deleting existing ones)
php artisan buildora:sync-permissions

# Grant all permissions to a specific user
php artisan buildora:grant-permissions {user_id}

# Create Permission resource for managing permissions in the UI
php artisan buildora:make-permission-resource
```

### Permission Format

[](#permission-format)

Permissions follow the format `{resource}.{action}`:

- `user.view` - View user listings
- `user.create` - Create new users
- `user.edit` - Edit existing users
- `user.delete` - Delete users

### Checking Permissions in Resources

[](#checking-permissions-in-resources)

You can control access to actions using permissions:

```
RowAction::make('Delete', 'fas fa-trash', 'route', 'buildora.destroy')
    ->permission('user.delete');
```

---

12. Global Search
-----------------

[](#12-global-search)

Configure global search behavior per resource:

```
public function searchResultConfig(): array
{
    return [
        'label' => fn($record) => $record->name,
        'columns' => ['name', 'email', 'created_at'],
    ];
}
```

The `label` can be:

- A string (column name)
- An array of column names
- A callable that receives the record and returns a string

---

13. Configuration
-----------------

[](#13-configuration)

The main configuration file `config/buildora.php` contains:

### Route Settings

[](#route-settings)

```
'route_prefix' => 'buildora',  // Base URL path
'middleware' => ['web', 'buildora.auth', 'buildora.ensure-user-resource'],
```

### Models Namespace

[](#models-namespace)

```
'models_namespace' => 'App\\Models\\',
```

### Datatable Defaults

[](#datatable-defaults)

```
'datatable' => [
    'pagination' => [10, 25, 50, 100, 250],
    'default_per_page' => 25,
],
```

### File Upload Settings

[](#file-upload-settings)

```
'files' => [
    'default_disk' => 'public',
    'default_path' => 'uploads',
    'max_upload_size_kb' => 2048,
    'previewable' => ['jpg', 'jpeg', 'png', 'pdf'],
],
```

### Dashboard Configuration

[](#dashboard-configuration)

```
'dashboards' => [
    'enabled' => true,
    'label' => 'Dashboards',
    'icon' => 'fa fa-gauge',
    'children' => [
        'main' => [
            'label' => 'Main',
            'route' => 'buildora.dashboard',
            'params' => ['name' => 'main'],
            'permission' => 'dashboard.view',
            'widgets' => [],
        ],
    ],
],
```

### Navigation Structure

[](#navigation-structure)

```
'navigation' => [
    // Link to a Buildora resource
    [
        'label' => 'Users',
        'icon' => 'fas fa-user',
        'route' => 'buildora.index',
        'params' => ['resource' => 'user'],
    ],

    // Link to an external URL
    [
        'label' => 'Documentation',
        'icon' => 'fas fa-book',
        'url' => 'https://docs.example.com',
    ],

    // Link to a custom Laravel route
    [
        'label' => 'Back to site',
        'icon' => 'fas fa-home',
        'url' => '/',
    ],

    // Nested navigation with children
    [
        'label' => 'Settings',
        'icon' => 'fas fa-cog',
        'children' => [
            [
                'label' => 'Users',
                'icon' => 'fas fa-user',
                'route' => 'buildora.index',
                'params' => ['resource' => 'user'],
            ],
            [
                'label' => 'Permissions',
                'icon' => 'fas fa-lock',
                'route' => 'buildora.index',
                'params' => ['resource' => 'permission'],
            ],
        ],
    ],

    'include_resources' => true, // Auto-include all resources not manually defined
],
```

Navigation items support:

- `route` + `params`: Link to a named Laravel route
- `url`: Direct URL (internal or external)
- `children`: Nested dropdown menu

---

14. All Available Commands
--------------------------

[](#14-all-available-commands)

```
# Installation and setup
php artisan buildora:install              # Interactive installer

# Resource generation
php artisan buildora:resource {Model}     # Generate resource from model
php artisan buildora:widget {Name}        # Generate widget

# Permission management
php artisan buildora:generate-permissions # Generate all resource permissions
php artisan buildora:sync-permissions     # Sync permissions
php artisan buildora:grant-permissions {user_id}  # Grant all permissions to user
php artisan buildora:make-permission-resource     # Create Permission resource

# User management
php artisan buildora:create-user          # Create admin user
```

---

15. Theme Customization
-----------------------

[](#15-theme-customization)

Buildora uses CSS variables for theming with support for light and dark mode.

### Publishing the Theme

[](#publishing-the-theme)

```
php artisan vendor:publish --tag=buildora-theme
```

This will create `resources/buildora/buildora-theme.css` in your Laravel application.

### Customizing Colors

[](#customizing-colors)

Edit the published theme file to override CSS variables:

```
:root {
    /* Primary colors */
    --primary-rgb: 59, 130, 246;
    --primary-hover-rgb: 37, 99, 235;

    /* Background colors */
    --background-rgb: 255, 255, 255;
    --surface-rgb: 249, 250, 251;

    /* Text colors */
    --text-primary-rgb: 17, 24, 39;
    --text-secondary-rgb: 107, 114, 128;

    /* Border colors */
    --border-rgb: 229, 231, 235;
}

/* Dark mode */
.dark {
    --background-rgb: 17, 24, 39;
    --surface-rgb: 31, 41, 55;
    --text-primary-rgb: 243, 244, 246;
    --text-secondary-rgb: 156, 163, 175;
    --border-rgb: 55, 65, 81;
}
```

The theme system uses RGB values to allow alpha transparency (e.g., `rgba(var(--primary-rgb), 0.5)`).

### Frontend Build

[](#frontend-build)

If you're developing the package itself, you can rebuild the assets:

```
# Development with hot reload
npm run dev

# Production build
npm run build
```

---

16. License
-----------

[](#16-license)

Buildora is open-source software licensed under the MIT license.

###  Health Score

43

—

FairBetter than 91% of packages

Maintenance71

Regular maintenance activity

Popularity12

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity70

Established project with proven stability

 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 ~6 days

Recently: every ~0 days

Total

38

Last Release

165d ago

PHP version history (2 changes)v1.0.0PHP &gt;=8.2

v1.0.29PHP ^8.1|^8.2|^8.3|^8.4

### Community

Maintainers

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

---

Top Contributors

[![ginkelsoft-development](https://avatars.githubusercontent.com/u/179240029?v=4)](https://github.com/ginkelsoft-development "ginkelsoft-development (253 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StylePHP CS Fixer

Type Coverage Yes

### Embed Badge

![Health badge](/badges/ginkelsoft-buildora/health.svg)

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

###  Alternatives

[grumpydictator/firefly-iii

Firefly III: a personal finances manager.

22.8k69.3k](/packages/grumpydictator-firefly-iii)[livewire/volt

An elegantly crafted functional API for Laravel Livewire.

4205.3M84](/packages/livewire-volt)[ramonrietdijk/livewire-tables

Dynamic tables for models with Laravel Livewire

21147.4k](/packages/ramonrietdijk-livewire-tables)[team-nifty-gmbh/tall-datatables

A package to create datatables using alpinejs, tailwind, livewire and laravel

1217.2k1](/packages/team-nifty-gmbh-tall-datatables)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

116.6k](/packages/tomshaw-electricgrid)[marcorieser/statamic-livewire

A Laravel Livewire integration for Statamic.

2381.5k10](/packages/marcorieser-statamic-livewire)

PHPackages © 2026

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