PHPackages                             orchestra/canvas - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. orchestra/canvas

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

orchestra/canvas
================

Code Generators for Laravel Applications and Packages

v11.0.1(3mo ago)20920.6M↓12.3%13[1 PRs](https://github.com/orchestral/canvas/pulls)20MITPHPPHP ^8.3CI passing

Since Jan 3Pushed 1w ago2 watchersCompare

[ Source](https://github.com/orchestral/canvas)[ Packagist](https://packagist.org/packages/orchestra/canvas)[ RSS](/packages/orchestra-canvas/feed)WikiDiscussions 11.x Synced 3d ago

READMEChangelog (10)Dependencies (32)Versions (130)Used By (20)

Code Generators for Laravel Applications and Packages
=====================================================

[](#code-generators-for-laravel-applications-and-packages)

**Canvas** replicates all of the `make` artisan commands available in your basic Laravel application. It allows everyone to use it:

- outside of Laravel installation such as when building Laravel packages.
- with Laravel by allowing a few customizations to the stub resolved class and namespace.

[![tests](https://github.com/orchestral/canvas/actions/workflows/tests.yaml/badge.svg?branch=10.x)](https://github.com/orchestral/canvas/actions/workflows/tests.yaml)[![Latest Stable Version](https://camo.githubusercontent.com/4ecd3e73f6e25ecae14eaa68d890a2889da93b1ccf3ca86c8f91f1393a888adb/68747470733a2f2f706f7365722e707567782e6f72672f6f72636865737472612f63616e7661732f762f737461626c65)](https://packagist.org/packages/orchestra/canvas)[![Total Downloads](https://camo.githubusercontent.com/7cd69bc73c2e8c1d6b9ef1f37a61f480c0ebd2a8d5230fd939d29df05cbd2167/68747470733a2f2f706f7365722e707567782e6f72672f6f72636865737472612f63616e7661732f646f776e6c6f616473)](https://packagist.org/packages/orchestra/canvas)[![Latest Unstable Version](https://camo.githubusercontent.com/8afe5554569e0780b909a1d424820f44e71f314b15105fafebbf66240b6044b3/68747470733a2f2f706f7365722e707567782e6f72672f6f72636865737472612f63616e7661732f762f756e737461626c65)](https://packagist.org/packages/orchestra/canvas)[![License](https://camo.githubusercontent.com/6c293fd83211d06ad42d31410d18c829bee68d204ba75a925db9b9b500e4a511/68747470733a2f2f706f7365722e707567782e6f72672f6f72636865737472612f63616e7661732f6c6963656e7365)](https://packagist.org/packages/orchestra/canvas)[![Coverage Status](https://camo.githubusercontent.com/83c0038470435f11a99931814bd3ec1995733cba6d2c0fd2c1d45e8393587690/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6f72636865737472616c2f63616e7661732f62616467652e7376673f6272616e63683d31302e78)](https://coveralls.io/github/orchestral/canvas?branch=10.x)

Installation
------------

[](#installation)

To install through composer, run the following command from the terminal:

```
composer require --dev "orchestra/canvas"

```

Usages
------

[](#usages)

As a Laravel developer, you should be familiar with the following commands:

Command.Description`make:channel`Create a new channel class`make:command`Create a new Artisan command`make:controller`Create a new controller class`make:event`Create a new event class`make:exception`Create a new custom exception class`make:factory`Create a new model factory`make:job`Create a new job class`make:listener`Create a new event listener class`make:mail`Create a new email class`make:middleware`Create a new middleware class`make:migration`Create a new migration file`make:model`Create a new Eloquent model class`make:notification`Create a new notification class`make:observer`Create a new observer class`make:policy`Create a new policy class`make:provider`Create a new service provider class`make:request`Create a new form request class`make:resource`Create a new resource`make:rule`Create a new validation rule`make:seeder`Create a new seeder class`make:test`Create a new test classWhich can be executed via:

```
php artisan make:migration CreatePostsTable --create

```

With **Canvas**, you can run the equivalent command via:

```
vendor/bin/canvas make:migration CreatePostsTable --create

```

### `canvas.yaml` Preset file

[](#canvasyaml-preset-file)

To get started you can first create `canvas.yaml` in the root directory of your Laravel project or package.

#### Laravel preset

[](#laravel-preset)

You can run the following command to create the file:

```
vendor/bin/canvas preset laravel

```

Which will output the following as `canvas.yaml`:

```
preset: laravel

namespace: App

model:
  namespace: App
```

#### Package preset

[](#package-preset)

You can run the following command to create the file:

```
vendor/bin/canvas preset package

```

Which will output the following as `canvas.yaml`:

```
preset: package

namespace: PackageName
user-auth-provider: App\User

paths:
  src: src
  resource: resources

factory:
  path: database/factories

migration:
  path: database/migrations
  prefix: ''

console:
  namespace: PackageName\Console

model:
  namespace: PackageName

provider:
  namespace: PackageName

testing:
  namespace: PackageName\Tests
```

> You need to change `PackageName` to the root namespace for your package.

Alternatively, you can set `--namespace` option to ensure the namespace is used in the file:

```
vendor/bin/canvas preset package --namespace="Foo\Bar"

```

```
preset: package

namespace: Foo\Bar
user-auth-provider: App\User

paths:
  src: src
  resource: resources

factory:
  path: database/factories

migration:
  path: database/migrations
  prefix: ''

console:
  namespace: Foo\Bar\Console

model:
  namespace: Foo\Bar

provider:
  namespace: Foo\Bar

testing:
  namespace: Foo\Bar\Tests
```

### Integration with Laravel

[](#integration-with-laravel)

By default, you can always use `composer exec canvas` for Laravel and Packages environment. However, with the Package Discovery `Orchestra\Canvas\LaravelServiceProvider` will be installed automatically and override all default `make` commands available via artisan so you can use it without changing anything.

###  Health Score

74

—

ExcellentBetter than 100% of packages

Maintenance90

Actively maintained with recent releases

Popularity65

Solid adoption and visibility

Community36

Small or concentrated contributor base

Maturity90

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 99.1% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~18 days

Recently: every ~24 days

Total

127

Last Release

12d ago

Major Versions

v9.2.1 → v10.0.12025-02-15

v9.2.2 → v10.0.22025-04-05

9.x-dev → v10.1.02025-11-13

v10.1.1 → 12.x-dev2026-03-06

10.x-dev → 11.x-dev2026-06-22

PHP version history (10 changes)v6.0.0PHP &gt;=7.3

4.6.0PHP &gt;=7.2 || &gt;=8.0

5.5.0PHP &gt;=7.2.5 || &gt;=8.0

6.1.0PHP &gt;=7.3 || &gt;=8.0

v6.1.4PHP ^7.3 || ^8.0

v7.0.0PHP ^8.0

v8.0.0PHP ^8.1

v9.0.0PHP ^8.2

12.x-devPHP ^8.4

v11.0.0PHP ^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/172966?v=4)[Mior Muhammad Zaki](/maintainers/crynobone)[@crynobone](https://github.com/crynobone)

---

Top Contributors

[![crynobone](https://avatars.githubusercontent.com/u/172966?v=4)](https://github.com/crynobone "crynobone (845 commits)")[![edersoares](https://avatars.githubusercontent.com/u/957395?v=4)](https://github.com/edersoares "edersoares (3 commits)")[![blhylton](https://avatars.githubusercontent.com/u/1297591?v=4)](https://github.com/blhylton "blhylton (2 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")[![therobfonz](https://avatars.githubusercontent.com/u/35386780?v=4)](https://github.com/therobfonz "therobfonz (1 commits)")

---

Tags

generatorlaravellaravel-packagescafolding

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/orchestra-canvas/health.svg)

```
[![Health](https://phpackages.com/badges/orchestra-canvas/health.svg)](https://phpackages.com/packages/orchestra-canvas)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3355.3M346](/packages/psalm-plugin-laravel)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M199](/packages/laravel-ai)[illuminate/queue

The Illuminate Queue package.

21332.6M1.6k](/packages/illuminate-queue)[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[spatie/laravel-medialibrary

Associate files with Eloquent models

6.1k43.2M632](/packages/spatie-laravel-medialibrary)[flarum/core

Delightfully simple forum software.

201.4M2.3k](/packages/flarum-core)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
