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.144
- v0.1.0-alpha.143
- v0.1.0-alpha.142
- v0.1.0-alpha.141
- dev-feat/telescope-agent-context-telemetry
- dev-feat/1347-spec-kitty-agent-workflow
- dev-codex/fix-package-migrations
- dev-dependabot/npm_and_yarn/packages/admin/postcss-8.5.10
- dev-admin-dist/update
- dev-fix/1265-surface-map-dispositions
- dev-recovery/restore-monorepo-main
- dev-feat/nuxt-surface-proxy
- dev-feat/dotenv-loading
- dev-feat/app-controller-router
- dev-feat/1093-sovereignty-profile
- dev-fix/1076-remove-dead-listeners
- dev-fix/1061-ssr-test-app-url
- dev-feat/727-oauth-email-verified
- dev-feat/737-debug-header-middleware
- dev-feat/732-request-context-processor
- dev-fix/768-wire-database-rate-limiter
- dev-fix/1046-app-url-validation
- dev-m10-batch-d5-main
- dev-m10-batch-d4-main
- dev-m10-batch-d3-main
- dev-m10-batch-d2-clean
- dev-fix/797-801-use-api-composable
- dev-fix/799-broaden-json-body-parsing
- dev-refactor/798-remove-dead-mailer
- dev-worktree-agent-a7328aad
- dev-fix/743-sqlite-default-path
- dev-test/581-api-coverage
- dev-test/580-entity-storage-coverage
- dev-fix/750-missing-path-repos
- dev-feat/auth-phase2
- dev-fix/783-vitest-failures
- dev-feat/oauth-provider-foundation
- dev-test/579-payload-validator-edge-cases
- dev-test/579-ingestion-logger-prune-edge-cases
- dev-test/579-invalid-envelope-exception-tests
- dev-test/579-ingestion-error-code-tests
- dev-test/579-ingestion-error-tests
- dev-test/579-envelope-dto-tests
- dev-test/578-relationship-entity
- dev-worktree-agent-a7a0a04f
- dev-test/579-validation-result-edge-cases
- dev-test/579-payload-validator-contract
- dev-worktree-agent-a1f2dd3a
- dev-p0/layer-enforcement
- dev-feat/461-elder-self-identification
- dev-feat/512-revision-system
- dev-fix/534-graphql-total-count
- dev-fix/dbal-quote-alias
- dev-fix/dbal-quote-table-names
- dev-test/dbal-integration-tests
- dev-chore/remove-database-legacy
- dev-feat/dbal-kernel-migration
- dev-feat/dbal-database
- dev-design/dbal-migration
- dev-audit/dbal-migration
- dev-feat/464-migration-package-flag
- dev-test/435-graphql-unit-tests
- dev-feat/432-schema-caching
- dev-feat/433-disable-introspection
- dev-docs/436-document-graphql
- dev-feat/430-clean-package-vendors
- dev-fix/428-remove-admin-bridge
- dev-fix/471-entity-reference-migration
- dev-fix/446-entity-reference-fallback
- dev-fix/443-444-filter-validation
- dev-feat/csrf-json-and-node-graphql-fields
- dev-feat/graphql-schema-validation
- dev-feat/admin-host-contracts
- dev-feat/admin-bridge-package
- dev-feat/admin-packaging-ci
- dev-feat/packagist-0.1-normalization
- dev-chore/packagist-approval-dp2
- dev-chore/packagist-approval
- dev-fix/341-proxy-config
- dev-fix/326-middleware-ordering
- dev-fix/380-hydration-mismatch
- dev-feat/344-error-vue
- dev-release/v1.0-rc
- dev-fix/333-readmes-final
- dev-fix/322-334-ssr-twig-final
- dev-fix/329-exception-handler-final
- dev-fix/327-access-policies-final
- dev-fix/373-auth-review-fixes
- dev-fix/admin-auth-ui-330
- dev-fix/package-readmes-333
- dev-fix/v1.0-322-ssr-twig-rendering
- dev-fix/admin-hydration-errors-325
- dev-fix/v1.0-327-access-policies
- dev-fix/v1.0-329-exception-handler
- dev-fix/v1.0-328-ssr-admin-link
- dev-feature/telescope-codified-context
- dev-fix/playwright-dashboard-user-selector-78d8405c
- dev-chore/ci-release-automation
- dev-release/v1.0-automation
- dev-fix/v1.0-315-foundation-path-dep
- dev-chore/v1.0-release-automation
- dev-fix/v1.0-319-license-file
- dev-fix/v1.0-316-validation-entity-dep
- dev-fix/v1.0-320-csrf-mcp
- dev-fix/321-single-tenant
- dev-fix/blocker-314-return-type
- dev-fix/blocker-318-stored-xss
- dev-fix/blocker-317-csrf-writes
- dev-release/v1.0-issues
This package is auto-updated.
Last update: 2026-04-25 00:29:07 UTC
README
A modern, entity-first, AI-native content management framework built on PHP 8.4+ 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 — 52 independent packages organized in 7 architectural layers
- 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.4 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.