Almost all of InnoCMS's extensibility comes from its hook-based plugin system. A minimal plugin needs just two files: config.json and Boot.php.
Layout
plugins/MyPlugin/
├── config.json
├── Boot.php
├── Routes/panel.php
└── Views/
Three steps to a feature
- In
init(), calllisten_hook_filter('component.sidebar.plugin.routes', ...)to add a sidebar entry - Use
listen_blade_insert('layouts.footer.top', ...)to inject footer content - Register panel routes and controllers in
Routes/panel.php
No core files are touched, and removing the plugin restores the original behaviour.