Releasing on March 1st, 2026.

Services First.
Interface Second.

VelvetCMS is a service-oriented CMS. All logic lives in frontend-agnostic services. Three consumers — CLI, REST API, and Web admin — expose them independently. Use all three, two, one, or none.

Three Interfaces. One Codebase.

Business logic lives in services. Consumers are thin, optional wrappers. Disable any interface with a single config toggle.

Services
ContentService MediaService UserService AuthService +12 more

CLI

Automation, cron, CI/CD pipelines

REST API

SPAs, mobile apps, headless frontends

Web Admin

Content editing, media, settings

Headless? Enable only the API. Feed React, Vue, Next.js, whatever.
Traditional? Use the web admin and server-rendered templates.
Hybrid? All three at once. CLI for deploys, API for the app, admin for editors.

Content Without Compromise

Not a feature checklist — a coherent content workflow.

Block Editor

Compose with Blocks, Not HTML

Drag-and-drop content blocks with real-time preview. Text, images, code, embeds, custom block types. Every block is a self-contained unit with its own schema and rendering.

  • Custom block types — define schema, template, CSS
  • Reorder with drag-and-drop, no page reload
  • Inline editing with Markdown shortcuts
  • Raw HTML block for when you need full control
// Register a custom block type
$blocks->register('callout', [
    'label' => 'Callout Box',
    'icon'  => 'megaphone',
    'fields' => [
        'style'   => ['type' => 'select', 'options' => ['info', 'warning', 'tip']],
        'title'   => ['type' => 'text'],
        'content' => ['type' => 'rich-text'],
    ],
    'template' => 'blocks.callout',
]);
Revisions & Staging

Edit Without Fear

Every save creates an automatic revision. Diff any two versions side-by-side. Restore with one click. For bigger changes, use the staging environment — edit multiple pages, preview the result, then deploy everything at once.

  • Full history with visual diffs
  • Named snapshots for milestone backups
  • Staging sandbox with preview URLs
  • Coordinated multi-page deploys
// Restore a previous revision
$content->restoreRevision($revisionId);

// Create a staging changeset
$changeset = $staging->createChangeset('Homepage redesign');
$staging->stage($homepage, $changeset);
$staging->stage($aboutPage, $changeset);

// Preview, then deploy
$staging->preview($changeset);  // → staging URL
$staging->deploy($changeset);   // → live
Workflows

From Draft to Published — Your Rules

Define review pipelines with approvals, role gates, and automatic transitions. A blog might need just "draft → published." An enterprise site might need "draft → legal review → editor approval → scheduled → published."

  • Custom states and transitions per content type
  • Role-based gates — who can approve what
  • Automatic actions on state change (notify, index, cache)
  • Audit trail for compliance
// Define a workflow
$workflow->define('editorial', [
    'states' => ['draft', 'review', 'approved', 'published'],
    'transitions' => [
        'submit'  => ['from' => 'draft',    'to' => 'review'],
        'approve' => ['from' => 'review',   'to' => 'approved',
                       'gate' => 'role:editor'],
        'publish' => ['from' => 'approved', 'to' => 'published'],
        'reject'  => ['from' => 'review',   'to' => 'draft'],
    ],
]);

Extend Everything

Mutable hooks, modular architecture, and a queue system. VelvetCMS is designed to be extended, not forked.

Hooks System

Filters mutate data as it flows through the system. Actions trigger side effects. If you've used WordPress hooks, you already know the pattern — but typed, testable, and without the global soup.

// Filter: modify content before saving
$hooks->filter('content.before_save', function (Content $content) {
    $content->slug = Str::slug($content->title);
    return $content;
});

// Action: trigger side effects after publishing
$hooks->action('content.published', function (Content $content) {
    $search->index($content);
    $cache->invalidate('sitemap');
    $webhook->notify('content.published', $content);
});

Module System

Self-contained packages with routes, views, migrations, and commands. Version constraints, dependency resolution, conflict detection. VelvetCMS itself is a module running on Core.

Queue System

Offload heavy work — media processing, imports, search indexing, webhook delivery. Database-backed with retry logic, failure tracking, and priority lanes.

Smart Search

Built-in search with typo tolerance, synonym support, faceted filtering, and search analytics. No Elasticsearch required — but you can swap drivers if you outgrow it.

The Foundation

Built on a Purpose-Built Framework

VelvetCMS runs on Core — a lightweight, explicit PHP framework with no facades, no service locators, no magic. Every dependency is injected. Every call is traceable.

4 Runtime dependencies
~1ms Cold boot time
0 Facades or proxies
// Explicit. No magic. No surprises.
class PostController
{
    public function __construct(
        private ContentService $content,
        private CacheInterface $cache
    ) {}

    public function show(Request $req, string $slug): Response
    {
        $post = $this->cache->remember(
            "post:{$slug}",
            600,
            fn() => $this->content->findBySlug($slug)
        );

        return view('posts.show', ['post' => $post]);
    }
}

The Stack

Three layers. Use what you need.

🚀

Fleet

Multi-site orchestration, VelvetScore auto-scaling, white-label management.

VelvetCMS

Admin panel, block editor, media library, workflows, SEO, analytics.

Core

Routing, DI, query builder, caching, events, modules, multi-tenancy.

Just need a framework? Use Core alone. Apache 2.0, free forever.
Need a CMS? Add VelvetCMS. Installs as a module.
Managing many sites? Fleet handles orchestration at scale.

Also Included

The things you expect from a modern CMS — all built in.

🖼️
Media Library Responsive images, WebP, focal point cropping, usage tracking.
📂
Collections Custom content types. Products, events, team — no code required.
👥
Users & Roles Granular capabilities. Admin, Editor, Author, Contributor.
🧭
Menu Builder Drag-and-drop, nested items, external links.
📊
SEO Tools Meta, Open Graph, sitemaps, focus keyword analysis.
📈
Analytics Privacy-first, no cookies, no third-party scripts. GDPR-ready.
📅
Scheduling Future publishing, expiration dates, auto-unpublish.
🗑️
Trash System Centralized soft-delete with auto-expiry. Nothing is lost forever.

Fair Code. Fair Price.

Core is open source. VelvetCMS is free for non-commercial. Simple.

Apache 2.0

Core

  • Free forever
  • Commercial use included
Dual License

VelvetCMS

  • Free for non-commercial
  • License for business use
Commercial

Fleet

  • For agencies & scale
  • Professional support

Full License Details →

Ready to Build?

Install in under a minute. Read the docs. Ship something.