Skip to main content
A plugin is a Composer package that Aikeedo loads at boot. It can add pages, API endpoints, settings screens, navigation items, scheduled work and integrations, and it can plug new implementations into the core’s extension points, without you editing a single core file.
This page applies to Aikeedo 5.x. Class names, paths and signatures match the 5.0 source code.

Anatomy of a plugin

Two things make it a plugin:
  1. composer.json declares "type": "aikeedo-plugin", requires heyaikeedo/composer, and names an entry class in extra.entry-class.
  2. The entry class implements Plugin\Domain\PluginInterface:
src/Plugin.php
The entry class is resolved from the dependency injection container, so anything you type-hint in the constructor is injected. That is how a plugin reaches the core: you ask for a registry, a collection or a mapper, and you register your own implementations inside boot().
Context is read-only metadata about your package, built from its composer.json. It has no container or event dispatcher on it. Use constructor injection instead.

How a plugin is loaded

Key points:
  • Plugins boot after every core module, so all core registries exist by the time boot() runs.
  • boot() runs on every request, including console and cron runs. Keep it cheap: register things, don’t do work.
  • Only plugins whose status is active boot. Themes are a special case: a theme is active when it’s the selected theme.
  • If a plugin crashes while booting, Aikeedo records the failure in var/plugin-health.json and skips the plugin on later requests, so one broken plugin can’t take the site down. With DEBUG on, the error is raised instead. See Debugging.

What plugins can extend

What plugins cannot do

Where plugins live

Next steps

Build your first plugin

A working plugin with a settings page and a menu item, step by step.

Manifest reference

Every composer.json field Aikeedo reads.

Lifecycle and hooks

Install, activate, deactivate, uninstall and update.

Services you can inject

The core services a plugin reaches through its constructor.

Need Help?

If you need assistance with Aikeedo:

Professional Support

Get expert help from our team with a paid support subscription

Troubleshooting Guide

Check common issues and solutions