kachnitel/admin-bundle
A Laravel admin bundle that helps you scaffold a ready-to-use back-office with CRUD resources, authentication, menus, and configurable dashboards, so you can build administration interfaces quickly while staying within familiar Laravel conventions.
This is a v0.1.0 pre-1.0 release — treat the API as unstable and pin the exact version in composer.json. The value proposition is zero-config CRUD admin panels generated from entity metadata, so budget time to read the source rather than expecting mature docs.
#[Admin] attributes on Doctrine entities, plus LiveComponents (Symfony UX). Before anything else, verify how (or whether) it installs into your Laravel app. If you're Eloquent-only, this package will not drop in; you'll need a Doctrine bridge or a separate admin service. Decide this first — it's the gating question.src/Attribute/Admin.php (or equivalent) first. It is the single entry point for configuration: entity label, list columns, form fields, filters, sort defaults, pagination size. Everything else is convention layered on top.#[Admin] to a small, low-risk model (a lookup table such as Category or Tag), point the panel at it, and confirm the list view renders before touching forms.First realistic use case: an internal back-office for a handful of entities where you want a working CRUD screen in an afternoon, and you're willing to own the Doctrine integration and some rough edges. Not a fit for a customer-facing admin you must ship next week on Laravel with Eloquent.
Attribute-first configuration. Keep admin config on the entity, not in a separate admin class, and keep it declarative — display label, list fields, form fields, default sort. Derive as much as possible from column metadata so new fields appear without edits. When you need behaviour the attribute doesn't express, override the template rather than forking the component.
Template override as the customization seam. The package exposes a template override system; use it for layout, column rendering, and action buttons. Mirror the package's directory structure exactly, override the smallest file that solves the problem, and record which templates you've shadowed in your repo — you'll need to diff them against package templates on every upgrade.
LiveComponent lifecycle discipline. CRUD screens are stateful. Treat filter/sort/page state as owned by the component, and make it URL-addressable (query string) so links to a filtered list survive a refresh — hugely useful for support and debugging. Keep entity mutation inside the component's action methods, not in templates; LiveComponent re-renders are frequent and side effects in templates bite.
Convention over configuration for filters and sorting. Expose filters only for indexed columns, and set sensible defaults (createdAt DESC, page size 25–50). Add filters incrementally per entity based on the questions people actually ask, not the full column list.
Integration tips.
#[Admin] in a way that just works. Confirm installability in your app before promising a delivery date; if decoupling is on the roadmap, do not architect around the current coupling expecting a painless future migration.#[Admin] attributes are reflection-driven and cached. After editing attributes, clear framework and attribute caches before concluding the change didn't work. "My column won't disappear" is almost always a cache.How can I help you explore Laravel packages today?