Skip to main content
Aikeedo gives you several ways to change its behavior and appearance. They differ in what they can change, how you ship them, and whether an update keeps them. Pick the least invasive option that does what you need.

Extension mechanisms

Don’t edit core files unless you’re willing to maintain a fork. An update extracts the new release over the installation root, which replaces every core file it contains.

When to use a plugin

Use a plugin when you need to add or change behavior. A plugin is a Composer package of type aikeedo-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
Plugins can’t add Doctrine entities, database migrations or console commands. See Data and persistence for alternatives.

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 type aikeedo-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 in resources/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:
The release archive doesn’t include 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.
Keep overrides small and few. After each update, compare every override with its updated original, for example with diff -u resources/views/templates/auth/login.twig resources/views/overrides/templates/auth/login.twig.
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.
Never customize the bundled heyaikeedo/default theme in place, because the next update overwrites it. Copy it under your own vendor name first. See Customizing existing themes.

Decision checklist

Build a plugin that registers a payment gateway. Start with Payment gateways.
Build a theme. Add the extra page with a theme entry class, as described in Custom pages.
Build a plugin with a request handler that extends Presentation\RequestHandlers\App\AppView. See App pages and APIs.
Use a view override for templates/auth/signup.twig, and re-check it after each update.
Build a plugin that listens to User\Domain\Events\UserCreatedEvent. See Event-driven integrations.
Use the REST API. You don’t need to change Aikeedo itself.