How to Contribute
Canvas is actively developed and running in production. It's built and maintained by one person — so contributions are genuinely appreciated, not just tolerated. Every PR gets a personal review within 1-2 days. Requirements: PHP 8.2+ and Composer.
Repository Structure
Canvas lives in a monorepo alongside ObjectQuel and several supporting packages:
framework/
packages/
canvas/
objectquel/
dependency-injection/
discover/
signal-hub/
... and others
Development happens in the monorepo. Contributions may affect multiple packages, so pull requests should target the repository rather than a single package.
Quick Start
# Fork https://github.com/quellabs/framework on GitHub
git clone https://github.com/YOUR-USERNAME/framework.git
cd framework
git remote add upstream https://github.com/quellabs/framework.git
composer install
Contribution Workflow
# Create a feature branch
git checkout -b feature/your-feature-name
# Make changes and update docs
# Run style checks
./vendor/bin/php-cs-fixer fix
# Commit and push
git add .
git commit -m "feat: your feature description"
git push origin feature/your-feature-name
# Open a PR at https://github.com/quellabs/framework/pulls
Not sure whether your idea fits? Open a GitHub Discussion first. A quick conversation saves everyone time.
Code Style
Canvas follows PSR-12 with three deliberate modifications: tabs (not spaces), opening braces on same line, and strict types always declared. These are enforced automatically — just run the fixer before committing and you're done.
<?php
declare(strict_types=1);
namespace Quellabs\Canvas\Example;
class ExampleController {
protected string $config;
public function __construct(string $config) {
$this->config = $config;
}
/**
* @Route("/users")
*/
public function getUsers(int $limit = 10): JsonResponse {
if ($limit <= 0) {
return $this->json(['error' => 'Invalid limit'], 400);
}
$users = $this->em()->findBy(User::class, [
'active' => true,
'deleted_at' => null,
]);
return $this->json(['data' => array_slice($users, 0, $limit)]);
}
}
./vendor/bin/php-cs-fixer fix
Reporting Issues
Report bugs at github.com/quellabs/framework/issues
Helpful to include: expected vs actual behaviour, steps to reproduce, Canvas version, PHP version, and any error output. The more specific, the faster it gets fixed.
Code Review
You'll get feedback within 1-2 days. If something needs changing, push new commits to the same branch and the PR updates automatically — no need to close and reopen. When you're happy with the changes, leave a comment and I'll re-review.
Versioning
Canvas follows Semantic Versioning. Breaking changes are MAJOR, new backwards-compatible features are MINOR, bug fixes are PATCH. The main branch is always stable.