orchid/widget
Widget system for the Laravel Orchid admin panel. Build reusable dashboard blocks from base widget classes, layout components, and chart helpers, then attach them to screens. Part of the Orchid Platform ecosystem for composing flexible, custom admin dashboards in Laravel.
orchid/widget is the "card primitive" for an admin surface — KPI tiles, counters, activity feeds, mini-tables, status lights — placed in rows and columns and registered per screen. When a roadmap item says "ops needs a dashboard," this answers whether we hand-roll a dashboard shell or assemble one from existing primitives. It is a shell-and-layout decision, not a charting or analytics decision.orchid/platform, consumed transitively; its real adoption is the platform's adoption. Do not put this row into a build-vs-buy scorecard as an independent market signal — it will produce a false negative. The PM-relevant question is "does our team already run Orchid," and the answer is binary.Consider it only when all of these hold:
Look elsewhere when:
/admin middleware become reachable if rendered on public routes — both a design liability and a data-exposure risk.orchid/platform repo's release cadence and issue response, and expect breaking changes across Orchid majors.orchid/platform to a frontend app just to unlock widgets. That inverts the dependency direction and imports an admin panel into a surface that never needed one.Also flag before any spike: the repo name (tabuna/widget) and the package name (orchid/widget) do not match. Confirm canonical source and provenance — that is a supply-chain question a PM should raise, not leave entirely to engineering.
To executives (one paragraph). We can stand up internal dashboards — KPI tiles, activity feeds, ops status boards — on the Laravel stack we already run, at zero license cost under MIT, using the widget layer of a mature admin framework instead of buying a BI tool or building a dashboard shell from scratch. The return is time-to-first-dashboard and deferred tooling spend, not differentiated capability. The risk is concentration: this sits in a single-maintainer ecosystem and is a satellite of the parent platform, so treat it as internal, non-critical infrastructure — pin versions, name an owner, and keep a documented exit path. Success looks like dashboards shipped in days rather than sprints, dashboard requests absorbed without new tooling spend, and bespoke back-office pages retired in favor of widgets.
To engineering (the honest version). This is a satellite package of orchid/platform, not a standalone library — zero stars and zero dependents are artifacts of a monorepo split, so evaluate the parent project's health, changelog, and upgrade path, not this repo's stats. Mechanically it is a composer require plus auto-discovery; structurally it is a contract with Orchid's internal rendering API, which has moved across majors. Assume we own it: pin orchid/platform explicitly, pin the widget package to a commit SHA rather than a floating constraint, and verify the render path survives config:cache and route:cache. Treat widget handlers as production code — they execute on page load, so an unindexed aggregate per tile per refresh is a real, recurring cost. Mandate caching or precomputed aggregates and per-widget timeouts before we ship more than a handful of tiles. Re-audit authorization per widget for any context outside /admin; do not inherit the admin panel's guard. Add a smoke test that renders each widget and asserts non-empty output — that is our upgrade canary. Budget three to five engineer-days per Orchid major upgrade as a standing line item, and record the adoption rationale in an ADR so the next engineer does not silently inherit an orphan.
Default recommendation: if we already run Orchid, adopt the pattern and migrate one low-risk read-only widget first behind a feature flag. If we do not, reproduce the directive and rendering contract in-repo — a few hundred lines we own and test — rather than taking the dependency: same ergonomics, no supply-chain exposure, no admin panel dragged in behind a view primitive.
How can I help you explore Laravel packages today?