Extension mechanisms
When to use a plugin
Use a plugin when you need to add or change behavior. A plugin is a Composer package of typeaikeedo-plugin. Aikeedo loads it at boot and calls its entry class, which registers routes, templates, listeners and services with the core.
Typical plugins:
- Integrate a payment provider, tax service, CRM or email marketing tool
- Add a storage backend, vector database or AI provider
- Add pages to the app or admin panel, with their own API endpoints
- React to domain events such as a user signing up or an order being fulfilled
- Run scheduled work on every cron tick
Plugin overview
How plugins are discovered, booted and extended.
When to use a theme
Use a theme when you need to change the public website. A theme is a Composer package of typeaikeedo-theme. The active theme renders the landing page from its templates/index.twig, and it can register additional public pages through an optional PHP entry class.
A theme doesn’t control the app, the admin panel, authentication pages, policy pages or error pages. Those templates belong to the core.
Theme overview
What a theme controls and how rendering works.
When to use a view override
Use a view override when you need to change a core template that no plugin or theme controls, such as the login page layout. Twig looks for templates inresources/views/overrides/ before resources/views/. That directory doesn’t exist by default. To override a template, copy it to the same relative path under overrides/ and edit the copy:
resources/views/overrides/, so an update keeps your overrides. It still updates the originals, though, and your copy doesn’t pick up those changes, such as new variables, fixes or markup that JavaScript depends on.
If template caching is enabled (
CACHE=true with DEBUG=false), clear the cache after you add or change an override. Use Status → Clear cache in the admin panel.What an update replaces
An update extracts the new release archive over the installation root, runs database migrations, then reinstalls every installed plugin and theme through Composer. The table shows how each location is affected.Decision checklist
I want to add a payment method
I want to add a payment method
Build a plugin that registers a payment gateway. Start with Payment gateways.
I want a custom landing page and an extra public page
I want a custom landing page and an extra public page
Build a theme. Add the extra page with a theme entry class, as described in Custom pages.
I want to add a page inside the app for signed-in users
I want to add a page inside the app for signed-in users
Build a plugin with a request handler that extends
Presentation\RequestHandlers\App\AppView. See App pages and APIs.I want to change the signup page markup
I want to change the signup page markup
Use a view override for
templates/auth/signup.twig, and re-check it after each update.I want to send users to my CRM when they sign up
I want to send users to my CRM when they sign up
Build a plugin that listens to
User\Domain\Events\UserCreatedEvent. See Event-driven integrations.I want to call Aikeedo from another application
I want to call Aikeedo from another application
Use the REST API. You don’t need to change Aikeedo itself.