Directory Structure
Project layout and file organization.
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 viewsstorage/logs/- application logsstorage/data/- data store filesstorage/modules-compiled.json- compiled module manifeststorage/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.