pollora/framework
Pollora Framework brings Laravel's toolkit to WordPress development, letting you build themes and plugins with Blade templates, Eloquent models, service providers, and familiar Laravel conventions while staying fully compatible with WordPress.
pollora/block-bindings, pollora/roles, pollora/meta, pollora/assets) plus pollora/query. That is a signal for roadmap planning: capabilities like typed meta or roles & capabilities can now be evaluated, prototyped, or adopted independently of the full framework rather than as an all-or-nothing platform bet.pollora:doctor checks persist across all four domains, alongside pollora:binding:list, pollora:make:binding, pollora:roles:*, and pollora:meta:*. The latest patch adds a doctor warning for an APP_URL without a scheme and a Site Health check that flags a web server serving .env directly — a security posture item you can cite in procurement or audits. These are onboarding and support-cost levers — worth tracking as a metric (time-to-first-working-site, support tickets deflected).MethodInvokerInterface, BindingEventsInterface, PostFinderInterface, ViteManagerFactory, RuntimeContext, PublicPath). Fewer hidden container lookups means fewer flaky tests and easier contribution — relevant if the roadmap depends on community PRs or third-party extensions.pollora/query 2.0 brings coverage of every WordPress query class, terminal methods (first(), ids(), count(), exists()), and per-builder docs. For product planning, that means fewer raw WP_Query escape hatches in feature specs and a simpler story for "how do we list/filter/paginate this content type."Adopt or upgrade when:
pollora/query major)./cms/wp-admin/ that previously made those environments unusable out of the box.Look elsewhere or defer when:
pollora/query 2.0 fixes semantics that previously ran: where() followed by orWhere() now groups earlier clauses as (a AND b) OR c, DateQuery::inclusive() actually takes effect, dates use a 24-hour clock, and invalid fields(), userPermission(), or orderBy() directions now throw QueryException instead of being silently ignored. Any production query relying on the old ungrouped or lenient behaviour will change results or start throwing. Pin pollora/query to ^1.0 and schedule a migration window with regression tests before letting composer update take 2.0.pollora/query upgrading guide is a good indicator of the standard) before standardising.For executives: This release is an architecture investment, not a feature bet. Pollora has been decomposed into four independent, reusable packages — block bindings, roles and capabilities, typed meta, and assets — each of which now works with or without Laravel. Application code does not change: class names, rendered pages, REST responses, and command output are all unchanged. The strategic upside is reach (the asset and meta packages can serve classic themes, plugins, and Bedrock sites, broadening the addressable market beyond Laravel shops) and maintainability (smaller, independently testable units with explicit contracts instead of hidden container lookups). The latest patch also hardens local development and security checks: it fixes Valet/Herd compatibility and adds a Site Health warning if .env is web-accessible. The one item requiring active management is the optional pollora/query 2.0 adoption, which corrects query semantics and will change results for a small set of existing queries — we recommend pinning to 1.x until regression tests pass.
For engineering: The runtime behaviour you ship is unchanged; the dependency graph is not. Be aware of four points. First, four new required packages now carry classes that previously lived in-tree — expect to align versions and re-read the changelogs, but no import or namespace edits are needed in application code. Second, pollora/query accepts ^1.0 || ^2.0; composer update will take 2.0, and 2.0 changes real query outcomes — where()/orWhere() grouping, DateQuery::inclusive(), 24-hour date handling, and hard QueryExceptions where invalid arguments were previously ignored. Pin ^1.0 in the root composer.json if you need time. Third, the Laravel-specific pieces stayed behind under Pollora\*\Infrastructure\Laravel (service providers, LaravelMetaValidator, LaravelMethodInvoker, LaravelBindingEvents, LaravelPostFinder, ViteManager, middleware, directives, and the artisan commands), so the framework still owns facades, validation, containers, and DX while the packages stay framework-agnostic — a clean seam if we ever need to swap a component. Fourth, the constructor-injection refactor (AssetEnqueuer, AssetFile::resolveUsing(), AssetManager, MetaUiDrivers, MetaAccessor::extend()) makes unit testing materially easier and removes container teardown hazards in tests; it is safe to lean on in new test suites. The latest patch additionally fixes APP_URL scheme handling, Valet/Herd front-controller detection, and /cms/wp-admin/ routing, plus adds a Site Health check for exposed .env — all low-risk fixes.
How can I help you explore Laravel packages today?