waaseyaa / framework
Waaseyaa monorepo — a modern, entity-first, AI-native CMS
Requires
- php: >=8.3
- symfony/console: ^7.0
- waaseyaa/access: @dev
- waaseyaa/ai-agent: @dev
- waaseyaa/ai-pipeline: @dev
- waaseyaa/ai-schema: @dev
- waaseyaa/ai-vector: @dev
- waaseyaa/api: @dev
- waaseyaa/cache: @dev
- waaseyaa/cli: @dev
- waaseyaa/config: @dev
- waaseyaa/database-legacy: @dev
- waaseyaa/entity: @dev
- waaseyaa/entity-storage: @dev
- waaseyaa/field: @dev
- waaseyaa/foundation: @dev
- waaseyaa/i18n: @dev
- waaseyaa/mcp: @dev
- waaseyaa/media: @dev
- waaseyaa/menu: @dev
- waaseyaa/node: @dev
- waaseyaa/path: @dev
- waaseyaa/plugin: @dev
- waaseyaa/queue: @dev
- waaseyaa/routing: @dev
- waaseyaa/ssr: @dev
- waaseyaa/state: @dev
- waaseyaa/taxonomy: @dev
- waaseyaa/telescope: @dev
- waaseyaa/typed-data: @dev
- waaseyaa/user: @dev
- waaseyaa/validation: @dev
- waaseyaa/workflows: @dev
Requires (Dev)
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.5
- waaseyaa/testing: @dev
- dev-main
- v0.1.0
- v0.1.0-alpha.179
- v0.1.0-alpha.178
- v0.1.0-alpha.177
- v0.1.0-alpha.176
- v0.1.0-alpha.175
- v0.1.0-alpha.174
- v0.1.0-alpha.173
- v0.1.0-alpha.172
- v0.1.0-alpha.171
- v0.1.0-alpha.170
- v0.1.0-alpha.144
- v0.1.0-alpha.143
- v0.1.0-alpha.142
- v0.1.0-alpha.141
- dev-chore/unblock-check-entity-storage-translatable-revisions
- dev-kitty/mission-entity-storage-translations-v1-closeout
- dev-kitty/mission-inertia-file-upload-csrf-closeout
- dev-kitty/mission-post-1390-dispatcher-reconciliation-closeout
- dev-kitty/mission-dispatcher-array-param-compat-shim-closeout
- dev-kitty/mission-migration-platform-v1-closeout
- dev-kitty/mission-entity-storage-v2-closeout
- dev-kitty/mission-waaseyaa-migrate-source-wordpress-01KRCDEG
- dev-dependabot/npm_and_yarn/packages/admin/devalue-5.8.1
- dev-kitty/release-recovery-add-migration-to-split-matrix
- dev-kitty/issue-1474-check-milestones-rest-list
- dev-chore/admin-spa-m4-decomposition
- dev-chore/admin-spa-m3-wrapup
- dev-kitty/mission-admin-spa-envelope-reshape-01KRJ9ZE-lane-a
- dev-fix/issue-1315-packaged-form-strict
- dev-fix/issue-1465-parity-warn-only
- dev-fix/issue-1387-bimaaji-mcp-removal
- dev-chore/cleanup-session-scratch
- dev-fix/issue-1457-translatable-article-fixtures
- dev-fix/issue-1458-surface-parity-php85
- dev-fix/issue-1394-trusted-proxies
- dev-fix/issue-1449-savecontext-through-save
- dev-chore/m002-followups
- dev-fix/1443-definition-validator-boot
- dev-chore/sync-internal-versions-alpha.177
- dev-fix/skeleton-paths-http-smoke
- dev-admin-dist/update
- dev-feature/m4a-4-dry-run-transitions
- dev-fix/cpnew-check-test-ci
- dev-fix-cpnewchecktest-docblock
- dev-m4a-3-transition-history-widget
- dev-m4a-2-workflow-detail-page
- dev-m4a-1-workflows-list-page
- dev-m1b-image-fonts-defer
- dev-m2b-build-pipeline-close-epkg05
- dev-m1b-icon-nuxt-icon
- dev-feat/admin-spa-m3b-bundle-picker
- dev-feat/admin-spa-m3a-bundle-filter
- dev-dependabot/npm_and_yarn/packages/admin/vue-tsc-3.2.7
- dev-feat/admin-spa-m2a-envelope
- dev-fix/1419-playwright-preview-mode
- dev-fix/admin-integration-rollup-input
- dev-feat/admin-spa-m1b-eslint
- dev-feat/admin-spa-m1a-dep-bump
- dev-feat/admin-spa-modernization-audit
- dev-kitty/issue-1384-policy-test-infra
- dev-kitty/issue-1403-fielddefinition-named-args
- dev-kitty/issue-1402-policyattribute-named-arg
- dev-kitty/issue-1395-csrf-dead-code
- dev-kitty/mission-composer-internal-version-sweep-01KR96NA-lane-a
- dev-kitty/mission-composer-internal-version-sweep-01KR96NA-lane-c
- dev-kitty/mission-composer-internal-version-sweep-01KR96NA-lane-b
- dev-kitty/mission-php-8-5-upgrade-01KR8DN2
- dev-kitty/mission-php-8-5-upgrade-01KR8DN2-lane-a
- dev-feat/warn-only-audit-tooling
- dev-dependabot/npm_and_yarn/packages/admin/simple-git-3.36.0
- dev-dependabot/npm_and_yarn/packages/bimaaji/mcp/fast-uri-3.1.2
- dev-dependabot/npm_and_yarn/packages/bimaaji/mcp/hono-4.12.18
- dev-dependabot/npm_and_yarn/packages/admin/nitropack-2.13.4
- dev-dependabot/npm_and_yarn/packages/bimaaji/mcp/multi-7bdfbe8666
- dev-dependabot/npm_and_yarn/packages/admin/vue/test-utils-2.4.8
- dev-dependabot/npm_and_yarn/packages/admin/vue-3.5.33
- dev-dependabot/npm_and_yarn/packages/admin/vue-router-5.0.6
- dev-dependabot/npm_and_yarn/packages/admin/postcss-8.5.10
- dev-refactor/798-remove-dead-mailer
- dev-chore/packagist-approval-dp2
- dev-chore/packagist-approval
- dev-fix/admin-auth-ui-330
- dev-chore/ci-release-automation
This package is auto-updated.
Last update: 2026-05-15 03:29:45 UTC
README
A modern, entity-first, AI-native content management framework built on PHP 8.5+ and Symfony 7.
Waaseyaa replaces Drupal's legacy runtime with a clean, modular architecture organized as independent Composer packages. Every subsystem — entities, fields, config, caching, routing, access control — is a standalone package with explicit interfaces, no global state, and no hidden coupling.
Features
- Entity-first architecture — Content types, users, config, and taxonomy are all entities with a unified persistence pipeline
- JSON:API + GraphQL — Dual API layer auto-generated from entity type definitions
- AI-native — Entity schemas automatically generate MCP tools, enabling AI agents to create, query, and manage content
- Modular monorepo — 62 active packages (plus 3 meta-packages:
core,cms,full) organized in 7 architectural layers; see CLAUDE.md for the full layer table - Nuxt 3 admin SPA — Vue 3 + TypeScript admin interface with i18n support
- In-memory testable — Every subsystem has in-memory implementations for fast, isolated testing
- Zero Drupal dependency — Clean-room implementation inspired by Drupal's entity model, built on Symfony components
Requirements
- PHP 8.5 or later
- Composer 2.x
- SQLite 3 (default) or MySQL/PostgreSQL via Doctrine DBAL
Quick Start
The composer create-project target below installs the published Waaseyaa project skeleton package (waaseyaa/waaseyaa). This repository is the waaseyaa/framework monorepo that supplies the underlying framework packages.
composer create-project waaseyaa/waaseyaa my-site
cd my-site
./vendor/bin/phpunit
bin/waaseyaa serve
The scaffold now creates tests/Unit and tests/Integration, so the default PHPUnit command is usable immediately. For static or marketing-style sites, you can start from the clean scaffold, add a SiteServiceProvider, PageController, Twig templates, and a small regression test before wiring deploy infrastructure.
Create your first content:
curl -X POST http://localhost:8080/api/note \ -H "Content-Type: application/vnd.api+json" \ -d '{ "data": { "type": "note", "attributes": { "title": "Hello, Waaseyaa", "body": "My first note." } } }'
Waaseyaa ships with a built-in core.note content type that is always available at boot. To define custom content types, see the waaseyaa/node package as a reference.
Fresh App Workflow
Use this minimal sequence for a new public-facing site:
composer create-project waaseyaa/waaseyaa my-site --stability=dev
cd my-site
./vendor/bin/phpunit
php bin/waaseyaa optimize:manifest
bin/waaseyaa serve
When turning the scaffold into a site:
- Add a failing integration test for your public routes and rendered HTML.
- Register your site provider in
composer.jsonunderextra.waaseyaa.providers. - Add your
PageController,SiteServiceProvider, shared Twig layout, and site templates. - Re-run PHPUnit and
php bin/waaseyaa optimize:manifest. - Add repo-local deployment files (
deploy.php,.github/workflows/*) only after the site passes locally.
Architecture
Waaseyaa is structured as 7 architectural layers with strict downward-only dependencies:
Layer 6 Interfaces cli, admin, admin-surface, graphql, mcp, ssr,
telescope, deployer, inertia
Layer 5 AI ai-schema, ai-agent, ai-vector, ai-pipeline
Layer 4 API api, routing
Layer 3 Services workflows, search, notification, billing, github
Layer 2 Content Types node, taxonomy, media, path, menu, note, relationship
Layer 1 Core Data entity, entity-storage, access, user, config, field, auth
Layer 0 Foundation foundation, cache, plugin, typed-data, database-legacy,
testing, i18n, queue, scheduler, state, validation,
mail, http-client, ingestion
Three meta-packages provide convenient installation:
| Meta-package | Includes |
|---|---|
waaseyaa/core |
Foundation + Core Data |
waaseyaa/cms |
Core + Content Types + API + CLI |
waaseyaa/full |
CMS + AI + GraphQL + SSR + Admin |
Entity Persistence Pipeline
All content follows a single, consistent pipeline:
Entity (extends EntityBase or ContentEntityBase)
-> EntityType registered via EntityTypeManager
-> EntityStorageDriverInterface (SqlStorageDriver)
-> EntityRepository (hydration, events, validation)
-> DatabaseInterface (Doctrine DBAL)
CLI
Waaseyaa includes a comprehensive CLI built on Symfony Console:
bin/waaseyaa install # Set up database and initial config bin/waaseyaa serve # Start the dev server bin/waaseyaa migrate # Run pending migrations bin/waaseyaa entity-type:list # List registered entity types bin/waaseyaa entity:create node # Create an entity interactively bin/waaseyaa schema:check # Detect schema drift bin/waaseyaa health:check # Run diagnostic health checks bin/waaseyaa optimize:manifest # Rebuild attribute-discovery manifest bin/waaseyaa config:export # Export config to sync directory bin/waaseyaa config:import # Import config from sync directory
Code generation scaffolding:
bin/waaseyaa make:entity # Generate a content entity class bin/waaseyaa make:entity-type # Generate an entity type class bin/waaseyaa make:policy # Generate an access policy class bin/waaseyaa make:provider # Generate a service provider class bin/waaseyaa make:migration # Generate a migration file bin/waaseyaa make:plugin # Generate a plugin class bin/waaseyaa make:listener # Generate an event listener class bin/waaseyaa make:job # Generate a queue job class
Testing
# All tests ./vendor/bin/phpunit # Unit tests only ./vendor/bin/phpunit --testsuite Unit # Integration tests only ./vendor/bin/phpunit --testsuite Integration # Single package ./vendor/bin/phpunit packages/entity/tests/ # Pattern matching ./vendor/bin/phpunit --filter EntityRepository
Code quality:
composer cs-check # Check code style (PHP-CS-Fixer dry-run) composer cs-fix # Auto-fix code style composer phpstan # Static analysis (level 5, PHPStan 2)
Key Design Principles
- No global state. Every service receives its dependencies through constructor injection.
- Interface-first. Public APIs are defined as interfaces. Implementations are swappable.
- In-memory testable. Every subsystem has in-memory implementations for fast, isolated testing.
- Layered architecture. Each layer only depends on layers below it. No circular dependencies.
- AI-native. Entity schemas automatically generate MCP tools, enabling AI agents to interact with content through structured tool calls.
Contributing
Contributions and AI coding agents should follow Spec Kitty–first workflow (missions / work packages under .kittify/) with GitHub for PRs, CI, and optional issues. Human-oriented entry points: CLAUDE.md and AGENTS.md.
- Spec Kitty:
pip install spec-kitty-clioruv tool install spec-kitty-cli, thenspec-kitty init --here(orspec-kitty upgrade) in a clone; use the PR template line Active Spec Kitty mission when the change comes from a mission. - PRs: Fill
.github/pull_request_template.md— link a GitHub#Nor the mission / WP you used. - GitHub issues: Optional for every change; when you open one, assign a Track milestone (see
docs/specs/workflow.md). M11 governed work still uses the governed-change template as the filing front door.
# Clone the repository git clone https://github.com/waaseyaa/framework.git cd framework composer install # Run the full test suite ./vendor/bin/phpunit # Check code style composer cs-check
License
GPL-2.0-or-later. See LICENSE.txt.