orchestra/view
Orchestra View provides view-layer utilities for Laravel applications, extending the framework's view factory with helpers for resolving, composing, and managing templates within the Orchestra ecosystem. It keeps theme and template handling lightweight and consistent.
orchestra/view is not a templating product; it is a swap of Laravel's view.finder for an ordered, theme-aware finder plus render-lifecycle events. The capability is roughly a couple hundred lines of glue over native Illuminate\View. The decision this package informs is replicate the pattern in-house, not take the dependency.acme::dashboard) with a documented app-level override seam (resources/views/vendor/acme/...). This package demonstrates that contract cleanly enough to cite in an extension-SDK design doc.v6.0.0 pinning to Laravel 8. Adoption makes the team the de facto maintainer of high-blast-radius rendering plumbing. That is a portfolio signal, and it argues for a stricter default policy on anything that touches view resolution.Consider it only if all of the following hold:
Look elsewhere — or build a small owned implementation — when:
View::share(), or standard view caching. Native Laravel covers it; the package is pure overhead.For executives: this is infrastructure, not a product, and it carries no license cost but a real ownership cost. It is a theme-aware view layer that swaps how Laravel locates templates so that themes, packages, and extensions can each contribute templates with deterministic override precedence. The strategic point is that the value lives in the pattern, not the package: white-label skins, per-tenant template overrides, and a plugin ecosystem all need exactly this precedence model. Our recommendation is to treat it as an inherited Orchestra Platform dependency if we are already on Orchestra, and otherwise to implement the same pattern in-house on native Laravel rather than adopt a package with zero stars, zero dependents, and a support matrix that ends at Laravel 8. Either way, someone on our side owns it.
For engineering: the entire integration surface is Orchestra\View\ViewServiceProvider and Orchestra\View\FileViewFinder. Register paths in boot(), always with $app->extend('view.finder', ...) and never by rebinding the container key — rebinding silently discards theme and extension path registrations. Prefer prependNamespace() for app-level overrides and prependLocation() for the active theme, and centralize theme registration in one provider because prepend order is a stack you will have to debug at runtime. Namespace every first-party view (blog::post.index) so overrides have a documented seam. Use class-based composers over View::share(), scope wildcard composers away from * so mail and error pages do not hit the database, and debug resolution with app('view.finder')->getPaths() and getHints() before blaming Blade. Clear compiled views after any path or directive change. Pin ^6.0, gate provider registration behind a config flag for a one-line fallback to native view services, and put the Laravel/PHP compatibility matrix in CI — that matrix plus the consumed-behavior list is our replacement spec.
How can I help you explore Laravel packages today?