folklore/laravel-panneau
folklore/laravel-panneau provides a lightweight, configurable panel layer for Laravel applications, helping you build and organize admin screens, dashboards, and management interfaces with familiar conventions and minimal setup.
@panneau/* JavaScript client, a versioned OpenAPI definition, and contract tests run against a conformance kit. alpha.4 pins to panneau-js v5.x / 5.0.0-alpha.5 and reports every conformance check passing, including the new global search and fields.check endpoints. The real decision remains "adopt a protocol-defined admin layer with a decoupled JS frontend" versus both admin frameworks and headless/API-first admin approaches.Panneau::uploadRoutes() and Panneau::resourceRoutes($resources, only: [...]) let a project with its own admin front mount only the slices it uses, without the app page. This converts the build-vs-buy question from "replace our admin" to "adopt the protocol for a subset of screens" — a lower-risk pilot shape and a cheaper spike.laravel/scout is now suggested, not required — no new mandatory dependency for search.GET {panneau.path}/api/search) now covers "find the record" workflows, scoped to resources the user can list and run through repositories or Scout. Still explicitly absent: auth flows (password reset, 2FA, passkeys, OAuth), the roles module, the broader media API, export/import with queued runs, and pages/menus.tenants/{tenant}/...) work. This unblocks multi-tenant admin surfaces — but note it is route-parameter plumbing, not a tenancy/isolation feature. Confirm scoping enforcement is your own.@panneau/* in lockstep; drop createOnly() on the mediatheque file field; set panneau.search.enabled to false to omit the search route). That is a better churn signal than "unknown," but it is still pre-release with a stated possibility of API change and no v4 migration guide.application/problem+json errors, required policies, filter/sort declaration enforcement via ResourceQuery, authorization-aware global search, server-side slug uniqueness checks with a live form endpoint (POST resources/{resource}/fields/{field}/check), and original-file replacement on the mediatheque with 422 on rejection. Remaining gap versus mature admin packages: auth, roles, full media API, import/export, and menus/pages.panneau-search rate limiter and on by default; slug checks add a per-keystroke endpoint on slug fields. Both are cheap but need capacity/rate-limit decisions and a "disable if unused" call (panneau.search.enabled). The mediatheque replacement path requires folklore/laravel-mediatheque 2.0.0-alpha.5+ — another alpha dependency to track.Consider it when:
application/problem+json responses reduce edit-collision support cost in multi-operator back offices.tenants/{tenant}/...) or you only need part of the API mounted (uploadRoutes(), resourceRoutes(..., only: [...])) alongside an existing frontend.Look elsewhere when:
q/limit/resources plus Scout.@panneau/* JS client.For executives: This is a ground-up rewrite of a Laravel admin package, now in its fourth alpha. It is the reference implementation of a versioned, spec-defined admin protocol with automated contract and conformance testing, and it keeps shipping capability — this release adds permission-aware global search, live slug validation, media file replacement, and the ability to mount only part of the API. Those last two matter commercially: partial mounting lets us pilot it on a slice of admin surface instead of a wholesale replacement. The caveats are unchanged and material: pre-release with a potentially changing API, requires PHP 8.3+ and Laravel 12/13, and authentication, roles, the full media API, import/export, and menus are not yet built. Recommend a time-boxed pilot on one non-critical internal dashboard, using partial route mounting, with a decision gate at 5.0.0 GA and a mature alternative benchmarked in parallel. Do not make it an organization-wide standard on an alpha.
For engineering: alpha.4 keeps the v5 architecture (repository-backed ResourceRepository/EloquentRepository, ResourceQuery-constrained filters and orders, builders generating the protocol definition, mandatory policies, validated-data-only writes, ETag/If-Match 412, application/problem+json) and adds: GET {panneau.path}/api/search with q/limit/resources, scoped to listable resources via repositories or Scout, behind the panneau-search limiter and disableable via panneau.search.enabled; Slug::unique() (per locale, optionally parent-scoped) with POST resources/{resource}/fields/{field}/check for live form validation and a ChecksSlugs contract for non-Eloquent repositories; Mediatheque::replaceOriginal() with 422 on rejected or wrong-type files and replace() for libraries that allow type changes (requires laravel-mediatheque 2.0.0-alpha.5+); Panneau::uploadRoutes() / resourceRoutes(..., only: [...]) for partial mounting; and named route-parameter reads so prefix parameters like tenants/{tenant} work. Protocol conformance passes against panneau-js 5.0.0-alpha.5, including the new search and fields.check endpoints. Trade-offs: API can still change before 5.0.0; no v4 migration guide; auth, roles, and import/export are Phase 2; alpha-to-alpha upgrades require syncing @panneau/* and the mediatheque pin, and the search route is on by default. You now own a Laravel backend plus a @panneau/* JS frontend. Spike it on one real internal screen, read docs/ and the roadmap, and treat missing auth and roles as the gating work items.
Recommendation: Treat v5 as a new package, not an upgrade. Pilot on one non-critical internal dashboard for a fixed window — partial route mounting makes this cheaper than in alpha.1 — and define exit criteria: API churn across the remaining alphas/betas (alpha.4's documented, additive upgrade path is an encouraging data point, not yet a guarantee), Phase 2 auth and roles availability, and a published v4 migration guide. Benchmark against a mature alternative before standardizing. Any team currently on v4 should stay put until the migration guide ships.
How can I help you explore Laravel packages today?