Canvas Framework

A modern, lightweight PHP framework that gets out of your way. Write clean controllers with route annotations, query your database with an intuitive ORM, and let contextual containers handle the complexity.

What Makes Canvas Different

Canvas combines six powerful concepts to create a framework that feels natural to work with.

🚀 Zero Configuration

Start coding immediately with sensible defaults. Canvas auto-discovers controllers, services, and packages through Composer metadata.

🎯 Annotation-Based Routing

Define routes directly in your controllers using @Route annotations. No separate route files to maintain.

📦 Contextual Containers

Work with interfaces directly. Canvas intelligently discovers and resolves the right implementation based on context.

⚡ Aspect-Oriented Programming

Add crosscutting concerns like caching, authentication, and logging without cluttering your business logic.

🗄️ ObjectQuel ORM

Query your database using an intuitive, purpose-built query language that feels like natural PHP.

🔄 Legacy Bridge

Drop Canvas into any existing PHP application. Your legacy URLs keep working while you gradually modernize with Canvas services.

Example Controller

Here's what a typical Canvas controller looks like:

<?php
namespace App\Controllers;

use Quellabs\Canvas\Annotations\Route;
use Quellabs\Canvas\Controllers\BaseController;
use App\Entities\UserEntity;

class UserController extends BaseController {

    /**
     * @Route("/users")
     */
    public function index() {
        // ObjectQuel ORM - clean, intuitive queries
        $users = $this->em->findBy(UserEntity::class, ['active' => true]);

        // Contextual template resolution
        return $this->render('users/index.tpl', compact('users'));
    }
}
Getting Started: Ready to dive in? Check out our Installation guide to get Canvas up and running in minutes.