Docs LATEST

Directory Structure

Project layout and file organization.

Architecture

VelvetCMS follows a clear separation between framework code, user customizations, and runtime data.

Core Directories #

velvet/
├── src/               # Framework internals (don't edit)
├── config/            # Default configuration files
├── database/
│   └── migrations/    # Core database migrations
├── public/            # Web server document root
│   └── index.php      # HTTP entry point
├── storage/           # Runtime data (cache, logs, sessions)
├── bootstrap/
│   └── app.php        # Application bootstrap
└── velvet             # CLI entry point

src/ #

Framework source code. This directory is managed by Composer and shouldn't be modified directly.

config/ #

Default configuration files. Override these in user/config/ rather than editing directly.

storage/ #

Runtime-generated files:

  • storage/cache/ - cached data and compiled views
  • storage/logs/ - application logs
  • storage/data/ - data store files
  • storage/modules-compiled.json - compiled module manifest
  • storage/modules-autoload.php - module autoload map

User Directories #

user/
├── config/            # Configuration overrides
├── content/           # Content files (pages, posts)
│   └── pages/         # Default page content
├── views/             # Templates and layouts
│   ├── layouts/       # Layout templates
│   ├── partials/      # Reusable components
│   └── assets/        # Static assets (CSS, JS, images)
└── modules/           # Local/custom modules

The user/ directory is where your customizations live. It's safe to version control and persists across framework updates.

Module Structure #

modules/Blog/
├── module.json        # Module manifest
├── src/
│   └── BlogModule.php # Service provider
├── routes/
│   └── web.php        # Module routes
├── views/             # Module templates
├── database/
│   └── migrations/    # Module migrations
└── config/            # Module configuration

Multi-Tenant Directories #

When tenancy is enabled, tenant-specific files are isolated:

user/tenants/<tenant>/
├── config/            # Tenant config overrides
├── content/           # Tenant content
├── views/             # Tenant templates and assets
└── modules/           # Tenant-local modules

storage/tenants/<tenant>/
├── cache/             # Tenant cache
├── logs/              # Tenant logs
├── data/              # Tenant data store
└── views/             # Compiled tenant views

Path helpers automatically resolve to tenant directories when tenancy is active.

Public Directory #

public/
├── index.php          # Single entry point
├── .htaccess          # Apache rewrite rules
└── uploads/           # Public uploads (if configured)

Your web server's document root should point here. All other directories should be outside the web root for security.