waaseyaa / framework
Waaseyaa monorepo — a modern, entity-first, AI-native CMS
Requires
- php: >=8.5 <8.6
- ext-pdo_sqlite: *
- ext-sodium: *
- ext-sqlite3: *
- dragonmantank/cron-expression: ^3.0
- symfony/console: ^8.0
- symfony/dotenv: ^8.0
- symfony/html-sanitizer: ^8.0
- waaseyaa/access: v0.1.0-alpha.301
- waaseyaa/admin-surface: v0.1.0-alpha.301
- waaseyaa/ai-pipeline: v0.1.0-alpha.301
- waaseyaa/ai-schema: v0.1.0-alpha.301
- waaseyaa/ai-tools: v0.1.0-alpha.301
- waaseyaa/ai-vector: v0.1.0-alpha.301
- waaseyaa/analytics: v0.1.0-alpha.301
- waaseyaa/api: v0.1.0-alpha.301
- waaseyaa/attachment: v0.1.0-alpha.301
- waaseyaa/auth: v0.1.0-alpha.301
- waaseyaa/billing: v0.1.0-alpha.301
- waaseyaa/bimaaji: v0.1.0-alpha.301
- waaseyaa/cache: v0.1.0-alpha.301
- waaseyaa/cli: v0.1.0-alpha.301
- waaseyaa/config: v0.1.0-alpha.301
- waaseyaa/database-legacy: v0.1.0-alpha.301
- waaseyaa/debug: v0.1.0-alpha.301
- waaseyaa/deployer: v0.1.0-alpha.301
- waaseyaa/entity: v0.1.0-alpha.301
- waaseyaa/entity-storage: v0.1.0-alpha.301
- waaseyaa/error-handler: v0.1.0-alpha.301
- waaseyaa/field: v0.1.0-alpha.301
- waaseyaa/foundation: v0.1.0-alpha.301
- waaseyaa/frankenphp: v0.1.0-alpha.301
- waaseyaa/geo: v0.1.0-alpha.301
- waaseyaa/github: v0.1.0-alpha.301
- waaseyaa/graphql: v0.1.0-alpha.301
- waaseyaa/groups: v0.1.0-alpha.301
- waaseyaa/http-client: v0.1.0-alpha.301
- waaseyaa/i18n: v0.1.0-alpha.301
- waaseyaa/inertia: v0.1.0-alpha.301
- waaseyaa/ingestion: v0.1.0-alpha.301
- waaseyaa/listing: v0.1.0-alpha.301
- waaseyaa/mail: v0.1.0-alpha.301
- waaseyaa/media: v0.1.0-alpha.301
- waaseyaa/menu: v0.1.0-alpha.301
- waaseyaa/mercure: v0.1.0-alpha.301
- waaseyaa/migration: v0.1.0-alpha.301
- waaseyaa/node: v0.1.0-alpha.301
- waaseyaa/note: v0.1.0-alpha.301
- waaseyaa/notification: v0.1.0-alpha.301
- waaseyaa/oauth-provider: v0.1.0-alpha.301
- waaseyaa/page-builder: v0.1.0-alpha.301
- waaseyaa/path: v0.1.0-alpha.301
- waaseyaa/plugin: v0.1.0-alpha.301
- waaseyaa/publishing: v0.1.0-alpha.301
- waaseyaa/queue: v0.1.0-alpha.301
- waaseyaa/relationship: v0.1.0-alpha.301
- waaseyaa/routing: v0.1.0-alpha.301
- waaseyaa/scheduler: v0.1.0-alpha.301
- waaseyaa/search: v0.1.0-alpha.301
- waaseyaa/seo: v0.1.0-alpha.301
- waaseyaa/site-contract: v0.1.0-alpha.301
- waaseyaa/ssr: v0.1.0-alpha.301
- waaseyaa/state: v0.1.0-alpha.301
- waaseyaa/structured-import: v0.1.0-alpha.301
- waaseyaa/taxonomy: v0.1.0-alpha.301
- waaseyaa/telescope: v0.1.0-alpha.301
- waaseyaa/typed-data: v0.1.0-alpha.301
- waaseyaa/user: v0.1.0-alpha.301
- waaseyaa/validation: v0.1.0-alpha.301
- waaseyaa/workflows: v0.1.0-alpha.301
Requires (Dev)
- deptrac/deptrac: 4.7.2
- friendsofphp/php-cs-fixer: ^3.50
- infection/infection: ^0.34
- nesbot/carbon: ^3.0
- opis/json-schema: ^2.6
- phpstan/phpstan: ^2.0
- phpstan/phpstan-strict-rules: ^2.0
- phpunit/phpunit: ^13.0
- sendgrid/sendgrid: ^8.1
- shipmonk/composer-dependency-analyser: ^1.8
- shipmonk/dead-code-detector: ^1.1
- symfony/filesystem: ^8.0
- symfony/process: ^8.0
- waaseyaa/ai-agent: v0.1.0-alpha.301
- waaseyaa/ai-observability: v0.1.0-alpha.301
- waaseyaa/engagement: v0.1.0-alpha.301
- waaseyaa/genealogy: v0.1.0-alpha.301
- waaseyaa/mcp: v0.1.0-alpha.301
- waaseyaa/messaging: v0.1.0-alpha.301
- waaseyaa/oidc: v0.1.0-alpha.301
- waaseyaa/testing: v0.1.0-alpha.301
- waaseyaa/wayfinding: v0.1.0-alpha.301
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main
- v0.1.0-alpha.301
- v0.1.0-alpha.300
- v0.1.0-alpha.299
- v0.1.0-alpha.298
- v0.1.0-alpha.297
- v0.1.0-alpha.296
- v0.1.0-alpha.295
- v0.1.0-alpha.294
- v0.1.0-alpha.293
- v0.1.0-alpha.292
- v0.1.0-alpha.291
- v0.1.0-alpha.290
- v0.1.0-alpha.289
- v0.1.0-alpha.288
- v0.1.0-alpha.287
- v0.1.0-alpha.286
- v0.1.0-alpha.285
- v0.1.0-alpha.284
- v0.1.0-alpha.283
- v0.1.0-alpha.282
- v0.1.0-alpha.281
- v0.1.0-alpha.280
- v0.1.0-alpha.279
- v0.1.0-alpha.278
- v0.1.0-alpha.277
- v0.1.0-alpha.276
- v0.1.0-alpha.275
- v0.1.0-alpha.274
- v0.1.0-alpha.273
- v0.1.0-alpha.272
- v0.1.0-alpha.271
- v0.1.0-alpha.270
- v0.1.0-alpha.269
- v0.1.0-alpha.268
- v0.1.0-alpha.267
- v0.1.0-alpha.266
- v0.1.0-alpha.265
- v0.1.0-alpha.264
- v0.1.0-alpha.263
- v0.1.0-alpha.262
- v0.1.0-alpha.261
- v0.1.0-alpha.260
- v0.1.0-alpha.259
- v0.1.0-alpha.258
- v0.1.0-alpha.257
- v0.1.0-alpha.256
- v0.1.0-alpha.255
- v0.1.0-alpha.254
- v0.1.0-alpha.253
- v0.1.0-alpha.252
- v0.1.0-alpha.251
- v0.1.0-alpha.250
- v0.1.0-alpha.249
- v0.1.0-alpha.248
- v0.1.0-alpha.247
- v0.1.0-alpha.246
- v0.1.0-alpha.245
- v0.1.0-alpha.244
- v0.1.0-alpha.243
- v0.1.0-alpha.242
- v0.1.0-alpha.241
- v0.1.0-alpha.240
- v0.1.0-alpha.239
- v0.1.0-alpha.238
- v0.1.0-alpha.237
- v0.1.0-alpha.236
- v0.1.0-alpha.235
- v0.1.0-alpha.234
- v0.1.0-alpha.233
- v0.1.0-alpha.232
- v0.1.0-alpha.231
- v0.1.0-alpha.230
- v0.1.0-alpha.229
- v0.1.0-alpha.228
- v0.1.0-alpha.227
- v0.1.0-alpha.226
- v0.1.0-alpha.225
- v0.1.0-alpha.224
- v0.1.0-alpha.223
- v0.1.0-alpha.222
- v0.1.0-alpha.221
- v0.1.0-alpha.220
- v0.1.0-alpha.219
- v0.1.0-alpha.218
- v0.1.0-alpha.217
- v0.1.0-alpha.216
- v0.1.0-alpha.215
- v0.1.0-alpha.214
- v0.1.0-alpha.213
- v0.1.0-alpha.212
- v0.1.0-alpha.211
- v0.1.0-alpha.210
- v0.1.0-alpha.209
- v0.1.0-alpha.208
- v0.1.0-alpha.207
- v0.1.0-alpha.206
- v0.1.0-alpha.205
- v0.1.0-alpha.204
- v0.1.0-alpha.203
- v0.1.0-alpha.202
- v0.1.0-alpha.201
- v0.1.0-alpha.200
- v0.1.0-alpha.199
- v0.1.0-alpha.198
- v0.1.0-alpha.197
- v0.1.0-alpha.196
- v0.1.0-alpha.195
- v0.1.0-alpha.194
- v0.1.0-alpha.193
- v0.1.0-alpha.192
- v0.1.0-alpha.191
- v0.1.0-alpha.190
- v0.1.0-alpha.189
- 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-wip/issue-3046-safe-role-provisioning-wsl-20260918
- dev-wip/fix-2999-api-committed-outcome-wsl-20260918
- dev-wip/codex-2848-governance-packaged-remediation-wsl-20260918
- dev-wip/codex-2848-governance-packaged-acceptance-wsl-20260918
- dev-wip/cookbook-issue-to-merge-2026-09-18
- dev-codex/fw-admin-surface-convergence-01
- dev-archive/wsl-20260918/cursor/3064-production-install-genesis
- dev-codex/2981-community-events-main
- dev-issue-3061-artifact-mode-integration
- dev-fix/auth-ui-scaffold-manifest-mode
- dev-docs/local-test-evidence-policy
- dev-fix/media-asset-store-public-mode
- dev-archive/wsl-20260918/integrate/3046-da1-refresh
- dev-fix/3046-safe-registered-role-provisioning
- dev-archive/wsl-20260918/integrate/3046-current-main
- dev-codex/3054-3056-noexec-artifact-mode
- dev-archive/wsl-20260918/repair/3048-cycle-diagnostic-review
- dev-fix/3021-container-cycle-diagnostic
- dev-fix/3025-cache-clear-configured-bins
- dev-archive/wsl-20260918/issue-3046-identity-concurrency-repair
- dev-archive/wsl-20260918/codex/pr3053-serial-refresh-20260908
- dev-issue-site-verify-noexec-boundary
- dev-issue-3047-host-bound-cookies-r2
- dev-archive/wsl-20260918/detached-fw-3050-independent-review
- dev-fix/3026-discovery-cache-dir-race
- dev-archive/wsl-20260918/detached-fw-3048-independent-review
- dev-issue-3047-host-bound-cookies-browser
- dev-issue-3047-host-bound-cookies-repair
- dev-issue-3047-host-bound-cookies
- dev-issue-3044-config-contract-cache
- dev-issue-3042-authoring-binding
- dev-issue-3040-trace-label
- dev-feat/3037-project-activation
- dev-integration/2848-fixture-source-fresh
- dev-integrate/3034-custom-revision-key
- dev-fix/3034-custom-revision-key
- dev-integration/2981-community-events-reference-existence
- dev-fix/2848-fixture-source-fresh
- dev-fix/2999-hosted-roster
- dev-fix/2981-community-events-reference-existence
- dev-audit/2985-cache-invalidation
- dev-audit/2985-tenancy-enforcement
- dev-audit/2985-access-policy-awareness
- dev-fix/2999-postcommit-outcome
- dev-issue-2664-ai-verify
- dev-audit/2985-audit-ledger-joining
- dev-issue-2981-community-events-starter
- dev-audit/2985-transaction-unitofwork
- dev-codex/2848-governance-packaged-acceptance
- dev-audit/2985-derived-store-consistency
- dev-archive/wsl-20260918/issue-2981-reference-integrity
- dev-codex/2848-governance-packaged-remediation
- dev-fix/2985-session-active-enforcement
- dev-codex/2787-apply-binding-acceptance
- dev-audit/2985-rate-limiting
- dev-issue-2848-policy-workflow
- dev-audit/2985-session-token-lifecycle
- dev-audit/2985-config-sync-activation
- dev-audit/2985-queue-scheduler-notification
- dev-docs/2849-ingestion-extension-contract
- dev-audit/2985-route-entity-authorization
- dev-issue-2847-read-visibility
- dev-docs/2985-authority-audit-inventory
- dev-feat/2849-ingestion-search-seed-scaffolds
- dev-audit/2985-media-upload-storage
- dev-docs-2979-activation-record
- dev-issue-2978-identity-oauth
- dev-docs/2961-conformance-test-support-design
- dev-chore/cl17-dependency-audit-stale-ignores
- dev-chore/cl16-database-legacy-description
- dev-feat/2664-project-init
- dev-docs/2857-activation-authority
- dev-fix/2972-vendor-source-binding
- dev-issue-2660-client-skills
- dev-issue-2847-field-projection
- dev-codex/2442-profile-acceptance
- dev-fix/2961-stdinsource-packaged-reachability
- dev-docs/2677-native-host-support
- dev-fix/2740-unhandled-worker-message
- dev-codex/qualification-preflight-barrier
- dev-issue-2766-client-identity
- dev-codex/2787-blueprint-evolution-acceptance
- dev-issue-2648-exclusion-policy
- dev-issue-2667-board-sync-v2
- dev-codex/2525-landing-preflight
- dev-codex/2661-spec-corpus
- dev-feat/2638-mcp-registry-manifest
- dev-feat/2833-auth-scaffold-sources
- dev-fix/2636-mcp-resources-list-cursor
- dev-docs/agent-worktree-move-root
- dev-archive/wsl-20260918/detached-fw-2931-opus-review
- dev-feat/2789-studio-alpha-acceptance-recovery
- dev-feat/2789-studio-alpha-acceptance
- dev-feat/2788-governance-compile
- dev-codex/delivery-timing-completeness
- dev-codex/2923-parser-repair
- dev-fix/2924-codex-repair
- dev-codex/2923-final-integration
- dev-codex/2921-integration-repair-agent
- dev-codex/2928-final-integration
- dev-codex/2922-final-integration
- dev-review/2931-auth-scaffold
- dev-review/codex-2935-coverage-checkpoint
- dev-codex/2661-versioned-corpus-design
- dev-codex/2660-client-skill-adapters
- dev-feat/2787-blueprint-compiler
- dev-codex/2787-blueprint-engine-eligibility
- dev-fix/2927-root-artifact-guard
- dev-fix/2926-gate-vendor-precondition
- dev-fix/2925-gate-scanners-tracked-files
- dev-rescue/fix-2636-mcp-resources-list-cursor-20260918
- dev-rescue/docs-agent-worktree-move-root-20260918
- dev-rescue/feat-2833-auth-scaffold-sources-20260918
- dev-codex/2928-cursor-review
- dev-feat/2731-migration-rollback-refuse
- dev-rescue/feat-2638-mcp-registry-manifest-20260918
- dev-fix/2708-stream-http-truncation
- dev-feat/2913-qualification-evidence-runner
- dev-feat/2869-k1-cutover-verify
- dev-feat/2641-stale-spec-deferrals
- dev-feat/2869-consumer-promotion-adapter
- dev-fix/2637-mcp-body-limit
- dev-fix/2822-queue-job-contract
- dev-feat/2869-dora-input-readiness
- dev-codex/2916-integration
- dev-codex/2919-integration
- dev-feat/2869-k1-batch-provenance
- dev-rescue/feat-2869-dora-input-readiness-20260918
- dev-rescue/feat-2869-k1-cutover-verify-20260918
- dev-feat/2902-event-batches
- dev-rescue/feat-2869-k1-batch-provenance-20260918
- dev-codex/surface-doc-authority
- dev-feat/2901-package-local-surface-declarations
- dev-fix/2869-dashboard-filters
- dev-chore/delivery-wave-evidence
- dev-feat/2903-commit-policy
- dev-feat/2904-coverage-attribution
- dev-fix/2900-ledger-base
- dev-chore/2896-delivery-evidence
- dev-fix/2832-sync-rules-codex
- dev-chore/2891-delivery-evidence
- dev-feat/2846-slice-8-codex
- dev-chore/2889-delivery-evidence
- dev-feat/2846-slice-7-codex
- dev-chore/2887-delivery-evidence
- dev-feat/2846-slice-6-codex
- dev-chore/2881-delivery-evidence
- dev-feat/2846-slice-5-codex
- dev-docs/2846-slice-5-design
- dev-feat/2869-governed-agent-ledger
- dev-feat/2846-slice-3-gen-codes-reviewed
- dev-feat/2846-slice-3-gen-codes
- dev-feat/2873-phpstan-evidence
- dev-fix/2659-stdio-mcp-server
- dev-rescue/2858-pre-rebase-20260903
- dev-test/2846-slice-1
- dev-rescue/2845-uncommitted-elaboration
- dev-recover/2809-admin-enum
- dev-recover/2809-reference-admission
- dev-recover/2809-contract-edges
- dev-recover/2809-kernel-repairs
- dev-recover/2809-admin-repair
- dev-recover/2809-compat
- dev-recover/2809-coverage
- dev-chore/retire-ai-development-unpublished-roster
- dev-fix/split-main-allow-deployer
- dev-archive/wsl-20260918/codex/fix-structural-runtime-schema-signature
- dev-codex/issue-2810-sibling-provenance
- dev-fix/2786-schema-authority
- dev-fix/2785-application-blueprint
- dev-archive/wsl-20260918/codex/split-main-cohort-allowlist
- dev-fix/2804-dbal-schema-targeted-mutation
- dev-archive/wsl-20260918/fix/2701-v2-fresh-install-semantics
- dev-archive/wsl-20260918/pr-2706-review
- dev-archive/wsl-20260918/fix/2624-runtime-policy
- dev-archive/wsl-20260918/fix/2595-split-contribution-boundary
- dev-archive/wsl-20260918/fix/2621-migrate-runtime-policy
- dev-archive/wsl-20260918/fix/2619-about-runtime-policy
- dev-archive/wsl-20260918/fix/2617-auth-environment
- dev-archive/wsl-20260918/fix/2615-dotenv-bootstrap
- dev-archive/wsl-20260918/feat/2526-checkpoint-verify
- dev-archive/wsl-20260918/fix/2611-embed-412-conflict
- dev-archive/wsl-20260918/fix/2609-admin-published-token
- dev-archive/wsl-20260918/feat/2593-xlsx-structured-import
- dev-archive/wsl-20260918/fix/2605-split-main-field
- dev-archive/wsl-20260918/fix/2555-actor-scoped-idempotency
- dev-archive/wsl-20260918/feat/2557-entity-id-resolver
- dev-archive/wsl-20260918/feat/2556-initial-layout-document
- dev-archive/wsl-20260918/feat/2591-split-main-media
This package is auto-updated.
Last update: 2026-09-20 01:23:30 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 <8.6(latest available 8.5 patch) ext-sodium(required transitively bywaaseyaa/oidc→lcobucci/jwtfor JWT signing)- exact Composer 2.x feature line recorded in the S1 contract (currently 2.10)
- SQLite
>=3.40 <4for the S1 profile
S1 is one application node with one authoritative SQLite database on a local,
non-network filesystem. An optional second SQLite file may hold only a
non-authoritative, rebuildable search projection. File connections verify WAL,
foreign keys, and a 5000 ms busy timeout. Invalid DSN, URI, UNC, and device
paths fail with S1-DB001; production refuses :memory:.
The complete boundaries are S1 support and lifecycle and the S1 SQLite topology. S1 consumer certification is still pending its named downstream evidence. H1, MySQL/PostgreSQL, remote/shared filesystems, WebKit/Safari, and unlisted web runtimes are not supported claims.
The native developer and verification entrypoints are classified in the native host support contract. It distinguishes verified native behavior and normative targets from POSIX-only maintainer automation, and keeps WSL/Git Bash optional rather than treating them as native Windows proof.
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 the anchor-issue + design-first workflow: multi-PR efforts open a GitHub anchor issue, and design/specs land in docs/specs/ before implementation. Human-oriented entry points: CLAUDE.md and AGENTS.md.
- PRs: Fill
.github/pull_request_template.md—Closes #NorPart of #N, with#Nin the title. - GitHub issues: Lightweight — no enforced milestone or taxonomy. 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.