Skip to content
Admin framework for Laravel

Define a Resource.
Get a full admin panel.

Fields, columns, filters, actions, relation managers and dashboard widgets, generated from a single PHP class. Vue SPA frontend.

GET /arrel/api/admin/posts/schema
tenant.arrel.app/posts
Posts3
#014Introduction to ArrelPublished
#012What's new in v2Draft
#013Installation guidePublished

How it works

Three steps, all inside your Laravel project.

  1. 1

    You define a Resource

    A PHP class with the fields, columns, filters and actions of your model.

  2. 2

    Arrel serves it

    A /schema endpoint and a JSON API, protected with Sanctum and the model’s Policies.

  3. 3

    The SPA renders it

    A precompiled Vue frontend renders the form, the table and the filters from the schema.

Everything an admin panel needs

Every piece is defined in PHP, inside the Resource itself, served through a single /schema endpoint.

Fields

Text, Select, Date, Toggle, File, Image, Repeater and RichEditor, each with its own validation rules.

Tables & columns

Computed columns, badges and images with value()/color() closures, not just attribute pass-through.

Actions

View, Edit, Delete, Restore, ForceDelete plus custom actions with their own schema and handler, with bulk support.

Filters

Reusable table filters, applied directly on the Resource query.

Relation managers

Attach/Detach and relation-specific actions, managed from the parent Resource's own panel.

Widgets

Stat cards with value, color, icon and description, computed on every dashboard request.

Custom pages

A Vue component of your own, sharing Arrel's instance or fully isolated with registerMountablePage.

Multi-tenancy

A custom TenantResolver and a configurable middleware; Arrel imposes no strategy of its own.

One Resource. One full panel.

fields(), columns() and actions() are enough to generate the form, the table and the endpoints. No separate authorization DSL: canViewAny(), canEdit()… delegate to the model's Policy.

Read the Resources guide →
PostResource.php
final class PostResource extends Resource
{
    protected static string $model = Post::class;
    protected static string $icon = 'document-text';

    public function fields(): array
    {
        return [
            Text::make('title')->rules('required', 'max:255'),
            Select::make('status')->options(['draft', 'published']),
            Toggle::make('is_featured'),
        ];
    }

    public function columns(): array
    {
        return [
            Column::make('title')->searchable()->sortable(),
            Column::make('status')->as('badge'),
        ];
    }

    public function actions(): array
    {
        return [ViewAction::make(), EditAction::make(), DeleteAction::make()];
    }
}

Pricing

License per production application.

Sprout

For a single project.

29€/ year

Renews at 19€ / year

Contact us
  • 1 production application
  • Email support