From redaxo-core
Explains REDAXO PHP CMS architecture including directory layout, request lifecycle, core classes like rex_addon, rex_path, rex_request, and addon conventions.
npx claudepluginhub friendsofredaxo/claude-marketplace --plugin redaxo-coreThis skill uses the workspace's default tool permissions.
REDAXO is a PHP CMS organized around a small core plus addons. Almost every feature lives in an addon – including `structure` (articles/categories), `mediapool` (media management), `users`, and `cronjob`.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Guides code writing, review, and refactoring with Karpathy-inspired rules to avoid overcomplication, ensure simplicity, surgical changes, and verifiable success criteria.
Executes ctx7 CLI to fetch up-to-date library documentation, manage AI coding skills (install/search/generate/remove/suggest), and configure Context7 MCP. Useful for current API refs, skill handling, or agent setup.
Share bugs, ideas, or general feedback.
REDAXO is a PHP CMS organized around a small core plus addons. Almost every feature lives in an addon – including structure (articles/categories), mediapool (media management), users, and cronjob.
redaxo/
├── src/
│ ├── core/ # Core classes (rex_*, never edit)
│ └── addons/
│ ├── structure/ # Articles & categories
│ ├── mediapool/ # Media library
│ ├── users/ # Backend user management
│ └── <your-addon>/ # Custom addons live here
├── data/
│ ├── addons/ # Addon-managed runtime data
│ ├── core/ # Core runtime data (config.yml lives here)
│ └── log/ # System logs
└── cache/ # Generated files; safe to delete
The user's project root usually contains redaxo/ plus assets/ (public mirror of addon assets) and a frontend directory (often public/ or root).
index.php boots rex (frontend) or redaxo/index.php boots the backend.config.yml and the package.yml of every installed addon.boot.php runs – this is where extension points get registered.OUTPUT_FILTER runs on the final HTML before it's sent.rex_addon::get('addon_name') – access addon instance, config, paths, versionrex_config::get('namespace', 'key', $default) / set() – persistent key-value configrex_path::addon('addon_name', 'sub/path') – absolute filesystem pathsrex_path::frontend('relative/path') – paths in the public frontendrex_url::backendController(['page' => 'addon/section']) – backend URLsrex_url::frontendController(['article_id' => 5]) – frontend URLs (use yrewrite if installed)rex_clang::getCurrentId() / rex_clang::getAll() – language handlingrex_request::get('key', 'string', '') / post() – type-safe inputrex_response::sendJson($data) – JSON responses for AJAXrex_logger::factory()->log('error', $msg) – write to system logrex::isBackend() / rex::isFrontend() / rex::getUser() – contextredaxo/src/addons/<name>/ during development; published addons get distributed via the REDAXO Installer or redaxo.org.assets/ folder. They're symlinked/copied to assets/addons/<name>/ on install.rex_path::* instead of hardcoding __DIR__ . '/../...'.rex_url::* so the system stays portable across installations and subdirectory deployments.rex::isBackend() checks in boot.php – many extension points fire in both contexts.$_GET / $_POST directly instead of rex_request – loses type safety and the built-in CSRF token handling.1 = German). Use rex_clang::getCurrent() and rex_clang::getCurrentId().