Prerequisites

Create a New Project

composer create-project waaseyaa/waaseyaa my-site --stability=dev
cd my-site

The --stability=dev flag is required during the pre-release phase. It goes away at v1.0.

waaseyaa/waaseyaa is the published project skeleton package. The framework source itself lives in the separate waaseyaa/framework monorepo.

That scaffolds a full Waaseyaa application from the skeleton. Your project now has config files, the Composer-installed CLI at vendor/bin/waaseyaa, templates, and directory stubs for entities, controllers, and service providers.

Initialize the Database

php vendor/bin/waaseyaa db:init

This creates a SQLite database at storage/waaseyaa.sqlite and runs all pending migrations. The skeleton ships with entity types for nodes, taxonomy terms, media, menus, and users. All of their tables are created here.

Start the Dev Server

php vendor/bin/waaseyaa serve

Open http://127.0.0.1:8080 in your browser. You should see the Waaseyaa welcome page with links to the admin, API, and documentation.

Explore Entity Types

Open a second terminal. The skeleton ships with 11 entity types out of the box:

php vendor/bin/waaseyaa entity-type:list

You'll see node, taxonomy_term, media, menu, user, and others. These are the content building blocks that come with the framework packages.

Create Your First Content

php vendor/bin/waaseyaa entity:create node

The CLI walks you through setting field values. Once created, verify it exists:

php vendor/bin/waaseyaa entity:list node

Your node is stored in SQLite. You can also view it through the JSON:API:

curl -s http://localhost:8080/api/node | jq

That returns a spec-compliant JSON:API response. Filtering, sorting, pagination, and relationship includes all work out of the box. Note that the default access control is deny-unless-granted, so anonymous requests will only see entities that have been explicitly made public.

Project Structure

my-site/
├── vendor/
│   └── bin/
│       └── waaseyaa        # CLI (Composer bin from waaseyaa/cli)
├── config/
│   ├── waaseyaa.php          # Framework configuration
│   ├── entity-types.php      # Custom entity type registration
│   └── services.php          # Service overrides
├── public/
│   └── index.php             # Front controller
├── src/
│   ├── Access/               # Authorization policies
│   ├── Controller/           # HTTP controllers
│   ├── Entity/               # Your entity classes
│   ├── Provider/             # Service providers (DI, routing)
│   ├── Domain/               # Domain logic by bounded context
│   └── Seed/                 # Seeders for dev/local bootstrap
├── templates/                # Twig templates
└── storage/
    └── waaseyaa.sqlite       # SQLite database (after db:init)

Configuration lives in config/. Your application code goes under src/. The front controller at public/index.php boots the HTTP kernel. Run CLI commands with php vendor/bin/waaseyaa from the project root (same contract as Laravel’s artisan / Symfony’s bin/console).

What's Next

You have a running application with built-in entity types and a JSON:API. From here:

For the story behind why Waaseyaa exists, read the blog series.