PHPackages                             aecodes/admin-panel - 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. aecodes/admin-panel

ActiveLibrary[Admin Panels](/categories/admin)

aecodes/admin-panel
===================

A simplistic framework agnostic admin panel

928[1 issues](https://github.com/oversoul/admin-panel/issues)[1 PRs](https://github.com/oversoul/admin-panel/pulls)PHPCI failing

Since Nov 21Pushed 3mo ago3 watchersCompare

[ Source](https://github.com/oversoul/admin-panel)[ Packagist](https://packagist.org/packages/aecodes/admin-panel)[ RSS](/packages/aecodes-admin-panel/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependenciesVersions (2)Used By (0)

Admin Panel
===========

[](#admin-panel)

framework agnostic admin panel.

Goal
----

[](#goal)

trying to make it as minimal as possible. it allows you to create multiple pages with different types (table, form). without intervening much with your code base.

ps: you still need to setup your routes, the authentication etc...

Response
--------

[](#response)

We allow multiple type of responses, as a default we used php views, but we figured for laravel users as an example, would use `blade` instead, so one possible solution is to create a different `Renderer`.

For now we have two default `Renderers`:

- `DefaultRenderer` this just returns an array as output
- `JsonRenderer` this returns json output

To create a Renderer make it extends `Aecodes\AdminPanel\Responses\Renderer`. then add it to config.

### Currently supported Layouts

[](#currently-supported-layouts)

- Table (Takes array of TD, every TD can be custom rendered)
- Form (Takes array of Fields)
- Div (the only use case is to have customized wrappers)
- It's possible to create your own widgets.

ps: widgets implements `Widget` interface.

### Currently supported Form fields

[](#currently-supported-form-fields)

- Input (text, password, email, number, ...)
- Radio
- Select
- Textarea
- Checkbox
- Image (upload single image)

### How to setup

[](#how-to-setup)

1. install with composer
2. create a config file using `config/panel.php` as a starting point.
3. create (singleton) instance of `Dashboard` class, make sure to pass the config as an array.

```
$config = require './config/panel.php';
Aecodes\AdminPanel\Dashboard::setup($config);
```

### How to create an admin page

[](#how-to-create-an-admin-page)

1. create a new class extending the `Panel` class
2. for convenience set the properties for both `$name` &amp; `$description` of the panel (visible on the page).
3. create a `query` method that returns the array of data.

```
function query(): array {
    // get data from database.
    return Page::all()->toArray();
}
```

4. create a `render` method that returns an array of widgets.

- to create a table

```
function render(): array {
    return [
        Table::make([
            // (label, name) both are optional
            TD::make('#', 'id'),
            // it's also possible to use Table::column
            Table::column('Title', 'title'),
        ])
        // ...
    ];
}
```

- to create a form

```
function render(): array {
    return [
        Form::make([
            Input::make('title')->title('Title'),

            // form submit
            Action::button('Save'),
        ])
        ->action('#')
        ->method('post'),
        // ...
    ];
}
```

5. to finish up, in the callback of your route, just return a new instance of the class you created.

```
// callback for some route
public function index() {
    // PagesTable extends Panel
    return (new Response(new PagesTable))->render();
}
```

### Extendability

[](#extendability)

#### Layouts

[](#layouts)

when extending the `Panel` class you can specify the `$layout` property.

#### Views

[](#views)

this doesn't ship with a view layer. you can use the default (soon) views packages.

### Config

[](#config)

The default config is:

```
return [
    // current renderer.
	'renderer' => 'default',

    // add new renderer here.
	'renderers' => [
		'json'    => Aecodes\AdminPanel\Responses\JsonRenderer::class,
		'default' => Aecodes\AdminPanel\Responses\DefaultRenderer::class,
	],

    // default classes for button and a tag.
	'classes' => [
		'link'   => '',
		'button' => '',
	],

    // global menus, can be and array or callback
	'menu' => function () {
		return [];
	},

    // input old value.
	'old_value' => function ($name, $default) {
		return $default;
	},

    // global errors (i.e: validation errors)
	'errors' => function () {
		return [];
	}

];
```

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance51

Moderate activity, may be stable

Popularity13

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity33

Early-stage or recently created project

 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.

### Community

Maintainers

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

---

Top Contributors

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

---

Tags

admin-paneladmin-uiphpphp-library

### Embed Badge

![Health badge](/badges/aecodes-admin-panel/health.svg)

```
[![Health](https://phpackages.com/badges/aecodes-admin-panel/health.svg)](https://phpackages.com/packages/aecodes-admin-panel)
```

###  Alternatives

[jeroennoten/laravel-adminlte

Easy AdminLTE integration with Laravel

4.0k4.8M43](/packages/jeroennoten-laravel-adminlte)[dmstr/yii2-adminlte-asset

AdminLTE backend theme asset bundle for Yii 2.0 Framework

1.1k1.8M67](/packages/dmstr-yii2-adminlte-asset)[dwij/laraadmin

LaraAdmin is a Open source Laravel Admin Panel / CMS which can be used as Admin Backend, Data Management Tool or CRM boilerplate for Laravel with features like CRUD Generation, Module Manager, Media, Menus, Backups and much more

1.6k68.7k](/packages/dwij-laraadmin)[filament/spatie-laravel-media-library-plugin

Filament support for `spatie/laravel-medialibrary`.

1764.8M125](/packages/filament-spatie-laravel-media-library-plugin)[bezhansalleh/filament-exceptions

A Simple &amp; Beautiful Pluggable Exception Viewer for FilamentPHP's Admin Panel

193195.9k13](/packages/bezhansalleh-filament-exceptions)[filament/infolists

Easily add beautiful read-only infolists to any Livewire component.

1220.8M36](/packages/filament-infolists)

PHPackages © 2026

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