PHPackages                             waaseyaa/waaseyaa - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. waaseyaa/waaseyaa

ActiveProject[Framework](/categories/framework)

waaseyaa/waaseyaa
=================

Waaseyaa CMS project skeleton

v0.1.0-alpha.293(3d ago)1193↓68.4%[4 issues](https://github.com/waaseyaa/waaseyaa/issues)GPL-2.0-or-laterPHPPHP &gt;=8.5

Since Mar 18Pushed 3d agoCompare

[ Source](https://github.com/waaseyaa/waaseyaa)[ Packagist](https://packagist.org/packages/waaseyaa/waaseyaa)[ RSS](/packages/waaseyaa-waaseyaa/feed)WikiDiscussions main Synced 3d ago

READMEChangelog (1)Dependencies (68)Versions (276)Used By (0)

Waaseyaa Application
====================

[](#waaseyaa-application)

A Waaseyaa CMS application.

[**Discord**](https://discord.gg/ZzQNhrBb7U) | [GitHub](https://github.com/waaseyaa/framework) | [Website](https://waaseyaa.org)

New project
-----------

[](#new-project)

```
composer create-project waaseyaa/waaseyaa my-app --stability=dev
cd my-app
```

Use `./vendor/bin/waaseyaa` for the CLI. Optional path-linked `waaseyaa/*` checkouts: copy `composer.local.json.example` to `composer.local.json` (see [docs/local-dev.md](docs/local-dev.md)).

Directory Structure
-------------------

[](#directory-structure)

```
bin/
├── dev                  Cross-platform FrankenPHP dev launcher (`composer run dev`)
├── post-create-setup.php  One-time setup after `create-project`
└── maintenance/         Audit/release helpers (optional for beginners)

src/
├── Access/        Authorization policies
├── Controller/    HTTP controllers (thin orchestration)
├── Domain/        Domain logic grouped by bounded context
├── Entity/        ORM entities (pure data models)
├── Ingestion/     Inbound data pipelines (files, email, APIs)
├── Provider/      Service providers (bootstrapping, DI, routing)
├── Search/        Search providers, autocomplete, indexing
├── Seed/          Seeders for dev/local bootstrap
└── Support/       Cross-cutting utilities (ValueObjects, helpers)

```

### Domain Rules

[](#domain-rules)

Bounded contexts go under `Domain//` with optional subdirectories: `Service/`, `ValueObject/`, `Workflow/`, `Assembler/`, `Ranker/`, `Mapper/`.

### Support Rules

[](#support-rules)

Cross-cutting utilities (validators, slug generators, normalizers, distance calculators) belong in `Support/`.

### Namespace Rules

[](#namespace-rules)

Namespaces must match PSR-4 directory structure. Update namespaces in files and all references when moving code.

Commands
--------

[](#commands)

```
composer install                    # Install dependencies
composer run dev                    # Serve on FrankenPHP at http://127.0.0.1:8080
./vendor/bin/phpunit                # Run tests
./vendor/bin/waaseyaa optimize:manifest  # Rebuild provider manifest
./vendor/bin/waaseyaa serve              # Single-worker php -S dev server (zero-config; not for the admin SPA's SSE or production)
./vendor/bin/waaseyaa                    # CLI
./bin/maintenance/waaseyaa-audit-site    # Optional convergence preflight
```

### Required PHP extensions

[](#required-php-extensions)

This app defaults to a **SQLite** database (`storage/waaseyaa.sqlite`), so the PHP runtime must have **`pdo_sqlite`** and **`sqlite3`** (and `sodium`). These are declared in `composer.json`, so `composer install` flags a runtime missing them.

### Serving with FrankenPHP (`composer run dev`)

[](#serving-with-frankenphp-composer-run-dev)

`composer run dev` runs the app on [FrankenPHP](https://frankenphp.dev) — the real concurrent runtime — in classic per-request mode, bound to loopback on a non-privileged port (no privileged-port or HTTPS-certificate prompt):

```
composer run dev   # → http://127.0.0.1:8080  (Ctrl+C to stop)
```

**The first run downloads the FrankenPHP binary for you** (via the optional `waaseyaa/frankenphp` package, installed by default in the skeleton) — so there is nothing to download or place by hand. If the binary isn't present yet, `composer run dev` offers to fetch it; you can also do it up front:

```
php vendor/bin/waaseyaa frankenphp:install
```

It works identically on **Windows, macOS, and Linux with zero PATH setup**. `composer run dev` routes to the `waaseyaa dev` command via Composer's own PHP (`@php`), which resolves the `frankenphp` binary to an **absolute path** and execs it directly — you never add the FrankenPHP directory to `PATH`.

> **Do NOT put the FrankenPHP directory on `PATH`.** The official Windows release is a full PHP SDK that bundles its own `php.exe` with OpenSSL disabled — on `PATH` it shadows your system PHP and breaks Composer (TLS to Packagist fails). `waaseyaa dev` sidesteps this entirely: it execs `frankenphp` by absolute path and never invokes the bundled `php.exe`.

**Binary resolution order:** `FRANKENPHP_BIN` (an absolute path) → the managed install from `frankenphp:install` (under `vendor/bin/`) → a known install location (`%USERPROFILE%\.frankenphp\frankenphp.exe` on Windows; `/usr/local/bin`, `/usr/bin`, `/opt/homebrew/bin`, `~/.frankenphp` on macOS/Linux) → `frankenphp` on `PATH`. If none resolve, `composer run dev` prints exactly what to do (and offers to install). Override the listen address with `WAASEYAA_DEV_LISTEN`, or point at a custom binary:

```
# POSIX
FRANKENPHP_BIN=/opt/frankenphp/frankenphp composer run dev
# Windows (PowerShell)
$env:FRANKENPHP_BIN="C:\tools\frankenphp\frankenphp.exe"; composer run dev
```

Classic mode uses FrankenPHP's built-in SQLite — **no `php.ini` hack needed**.

`./vendor/bin/waaseyaa serve` remains the zero-dependency `php -S` dev server (no FrankenPHP required); it is fine for quick edits but is **not** the right runtime for the admin SPA's live `/api/broadcast` SSE connection or for production.

**Worker mode (advanced).** For the warm, worker-mode runtime (best for heavy SSE), run FrankenPHP natively against the committed `config/frankenphp/`:

```
PHP_INI_SCAN_DIR="$PWD/config/frankenphp" frankenphp run --config config/frankenphp/Caddyfile
```

Use `PHP_INI_SCAN_DIR` (additive), **never** `PHPRC` — `PHPRC` *replaces* the runtime's bundled `php.ini`, which on shared-extension builds (e.g. the official Windows release) strands `pdo_sqlite`/`sqlite3` and 500s every request with `could not find driver`. The committed `php.ini` does not enable those extensions itself (mainstream builds already provide them); uncomment its `extension=` lines only for a custom build that genuinely lacks SQLite.

### Upgrading the framework

[](#upgrading-the-framework)

This skeleton requires `waaseyaa/framework` with a **caret** constraint (`^0.1.0-alpha.NNN`), so a plain `composer update waaseyaa/framework` takes the next point release. Keep it a caret:

```
composer update waaseyaa/framework   # moves to the latest matching alpha
```

> Avoid `composer require waaseyaa/framework:0.1.0-alpha.NNN` — an **exact**version writes a pinned constraint, and then `composer update` silently does nothing on later releases. Use `composer require waaseyaa/framework:^0.1.0-alpha.NNN`(with the caret) if you ever re-add it.

First 60 Seconds
----------------

[](#first-60-seconds)

```
composer install
composer run dev
```

`composer run dev` serves the whole app on FrankenPHP — including the prebuilt admin SPA at `/admin` (served from `public/`; no separate build step). Open `http://127.0.0.1:8080`.

Optional: Admin SPA hot-reload (HMR)
------------------------------------

[](#optional-admin-spa-hot-reload-hmr)

The admin SPA ships as a prebuilt bundle, so most apps need nothing extra. If you are developing a custom Nuxt admin, run its dev server in a second terminal alongside `composer dev`:

```
# Terminal 1 — the app on FrankenPHP
composer dev
# Terminal 2 — the admin SPA dev server (HMR), pointed at the backend
NUXT_BACKEND_URL=http://127.0.0.1:8080 vendor/bin/waaseyaa admin:dev
```

Set `WAASEYAA_ADMIN_PATH` (or `extra.waaseyaa.admin_path` in `composer.json`) to a Nuxt admin package outside this skeleton if `admin:dev` cannot find one.

Configuration
-------------

[](#configuration)

- `config/waaseyaa.php` — Framework configuration
- `config/entity-types.php` — Custom entity types
- `config/services.php` — Service overrides
- [Production web-server examples](https://github.com/waaseyaa/framework/blob/main/docs/deployment-web-servers.md) — Apache, nginx, and Caddy front-controller configuration

License
-------

[](#license)

GPL-2.0-or-later

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance79

Regular maintenance activity

Popularity16

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 59.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

275

Last Release

3d ago

Major Versions

v0.1.0-alpha.27 → v1.0.12026-03-19

PHP version history (2 changes)v0.1.0-alpha.20PHP &gt;=8.4

v0.1.0-alpha.200PHP &gt;=8.5

### Community

Maintainers

![](https://www.gravatar.com/avatar/25d0ff572e93e3461e5180a920725d65691fd1e15e2d914b254dbbc2d6c393bd?d=identicon)[jonesrussell](/maintainers/jonesrussell)

---

Top Contributors

[![jonesrussell](https://avatars.githubusercontent.com/u/499552?v=4)](https://github.com/jonesrussell "jonesrussell (75 commits)")[![github-actions[bot]](https://avatars.githubusercontent.com/in/15368?v=4)](https://github.com/github-actions[bot] "github-actions[bot] (47 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (4 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/waaseyaa-waaseyaa/health.svg)

```
[![Health](https://phpackages.com/badges/waaseyaa-waaseyaa/health.svg)](https://phpackages.com/packages/waaseyaa-waaseyaa)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
