Honest roadmap for Plugin SDK capabilities that are not shipped yet — the only place aspirational plugin documentation may live.
About this page#
Everything below is planned or deferred. It is not available as a stable App\Sdk / PluginRegistrar surface on this branch unless a bullet explicitly says a related core contract already exists.
Shipped guides start at Plugin SDK.
Recently shipped#
These entries have left this page. They are documented on the DataTable SDK page and demonstrated by plugins/signals/slots-demo.
| Was |
Shipped as |
| Query builder / record list API |
PluginRegistrar::datatable() — a declared datatables[] table resolved into mount params for the shared components.data-table component, with searchable, scopes, default_sort, with / with_counts and per-page shaping |
| Column registration seam |
The definition's columns[] config — key, label, sortable/filterable flags, filter types, and renderers, validated as the plugin boots |
| Custom list views (plugin-owned) |
Plugin tables inherit the core list machinery, including saved live filters, column toggles, and CSV export |
A programmatic mediated query facade for plugin PHP (Signals::query()-style list/filter beyond single-id read) is still deferred — see below.
Data layer#
| Item |
What / why later |
| Programmatic query facade |
List/filter from plugin PHP beyond single-id read; deferred until a mediated query surface exists that preserves allowlists and audits. The declarative datatable seam covers listing UI today |
| Named domain scopes |
Safer reusable query scopes without exposing Eloquent |
raw_read |
Controlled escape hatch for advanced reads; high risk of leaking undeclared fields |
| Core API response filters |
Let plugins shape REST payloads; needs stable filter contracts and performance review |
HTTP & integrations#
| Item |
What / why later |
| Plugin inbound webhooks |
Receive third-party callbacks into plugin code with auth + routing; outbound HTTP allowlist is shipped today |
| Dedicated plugins queue |
Isolate slow sync jobs from default; naming / Horizon config TBD |
| Item |
What / why later |
| Install-time capability summary UI |
Richer Plugins admin summary of declared capabilities at install |
| Marketing-style plugin listings in the Plugins admin |
Warehouse-front detail panels in the manager UI. (Plugin-owned UI pages — nav + pages[] rendered at /plugins/{vendor}/{name}/{page} — are shipped; see Plugin UI) |
| Marketplace / browse |
Discover and install plugins from a catalogue |
Import / export#
Hooks & automation#
| Item |
What / why later |
| Decorator core call-sites |
Handlers + dispatcher exist; core does not yet invoke Decorator at domain call-sites. Validator (assignment.creating) and Filter (assignment.query) call-sites shipped in P8A-13′. Event + AuditableEvent bridges remain shipped. |
| Workflow / approval / report / widget seams (Phase 7C–F) |
Stable plugin APIs for workflows, approvals, reports, dashboard widgets beyond slot injection |
Testing & DX#
| Item |
What / why later |
| Remaining SDK test utilities (plugin-system §14) |
Beyond MakesPluginManifests, FakesPluginHooks, InstallsFixturePlugins — HTTP/slot spies and richer fakes |
Scanning#
| Item |
What / why later |
| Scan context handlers as first-class SDK chapters |
Phase 5 scanning contracts exist in core; deeper plugin-facing docs/API polish TBD |
Do not rely on these yet#
If a tutorial or agent prompt mentions programmatic query builders, inbound plugin webhooks, import registrar methods, or workflow plugin APIs as if they were shipped, treat that as outdated. The shipped surface is: Event hooks + data facade, slots (all families + modals.global), nav groups + config-driven pages, datatables (datatable() / datatableSlot() and the datatable page section), palette providers, recents, plugin notifications (Signals::notify), and provided events (Signals::emit) — documented in the other Plugin guides and demonstrated end-to-end by plugins/signals/slots-demo/.