Overview
The Xilancer plugin system follows a strict three-layer architecture that keeps core and plugins fully decoupled.
Architecture
core/ Laravel application. Calls plugin_*() helpers at seam points.
Never imports plugin classes directly.
plugins/framework/ Zero-dependency engine: hooks, slots, registries,
plugin discovery, boot ordering.
plugins/<slug>/ Individual plugins. Depend ONLY on PluginsFramework/*.
Key invariant: Plugins never import App\*, Modules\*, or other plugin namespaces. Core talks to plugins only through hooks, slots, and registry seams.
Plugin Lifecycle
- Discovery —
PluginManagerscansplugins/*/plugin.json, validates manifests - Activation — Writes
"slug": truetoplugins/statuses.json(inactive by default) - Autoload — PSR-4 namespaces registered on Composer class loader
- Boot — Entry class instantiated with
PluginContext,boot()called in dependency order - Runtime — Core calls plugin seams via guarded helpers
- Asset Wiring — Routes, views, migrations, config auto-loaded by
PluginBridgeServiceProvider
Architectural Invariants
- Exception isolation — Plugin boot errors never break other plugins or core
- No core imports — Plugins only use
PluginsFramework\*and PHP builtins - Scalar-only payloads — Actions receive IDs, strings, arrays — never models
- Data filter safety —
plugin_filter_model_data()reasserts allow-lists after plugin enrichment - Priority ordering — Lower priority runs first (default: 10, FIFO within same priority)
- Activation state external —
plugins/statuses.jsonsurvives core updates - Dependency isolation — Missing/unmet dependencies isolate only the affected plugin
Last updated: September 2026
Still stuck?
Our support team is ready to help you get set up.

