Next-generation Content Management Framework built on PHP 8.2+ and Symfony 7.4 LTS.
CPalius sits between heavy CMS platforms and bare frameworks. You get authentication, access control, file management, localization, an admin panel, and a modular extension system — without rebuilding them for every project, and without inheriting a decade of CMS technical debt.
Website: cpalius.com
| Approach | Problem |
|---|---|
| Classic CMS (WordPress, Drupal) | Rich plugins, but heavy schemas, debt, and security surface |
| Pure frameworks (Symfony, Laravel) | Clean, but you rebuild auth, ACL, media, and admin every time |
| CPalius | Symfony-grade core + ready enterprise building blocks + safe modules |
Use it for blogs and community sites today, or as the base for dealerships, travel agencies, CRM, and ERP-style apps tomorrow.
- PHP 8.2 or newer
- Composer 2
- SQLite, MySQL, or PostgreSQL
- A web server pointing at the
public/directory
No Node.js is required for the core or admin UI (AssetMapper + standalone Tailwind).
composer install
cp .env.example .env # then set DATABASE_URL, APP_SECRET, tokens
php cp-core/bin/console doctrine:migrations:migrate
php cp-core/bin/console cp:user:create-adminPoint your vhost document root to public/, then open the site.
Useful commands:
php cp-core/bin/console cp:module:list
php cp-core/bin/console cp:module:activate ModuleName
php cp-core/bin/console cp:cron:run
php cp-core/bin/console cp:blog:seed-demo-contentCPalius/
├── cp-core/ # Kernel, config, migrations, App\ namespace
├── cp-includes/ # Composer vendor (isolated)
├── cp-content/ # Your space: modules, themes, sync config, translations
├── public/ # Web root (front controller + assets)
└── composer.json
Namespaces:
App\→cp-core/src/Modules\→cp-content/modules/
Developer code stays in cp-content/. Framework system files stay in cp-core/.
Broken third-party code must not take the whole app down. CPalius treats the core like an OS:
- Static module list — Active modules are written to
active_modules.php. Boot never queries the database for module status. - Runtime quarantine — Module boot/route/hook/API failures are caught; the core and AACP keep running.
- Pre-activation checks — Before enabling a module, an isolated process runs container/YAML lint. Failures cancel activation.
- Recovery console —
/aacp/recoverycan stay available even when the database is down (token from.env).
Faulty modules are logged to the quarantine log and can be reviewed in AACP.
- Nodes — Pages, posts, and similar content: SQL columns for title, slug, status, locale + flexible JSON
data - Flat field index — Queryable JSON fields indexed for fast filters (SQLite / MySQL / PostgreSQL)
- Localization — Built into the core (
UNIQUE(slug, locale), translation groups) - Resources — Business records via
#[CpResource](capabilities, multi-tenant flags, workflow hooks — infrastructure ready)
- Studio (
/admin) — Content operations: posts, media, menus, forum, homepage portal - AACP (
/aacp) — System console: modules, plugins, cron, hooks, API keys, metrics, localization, cache rebuild, quarantine, recovery
| Layer | How |
|---|---|
| Modules | Independent Symfony bundles under cp-content/modules/ |
| REST API | #[CpApi] methods → /api/... with X-CP-API-KEY |
| Hooks | Flat-file Hooks/ and/or #[CpHook] services |
| Cron | DB jobs, #[CpCronJob], and hook files — one runner |
| Plugins | Optional sub-features toggled without disabling the whole module |
| Settings | #[CpSetting] definitions, loaded lazily from the database |
- Capability-based access control (not
ROLE_ADMINchecks in app code) - Roles as YAML in
cp-content/config/sync/(travel with Git); users stay in the database - Query scoping:
.own/.anycapabilities become SQLWHEREclauses - Rich-text XSS sanitization at save time
- Dev-mode N+1 query guard
- Tenant SQL filter infrastructure for SaaS-style isolation
| Module | Purpose |
|---|---|
| Blog | Posts on Node, categories/tags, scheduled publish, public API, hooks & plugins |
| Forum | Sections, topics, posts, likes, reports, bans, ranks, moderation |
| Media | Asset library and image picker (hash-based storage) |
| Menu | Named menus and items for the frontend |
Default theme: cpalius-website (portal, blog, and forum UI; tr / en).
- Workflow / state machine for business records
- On-demand image derivatives (Imagine-style pipeline)
- First concrete
#[CpResource]example + audit log - Messenger transports for email and bulk jobs
- Theme manager UI in AACP
See cpalius.com for the full product story and CPALIUS_MANIFESTO.md for architectural laws.
Ideas, issues, and pull requests that respect the manifesto (especially Core Never Dies and the cp-core / cp-content split) are welcome.
See composer.json / the LICENSE file in this repository for the current license terms.
CPalius CMF — a project of MEGABRE · Founder: Ali Çömez (slaweally)