Skip to main content
When you need something the store doesn’t do out of the box, write a plugin instead of editing the core. Plugins are auto-discovered from the plugins/ directory, and each one can register services, routes, views, migrations and front-end assets.

Anatomy of a plugin

The manifest

The plugin class

Your Plugin.php implements PluginInterface. Each hook is optional — implement only what you need:

Enabling a plugin

Active plugins are tracked in a generated state.json (git-ignored and environment-specific). A working sample, example-hello, ships in the repo — copy it as a starting point for your own.
Because a plugin can bring its own routes, views and migrations, most features can live entirely inside plugins/ — which keeps your store easy to update as the core moves forward.