plugins/ directory, and each one can register services, routes, views, migrations and front-end assets.
Anatomy of a plugin
The manifest
The plugin class
YourPlugin.php implements PluginInterface. Each hook is optional — implement only what you need:
Enabling a plugin
Active plugins are tracked in a generatedstate.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.