orchid/crud
Orchid CRUD is a screen-based toolkit for building admin panels and CRUD interfaces in Laravel. Define screens, fields, and layouts in PHP to create customizable back-office apps with forms, filters, sorting, and actions, all within your Laravel codebase.
Architecture fit. orchid/crud is the screen-generation layer of the Laravel Orchid admin panel, not a general-purpose Laravel CRUD library. It sits on top of orchid/platform and inherits that host's layout system, admin guard, permission model, routing, and screen lifecycle. The TPM framing that matters is that this is a paired decision, not a standalone one. If Orchid is already in our stack, CRUD lowers the marginal cost of each new back-office entity from a hand-built controller/view pair to a declarative screen class (fields, columns, filters, actions, authorization hooks). If Orchid is not in the stack, "adopt CRUD" actually means "adopt Orchid, then CRUD" — two onboarding efforts, not one, and the estimate must say so. The value is concentrated in internal, operator-facing tooling (ops consoles, support dashboards, back-office admin) and does not transfer to customer-facing or brand-differentiated surfaces.
Integration feasibility. Moderate-to-good for teams already on Orchid. 4.4.0 is a non-breaking minor over 4.3.0 with three changes, and one is a genuine roadmap unblocker: first-class Laravel 12 support, which removes a hard framework-upgrade gate for any team pinned to Laravel 11 to keep its admin layer supported. Treat that as a dependency inside the Laravel 12 migration workstream, not as an internal feature to announce. The other two are small but TPM-legible: a new hide method giving declarative per-role/per-state action visibility (usable as evidence of least-privilege controls in access reviews), and a fix for request()->user() being null inside displayInNavigation, which affects menus rendered without an authenticated user — guest-reachable admin entry points, tenant-scoped navigation, and support impersonation flows.
Technical risk. Moderate, concentrated in three areas. Coupling: CRUD tracks Orchid's release cadence, so an Orchid major bump can change CRUD behavior with no CRUD version change — two dependencies to keep version-locked, not one. Maintenance depth: community-maintained by a small base (this release: two first-time contributors plus the maintainer), irregular cadence, no commercial SLA, no scheduled security backports — and the package shows 0 dependents, a thin ecosystem signal meaning few external battle-tests and no downstream pressure to catch regressions. We would be an early, self-supporting consumer. Behavioral change: the navigation fix invalidates the prior assumption of an authenticated user, so custom navigation, tenant-scoped admin routes, and impersonation flows need re-testing. A quieter fourth risk: hide is security-adjacent; applied without review it can silently over- or under-expose admin operations, and hiding is not authorizing — the server-side permission check must still exist.
Key questions. Is Orchid already in our stack, and does that version support Laravel 12 — because CRUD cannot outrun its host? Does hide complement or duplicate the permission-based action gating we already have? Which PHP version and database drivers are in our Laravel 12 target matrix? Who is the named owner accountable when Orchid ships a major? Do we run any non-authenticated, tenant-scoped, or impersonated admin sessions that the navigation fix changes? And what is our fallback if upstream stalls for a release cycle?
Stack fit. Laravel 11–12, PHP 8.2+, orchid/platform as a hard dependency, server-rendered Blade/Orchid UI. Strong fit for conventional internal tooling; poor fit for Inertia/React/Vue, API-first, or headless-admin architectures, because the entire value proposition is generated server-rendered screens. If the admin roadmap is trending toward a SPA, this package is the wrong direction regardless of quality, and that should be settled before any build work starts.
Migration path. Three distinct cases, and the TPM should know which applies before committing a date, because they differ by an order of magnitude. Greenfield admin: install Orchid, then CRUD, then define screens — fastest, lowest risk. Existing Orchid 4.3.x: a composer bump with no deprecations, no config changes, no migrations — low risk. Existing bespoke admin (hand-rolled Blade/Livewire controllers): this is re-platforming, not a library swap — screen-by-screen reimplementation of list/create/edit views plus an explicit mapping exercise from our authorization model onto Orchid permissions. That third case is where internal-tool timelines slip; scope it as its own workstream with per-screen acceptance criteria.
Compatibility. Laravel 12 support is the headline claim but only half the verification: confirm orchid/platform's own Laravel 12 compatibility, then PHP version, database driver, and any third-party Orchid extensions in use. hide is strictly opt-in — no migration, no config, no behavior change to existing screens until adopted — which makes it safely deferrable if the upgrade window is tight.
Sequencing. (1) Pin current Orchid + CRUD versions and baseline the admin UI in a branch. (2) Validate the pair on Laravel 12 against a representative slice of screens in staging. (3) Exercise navigation as a guest, as a low-privilege user, and under impersonation to cover the displayInNavigation change. (4) Pilot hide on one screen and confirm it composes with existing permission gating rather than conflicting, then roll out incrementally. (5) Ship through the normal release process behind an admin smoke suite. Steps 1–3 are the upgrade; step 4 is separate opt-in scope that must not gate the framework migration.
Maintenance. Recurring, not install-and-forget. Two coupled dependencies plus Laravel's annual major create a predictable yearly upgrade task; budget a standing dependency-review slot with a named owner, pinned versions, and a changelog watch on both repos. Orchid and CRUD should be upgraded together, in a branch, behind the smoke suite — never one without the other.
Support. No vendor SLA, no commercial backing, small contributor base. Support is internal by default: whoever owns the admin layer answers for it. Mitigate expertise concentration — the real exposure here — by ensuring at least two engineers can work in the screen/layout/field abstractions and by writing internal pattern docs for screens, fields, and action gating. General Laravel fluency does not transfer 1:1 to Orchid, and pretending it does is how internal-tool roadmaps slip.
Scaling. Screens are cheap, which means PMs can accept broader internal-tool scope without proportional headcount — a real capacity lever, but one that depends on the two-engineer depth above. Watch two scaling edges: per-screen query patterns (relations, filters, eager loading) as entity counts grow, and the operational cost of many small screens with no shared convention. A documented screen template and naming/authorization convention buys more than any framework feature.
Failure modes. (a) Framework drift — Laravel upgrades an admin layer that has no upstream support yet, blocking the whole app. (b) Orchid major bump silently changing CRUD behavior with no CRUD version change. (c) Permission drift — hide used as though it were authorization, leaving an action invisible in the UI but callable on the server. (d) Navigation regressions on guest, tenant-scoped, or impersonated sessions. (e) Expertise loss — the one or two people who understand screens leave, and screen work stalls. Each has a cheap countermeasure: version lock, paired upgrades, server-side checks plus a review checklist, a navigation test in the smoke suite, and documented patterns.
Ramp-up. For an existing Orchid team, the 4.4.0 bump is hours-to-a-day including verification. For a team new to Orchid, plan weeks: Orchid fundamentals (layouts, screens, fields, actions, permissions) before CRUD is useful, plus per-screen effort in the re-platforming case. The pilot should be one low-risk internal screen, with a written comparison against the alternative we are declining — bespoke Blade/Livewire, Filament/Nova, or a bought admin product — so the trade is explicit rather than assumed.
How can I help you explore Laravel packages today?