Open-source project
EasyCorp/EasyAdminBundle avatar
EasyCorp/EasyAdminBundle

EasyAdminBundle: a Symfony admin panel generated from Doctrine entities

EasyAdmin is a fast, beautiful and modern admin generator for Symfony applications.

4,307 stars1,094 forksPHPMIT

At a glance

What is it?
EasyAdminBundle builds CRUD backends for Symfony applications from Doctrine entities, with dashboards, fields and security configured in PHP. This review covers what it generates, how the 5.x branch is set up, and where it stops being the right tool.
Who is it for?
Adopt EasyAdminBundle if you have a Symfony 6.4 or newer application with Doctrine entities and you want an admin panel written in PHP rather than a separate frontend stack; the 5.x branch requires PHP 8.2 or higher, so check that before starting. Do not adopt it if your data does not live in Doctrine ORM entities, or if you need the panel to work outside Symfony.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly PHP, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What EasyAdminBundle generates and who it is for

EasyAdminBundle is an admin generator for Symfony applications. The README describes it as creating "beautiful backends for Symfony applications", and the repository is a Symfony bundle published on Packagist as easycorp/easyadmin-bundle under the MIT licence. The problem it addresses is the repeated work of building list, create, edit and delete screens for every entity in a Symfony project: instead of writing controllers and templates by hand, you declare a dashboard and a set of CRUD controllers, and the bundle renders the pages.

The audience is narrow but deep. You need a Symfony application, Doctrine ORM entities, PHP 8.2 or higher on the 5.x branch, and Symfony 6.4 or higher. Within those bounds, the fit is good for internal tools, back-office screens for staff, and any project where the people maintaining the admin panel already write PHP. The README states that no JavaScript knowledge is required, which matters if your team is backend-only. If your data lives in something other than Doctrine entities, or your application is not Symfony, the bundle has nothing to attach to.

How the dashboard and CRUD controllers fit together

The architecture follows Symfony conventions rather than inventing a layer. A dashboard class defines the navigation and the routes that appear under an admin URL. CRUD controllers each point at one Doctrine entity and declare how its fields appear in the index, detail, edit and new views. The bundle reads those declarations and maps them onto Symfony forms, security voters, routing and Twig templates.

The repository layout shows where each part lives. The src/ directory holds the PHP, templates/ holds the Twig views, translations/ holds the language files the README counts at 40 or more languages with RTL support, and assets/ holds the frontend sources. Those frontend sources are built with Webpack Encore; package.json lists Bootstrap 5, CodeMirror, Trix, Tom Select and Font Awesome as dependencies, which tells you what the shipped UI is assembled from. The package.json is marked private and UNLICENSED, so the JavaScript tooling is for building the bundle's own assets, not something you import into your application.

Configuration is PHP, not YAML, in the generated files. That is a deliberate choice and it shapes how you work: field and action customisation happens through class methods, and the README points to overriding templates and extending classes as the escape hatches when the defaults do not fit.

Installing EasyAdminBundle and creating a first CRUD screen

The README gives a three-command Quick Start for an existing Symfony application. The first command pulls the bundle in through Composer:

bash
composer require easycorp/easyadmin-bundle

The second generates a dashboard class. Symfony's maker asks which class name and route path you want, and the result is a controller that defines the admin entry point:

bash
php bin/console make:admin:dashboard

The third generates a CRUD controller for one of your Doctrine entities. The maker prompts you to pick the entity, then writes a controller with the fields it can infer from your mappings:

bash
php bin/console make:admin:crud

After that, the README says to visit /admin in your browser. You should see the dashboard with a menu entry for the entity you selected, and from there the index, detail, edit and new screens are generated. If you use an AI coding agent, the README also mentions php bin/console easyadmin:ai:install, which installs an agent skill that teaches Claude Code, Codex, Cursor and GitHub Copilot the EasyAdmin API. That command is optional and only relevant if you want an agent to write EasyAdmin code for you.

For working on the bundle itself rather than using it, the README documents a DDEV environment. After checking out the repository and entering the directory, ddev setup starts and provisions the container, and the bundle is reachable at https://easy-admin-bundle.ddev.site. The Makefile exposes tasks through ddev make, including build for dependencies, build-assets for frontend assets, and tests. The Makefile also defines linter-phpstan, linter-twig and linter-cs-fixer targets, and a tests target that accepts ARGS, for example make tests ARGS="tests/Unit/Field/". That is contributor tooling, not something an application using the bundle needs.

Where EasyAdminBundle stops being the right tool

The dependency on Doctrine ORM entities is the hard boundary. The README lists "Doctrine ORM entities" under Requirements without qualification. If your admin screens need to manage data behind an API, a document store, or a service that does not map to an entity, the generated CRUD controllers give you nothing and you are writing custom controllers that happen to sit inside an EasyAdmin dashboard. At that point the bundle is contributing routing and a template shell, which may not be worth the dependency.

The version table is the second constraint, and it is worth reading before you plan an upgrade. The 5.x branch supports Symfony 6.4, 7.x and 8.x on PHP 8.2 or higher. The 4.x branch supports Symfony 5.4 through 8.x on PHP 8.1 or higher but is listed as bug fixes only. The 3.x, 2.x and 1.x branches are listed as no longer maintained. If your application is pinned to Symfony 5.4, you are on the 4.x branch and should not expect new features there.

A third limitation is the one the README admits indirectly. It advertises 100 percent customisation, and the mechanism is overriding templates and extending classes. That is real, but it means every deviation from the default UI is code you own and must re-check against the bundle's templates on upgrade. The repository ships an UPGRADE.md file, which is a signal that version transitions carry manual steps rather than being automatic.

EasyAdminBundle compared with SonataAdminBundle

SonataAdminBundle is the other long-running Symfony admin generator, and the RELATED SEARCHES list shows people compare the two. The difference in approach is where configuration lives and how much of the stack the bundle brings with it. EasyAdmin's generated dashboard and CRUD controllers are PHP classes that read close to Symfony's own form and routing APIs, and the Quick Start produces a working screen in three commands. Sonata's admin model centres on admin service classes registered in the container, with its own block and template system layered on top.

That distinction has practical consequences. EasyAdmin leans on Symfony forms, security and routing directly, so knowledge of those components transfers. Sonata historically brings a larger set of its own abstractions, which can be an advantage when you need behaviour it already implements and a cost when you need to change it. Neither is a drop-in replacement for the other; migrating between them means rewriting the admin classes, not adjusting configuration.

One caveat on the search data: several related phrases, including EasyAdmin FiveM and EasyAdmin Plugins, refer to other software that shares the name. This article is only about EasyCorp/EasyAdminBundle for Symfony.

Maintenance, licensing and upgrade cost

The repository is not archived, and the last push was on 2026-09-21. Releases v5.6.0 on 2026-09-17 and v5.5.1 on 2026-08-11 sit on the 5.x branch, with v4.29.16 on the same August date showing that the 4.x branch still receives fixes. The README calls the bundle battle-tested since 2015 and states it is led by a Symfony Core Team member, which is context for the release cadence rather than a guarantee about any particular version.

Licensing is MIT, which permits commercial use and modification, with the usual requirement to keep the copyright and licence notice. The package.json in the repository is marked UNLICENSED, but that file covers the bundle's own frontend build tooling; it does not change the licence of the distributed PHP package. If you plan to redistribute the bundle or a modified version, read LICENSE.md rather than relying on a summary, and treat the translations directory as a separate question if you intend to reuse the language files.

Upgrade cost is the part the README does not quantify. The presence of UPGRADE.md and the branch table is the available evidence: moving from 4.x to 5.x changes the minimum PHP version to 8.2 and the minimum Symfony to 6.4, and any template overrides you wrote against 4.x templates need re-checking against the 5.x templates. The bundle's own test suite is run through the Makefile tests target, which is useful if you contribute a fix upstream but does not tell you whether your application's overrides still render correctly.

Editorial conclusion

Adopt EasyAdminBundle if you have a Symfony 6.4 or newer application with Doctrine entities and you want an admin panel written in PHP rather than a separate frontend stack; the 5.x branch requires PHP 8.2 or higher, so check that before starting. Do not adopt it if your data does not live in Doctrine ORM entities, or if you need the panel to work outside Symfony. Before committing, run the three Quick Start commands in a branch, open /admin, and confirm the generated dashboard and CRUD controllers match your entity associations; then read the 5.x docs for the field types your forms need.

Frequently asked questions

What PHP and Symfony versions does EasyAdminBundle 5.x require?

The 5.x branch requires PHP 8.2 or higher and Symfony 6.4, 7.x or 8.x. The 4.x branch supports PHP 8.1 or higher and Symfony 5.4 through 8.x, but it is listed as bug fixes only.

How do I install EasyAdminBundle in a Symfony application?

Run composer require easycorp/easyadmin-bundle, then php bin/console make:admin:dashboard and php bin/console make:admin:crud to generate the dashboard and a CRUD controller. After that the README says to visit /admin in your browser.

Does EasyAdminBundle work without Doctrine entities?

The README lists Doctrine ORM entities under Requirements, so the generated CRUD screens assume an entity mapping. Data behind an API or a non-Doctrine store would need custom controllers instead of the generated ones.

What can I use to run EasyAdminBundle locally for development?

The README documents a DDEV environment for working on the bundle itself: after checking out the repository, ddev setup provisions the container and the bundle is available at https://easy-admin-bundle.ddev.site. The Makefile provides tasks such as ddev make build, ddev make build-assets and ddev make tests.

Official sources

  1. EasyCorp/EasyAdminBundle on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/easycorp-easyadminbundle.svg)](https://hysenlabs.com/projects/easycorp-easyadminbundle)