Skip to main content
A theme’s composer.json is both its Composer manifest and the metadata Aikeedo shows in the admin panel.

Example

composer.json

Required

string
required
Must be aikeedo-theme.
string
required
The package name, vendor/package. It must match the installed directory, extra/extensions/{vendor}/{package}.
string
required
The installer package. Use ^1.2.0 if you use object entries in extra.public.
A manifest that breaks any of these is rejected, and the theme never appears in the admin panel.

Differences from plugins

Metadata

string
Semantic version. Installing from an archive runs composer require <name>:<version>, so keep it accurate and raise it every release.
string
Shown in the admin panel. The top-level field is used, not extra.description.
string
Display name. Falls back to the package name.
string
A short one-line summary.
URL of a logo image for listings.
string
URL of an icon image.
string
Your product page.
string
Release date, such as 2026-09-15.
object[]
Entries with name, email, homepage and role.
object
Any of chat, docs, email, forum, irc, issues, rss, source, wiki.

Assets

array
Directories and files copied to public/e/{vendor}/{package}/ when the theme is installed. A built theme normally publishes ["assets", ".vite"]: the compiled files, and the manifest that maps source paths to their hashed names.
Without this, your CSS and JavaScript aren’t reachable from the browser. See Build and assets.

PHP

string
A class implementing Plugin\Domain\PluginInterface. Only needed when the theme registers routes or services. Escape the backslashes: "Acme\\Aurora\\Theme".
object
Maps your namespace to src/. Required whenever the theme ships PHP, and the package must be installed with Composer for it to take effect.

Checklist

The installed directory matches name.
type is aikeedo-theme.
require includes heyaikeedo/composer.
version is set and raised for the release.
extra.public lists everything the browser needs.
If there’s PHP, the entry class and the PSR-4 namespace agree.