A PHP-configured, modular, open-source admin panel framework for Symfony. Describe an admin interface entirely in PHP (resources, columns, fields, actions) and get a polished, reactive UI with no JavaScript build step and no separate API. Reactivity is delivered server-side via Symfony UX Live Components; styling via Tailwind.

Tables/, Schemas/, Pages/.author.name), row / header / bulk actions, column
formatting (badge, boolean, money, alignment, width), configurable empty states,
default sort and page-size selector.optionsUsing, checkbox, toggle, radio, date/time, colour, tags,
key-value, …) on a real layout tree — Grid / Section / Fieldset /
Flex, plus Tabs and multi-step Wizards — with conditional visibility,
cross-field reactivity (afterStateUpdated) and Symfony-constraint validation./admin/course/12/lesson/…).scopeQuery() for multi-tenancy, ownership or soft-deletes — applied to lists,
counts, bulk actions and single-record resolution.handleRecordCreation / a command bus) inside
a single transaction.DataProvider (Doctrine adapter included).Status: pre-1.0, under active development. Everything above is implemented and tested; the public API may still change in a 0.x minor (changes are flagged). See the integration guide to build with it, the
CHANGELOGfor what's landed in each release, anddocs/PRDs/PRD.mdfor the roadmap.
The integration guide is the place to start — install and build your first resource, then dive into resources, tables, forms, actions and data.
composer require atriumphp/atrium
Register the bundle (Symfony Flex does this automatically; otherwise add it to
config/bundles.php):
return [
// ...
Atrium\AtriumBundle::class => ['all' => true],
];
A resource is one PHP class per entity — point it at the entity, describe the table and the form, and Atrium discovers it automatically (no tags, no YAML) and serves a full CRUD screen:
use Atrium\Form\Field\TextField;
use Atrium\Form\Schema;
use Atrium\Resource\AdminResource;
use Atrium\Table\Column;
use Atrium\Table\TableConfiguration;
final class TagResource extends AdminResource
{
public function getEntityClass(): string
{
return Tag::class;
}
public function table(TableConfiguration $table): TableConfiguration
{
return $table->columns([
Column::make('name')->sortable()->searchable(),
Column::make('slug'),
]);
}
public function form(Schema $schema): Schema
{
return $schema->fields([
TextField::make('name')->required(),
TextField::make('slug')->required(),
]);
}
}
That's a searchable, sortable, paginated list with Edit/New actions and a
validated create/edit form, at /admin/tag. Non-trivial resources delegate to
dedicated Tables/, Schemas/ and Pages/ classes; small ones inline as above.
See the getting-started guide for the
full walkthrough.
composer test # PHPUnit
composer phpstan # PHPStan (max)
composer cs # PHP-CS-Fixer (Symfony ruleset), dry-run check
composer cs:fix # PHP-CS-Fixer, apply
MIT.
How can I help you explore Laravel packages today?