waaseyaa / framework
Waaseyaa monorepo — a modern, entity-first, AI-native CMS
Requires
- php: >=8.5
- dragonmantank/cron-expression: ^3.0
- symfony/dotenv: ^8.0
- symfony/html-sanitizer: ^8.0
- waaseyaa/access: v0.1.0-alpha.188
- waaseyaa/admin-surface: v0.1.0-alpha.188
- waaseyaa/ai-agent: v0.1.0-alpha.188
- waaseyaa/ai-observability: v0.1.0-alpha.188
- waaseyaa/ai-pipeline: v0.1.0-alpha.188
- waaseyaa/ai-schema: v0.1.0-alpha.188
- waaseyaa/ai-tools: v0.1.0-alpha.188
- waaseyaa/ai-vector: v0.1.0-alpha.188
- waaseyaa/analytics: v0.1.0-alpha.188
- waaseyaa/api: v0.1.0-alpha.188
- waaseyaa/attachment: v0.1.0-alpha.188
- waaseyaa/auth: v0.1.0-alpha.188
- waaseyaa/billing: v0.1.0-alpha.188
- waaseyaa/bimaaji: v0.1.0-alpha.188
- waaseyaa/cache: v0.1.0-alpha.188
- waaseyaa/cli: v0.1.0-alpha.188
- waaseyaa/config: v0.1.0-alpha.188
- waaseyaa/database-legacy: v0.1.0-alpha.188
- waaseyaa/debug: v0.1.0-alpha.188
- waaseyaa/deployer: v0.1.0-alpha.188
- waaseyaa/engagement: v0.1.0-alpha.188
- waaseyaa/entity: v0.1.0-alpha.188
- waaseyaa/entity-storage: v0.1.0-alpha.188
- waaseyaa/error-handler: v0.1.0-alpha.188
- waaseyaa/field: v0.1.0-alpha.188
- waaseyaa/foundation: v0.1.0-alpha.188
- waaseyaa/genealogy: v0.1.0-alpha.188
- waaseyaa/geo: v0.1.0-alpha.188
- waaseyaa/github: v0.1.0-alpha.188
- waaseyaa/graphql: v0.1.0-alpha.188
- waaseyaa/groups: v0.1.0-alpha.188
- waaseyaa/http-client: v0.1.0-alpha.188
- waaseyaa/i18n: v0.1.0-alpha.188
- waaseyaa/inertia: v0.1.0-alpha.188
- waaseyaa/ingestion: v0.1.0-alpha.188
- waaseyaa/listing: v0.1.0-alpha.188
- waaseyaa/mail: v0.1.0-alpha.188
- waaseyaa/mcp: v0.1.0-alpha.188
- waaseyaa/media: v0.1.0-alpha.188
- waaseyaa/menu: v0.1.0-alpha.188
- waaseyaa/mercure: v0.1.0-alpha.188
- waaseyaa/messaging: v0.1.0-alpha.188
- waaseyaa/migration: v0.1.0-alpha.188
- waaseyaa/node: v0.1.0-alpha.188
- waaseyaa/northcloud: v0.1.0-alpha.188
- waaseyaa/note: v0.1.0-alpha.188
- waaseyaa/notification: v0.1.0-alpha.188
- waaseyaa/oauth-provider: v0.1.0-alpha.188
- waaseyaa/oidc: v0.1.0-alpha.188
- waaseyaa/path: v0.1.0-alpha.188
- waaseyaa/plugin: v0.1.0-alpha.188
- waaseyaa/queue: v0.1.0-alpha.188
- waaseyaa/relationship: v0.1.0-alpha.188
- waaseyaa/routing: v0.1.0-alpha.188
- waaseyaa/scheduler: v0.1.0-alpha.188
- waaseyaa/search: v0.1.0-alpha.188
- waaseyaa/seo: v0.1.0-alpha.188
- waaseyaa/ssr: v0.1.0-alpha.188
- waaseyaa/state: v0.1.0-alpha.188
- waaseyaa/structured-import: v0.1.0-alpha.188
- waaseyaa/taxonomy: v0.1.0-alpha.188
- waaseyaa/telescope: v0.1.0-alpha.188
- waaseyaa/typed-data: v0.1.0-alpha.188
- waaseyaa/user: v0.1.0-alpha.188
- waaseyaa/validation: v0.1.0-alpha.188
- waaseyaa/workflows: v0.1.0-alpha.188
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.50
- nesbot/carbon: ^3.0
- phpstan/phpstan: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^10.5
- sendgrid/sendgrid: ^8.1
- shipmonk/composer-dependency-analyser: ^1.8
- shipmonk/dead-code-detector: ^1.1
- waaseyaa/testing: v0.1.0-alpha.188
- dev-main
- v0.1.0-alpha.188
- v0.1.0-alpha.187
- v0.1.0-alpha.186
- v0.1.0-alpha.185
- v0.1.0-alpha.184
- v0.1.0-alpha.183
- v0.1.0-alpha.182
- v0.1.0-alpha.181
- v0.1.0-alpha.180
- 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-admin-dist/update
- dev-feat/page-builder-and-content-types
- dev-fix/anthropic-streaming-transport-error
- dev-dependabot/npm_and_yarn/packages/admin/vue-router-5.1.0
- dev-dependabot/npm_and_yarn/packages/admin/vue-tsc-3.3.3
- dev-dependabot/npm_and_yarn/packages/admin/eslint-10.4.1
- dev-dependabot/npm_and_yarn/packages/admin/vue-3.5.35
- dev-dependabot/composer/skeleton/symfony/yaml-7.4.13
- dev-dependabot/composer/tests/PackagedForm/skeleton/symfony/yaml-7.4.13
- dev-dependabot/composer/skeleton/symfony/html-sanitizer-8.0.13
- dev-dependabot/composer/tests/PackagedForm/skeleton/symfony/routing-7.4.13
- dev-dependabot/composer/skeleton/symfony/routing-7.4.13
- dev-kitty/mission-database-legacy-retirement-01KSEFV2-lane-a
- dev-kitty/mission-genealogy-package-extraction-01KSEFTZ-lane-a
- dev-kitty/mission-ai-observability-dashboard-01KSE9BX-lane-a
- dev-kitty/mission-agent-executor-01KRWPK7-lane-g
- 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-06-04 15:01:57 UTC
README
Governance: see MAINTAINERS.md for the current maintainer roster and SUCCESSION.md for the framework's continuity plan across Tiers 0–4.
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.