If you are searching for :
Else, you are at the good place.
Here, we will speak about :
The code for all officially maintained extension and the core is kept in an unique repository.
It's a mono-repository.
It's kind of majestic monolith.
The core contain the minimum features, then everything is done via extensions.
The core code follows as much as it can the symfony good practices and has a special folder named component for bigger features like the Entity Filter system if they do not have their own independent package.
Each extension is optional.
Keeping all these extensions in one repository permits testing that everything works easily, understanding the code faster and refactoring much quicker.
The dev-app isn't a copy-and-install starter (it was formerly, and misleadingly, named skeleton).
It's used for testing, demo, generating the docs, and a few classes from it are extracted by the default installer.
Each package (except dev-app, installer and js-helper) is built as a symfony bundle.
The core package requires a Symfony app installed to be functional.
Want a particular details about the way the code is organized ?
Feel free to ask, I will list answers here.
This is only for contribution, if you are searching to develop a new application with Pushword, see installation.
composer update && composer reset-dev-app
# php-cs-fixer
composer format
# run rector, format and tests
composer rector
# run phpstan
composer stan
# to play with default app console (dev-app)
composer console ...
| Package | Purpose | Depends on |
|---|---|---|
| core | Base entities (Page, Media, User), entity filters, events, controllers, Twig extensions | — |
| admin | CRUD interface for Page, Media, User built on EasyAdmin | core |
| admin-block-editor | Rich text / block editor for the admin | core |
| advanced-main-image | Main image format options (hidden, hero, etc.) and default templates | core, admin |
| ai-skills | AI authoring skills (the /pw router skill and its reference playbooks) — Node package | — |
| api | Token-authenticated REST API mirroring the admin, with an OpenAPI endpoint | core |
| conversation | Comments, contact forms, user input | core, flat |
| docs | Project documentation (ships to end users as vendor/pushword/docs/content/) | — |
| flat | Flat-file CMS mode: sync pages/media between database and filesystem | core |
| installer | Bootstraps a new Pushword project | core |
| js-helper | Shared JavaScript utilities (Node package) | — |
| admin-monaco-editor | Monaco code editor for admin (Node package) | — |
| new | Meta-package that pulls in core + admin + common extensions | core |
| newsletter | Audiences, contacts, segmented campaigns and criteria-driven automations | core |
| page-scanner | Dead link detection, 404/301 checks, TODO scanning | core |
| page-update-notifier | Email notifications on page edits | core |
| quiz | Interactive client-side QCM / personality tests via a {% quiz %} block | core |
| repurpose | Turn a page into social carousels rendered as SVG slides (PNG/PDF export) | core |
| search | Optional SQLite full-text search via Loupe (zero infra) | core |
| dev-app | Dev/test/demo app (not a copy-paste starter for end users; formerly named skeleton) | core |
| snippet | Reusable content fragments + dev-registered components, via snippet() | core |
| static-generator | Generate static HTML sites | core |
| template-editor | Edit Twig templates from the admin UI | core |
| version | Page versioning | core |