PHPackages                             mtconsultingroup/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. mtconsultingroup/canvas

ActiveLibrary

mtconsultingroup/canvas
=======================

A Laravel publishing platform

v1.0.3(5y ago)048MITVuePHP ^7.3|^8.0

Since Nov 23Pushed 5y ago1 watchersCompare

[ Source](https://github.com/mtconsultingroup/canvas)[ Packagist](https://packagist.org/packages/mtconsultingroup/canvas)[ Docs](https://mtconsultingroup.it)[ RSS](/packages/mtconsultingroup-canvas/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (5)Versions (5)Used By (0)

 [ ![Canvas](https://github.com/austintoddj/canvas/.github/assets/header.png) ](https://trycanvas.app)

 [![Build Status](https://github.com/austintoddj/canvas/workflows/build/badge.svg)](https://github.com/austintoddj/canvas/actions) [![Total Downloads](https://camo.githubusercontent.com/549ab9ffca871b0bcdafd5a37f5f7f69e9f3f1fd7382a33ebfb8d34e791a6154/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f61757374696e746f64646a2f63616e766173)](https://packagist.org/packages/austintoddj/canvas) [![Latest Stable Version](https://camo.githubusercontent.com/fcaf4aa898432d48fd6e1bee5c37f68f73f4d50b3c26fd409beffb68b0835c94/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f61757374696e746f64646a2f63616e766173)](https://packagist.org/packages/austintoddj/canvas) [![License](https://camo.githubusercontent.com/545ff290a97c634835bd93b071cd4ea8009e2cc009e9e53cb3e4402bc13cb99a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f61757374696e746f64646a2f63616e766173)](https://packagist.org/packages/austintoddj/canvas)

Introduction
------------

[](#introduction)

Canvas is a fully open source package to extend your existing [Laravel](https://laravel.com) application and get you up-and-running with a blog in just a few minutes. In addition to a distraction-free writing experience, you can view monthly trends on your content, get insights into reader traffic and more!

Table of Contents
-----------------

[](#table-of-contents)

- [System Requirements](#system-requirements)
- [Installation](#installation)
- [Configuration](#configuration)
- [Roles &amp; Permissions](#roles--permissions)
- [Features](#features)
- [Updates](#updates)
- [Contributing](#contributing)
- [License](#license)
- [Credits](#credits)

System Requirements
-------------------

[](#system-requirements)

- PHP &gt;= 7.3
- Laravel &gt;= 6.0
- One of the [four supported databases](https://laravel.com/docs/8.x/database#introduction) by Laravel

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

[](#installation)

You may use composer to install Canvas into your Laravel project:

```
composer require mtconsultingroup/canvas
```

Publish the assets and primary configuration file using the `canvas:install` Artisan command:

```
php artisan canvas:install
```

Create a symbolic link to ensure file uploads are publicly accessible from the web using the `storage:link` Artisan command:

```
php artisan storage:link
```

Configuration
-------------

[](#configuration)

After publishing Canvas's assets, a primary configuration file will be located at `config/canvas.php`. This file allows you to customize various aspects of how your application uses the package.

Canvas exposes its UI at `/canvas` by default. This can be changed by updating either the `path` or `domain` option:

```
/*
|--------------------------------------------------------------------------
| Base Domain
|--------------------------------------------------------------------------
|
| This is the subdomain where Canvas will be accessible from. If the
| setting is null, Canvas will reside under the same domain as the
| application. Otherwise, this will be used as the subdomain.
|
*/

'domain' => env('CANVAS_DOMAIN', null),

/*
|--------------------------------------------------------------------------
| Base Path
|--------------------------------------------------------------------------
|
| This is the URI path where Canvas will be accessible from. You are free
| to change this path to anything you like. Note that the URI will not
| affect the paths of its internal API that aren't exposed to users.
|
*/

'path' => env('CANVAS_PATH_NAME', 'canvas'),
```

Sometimes, you may want to apply custom roles or permissions when accessing Canvas. You can create and attach any additional middleware here:

```
/*
|--------------------------------------------------------------------------
| Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will be attached to every route in Canvas, giving you
| the chance to add your own middleware to this list or change any of
| the existing middleware. Or, you can simply stick with the list.
|
*/

'middleware' => [
    'web',
],
```

Canvas uses the storage disk for media uploads. You may configure the different filesystem options here:

```
/*
|--------------------------------------------------------------------------
| Storage
|--------------------------------------------------------------------------
|
| This is the storage disk Canvas will use to put file uploads. You may
| use any of the disks defined in the config/filesystems.php file and
| you may also change the maximum upload size from its 3MB default.
|
*/

'storage_disk' => env('CANVAS_STORAGE_DISK', 'local'),

'storage_path' => env('CANVAS_STORAGE_PATH', 'public/canvas'),

'upload_filesize' => env('CANVAS_UPLOAD_FILESIZE', 3145728),
```

Roles &amp; Permissions
-----------------------

[](#roles--permissions)

Canvas has 3 pre-defined roles:

- **Contributor** (Somebody who can write and manage their own posts but cannot publish them)
- **Editor** (Somebody who can publish and manage posts including the posts of other users)
- **Admin** (Somebody who can do everything and see everything)

When you install a fresh version of Canvas, you'll have a default admin user set up automatically. From there, you can perform any basic CRUD actions on users, as well as assign their various roles.

Features
--------

[](#features)

> **Note:** The following features are completely optional, you are not required to use them.

### Frontend

[](#frontend)

**Want a beautiful, Medium.com-inspired frontend?** Use the `canvas:ui` Artisan command to install the scaffolding:

```
php artisan canvas:ui
```

After generating the frontend scaffolding, your `package.json` file will include the necessary dependencies to install and compile:

```
# Using NPM
npm install
npm run dev

# Using Yarn
yarn
yarn dev
```

That's it! You can navigate to `/canvas-ui` and check it out for yourself. You're free to modify any aspect of it that you'd like.

### Unsplash Integration

[](#unsplash-integration)

**Want access to the entire [Unsplash](https://unsplash.com) library?** Set up a new application at , grab your access key, and update `config/canvas.php`:

```
/*
|--------------------------------------------------------------------------
| Unsplash Integration
|--------------------------------------------------------------------------
|
| Visit https://unsplash.com/oauth/applications to create a new Unsplash
| app. Use the confidential Access Key given to you to integrate with
| the API. Note that demo apps are limited to 50 requests per hour.
|
*/

'unsplash' => [
    'access_key' => env('CANVAS_UNSPLASH_ACCESS_KEY'),
]
```

### Weekly Digest

[](#weekly-digest)

**Want a weekly summary?** Canvas allows users to receive a weekly summary of their authored content. Once your application is [configured for sending mail](https://laravel.com/docs/master/mail), update `config/canvas.php`:

```
/*
|--------------------------------------------------------------------------
| E-Mail Notifications
|--------------------------------------------------------------------------
|
| This option controls e-mail notifications that will be sent via the
| default application mail driver. A default option is provided to
| support the notification system as an opt-in feature.
|
|
*/

'mail' => [
    'enabled' => env('CANVAS_MAIL_ENABLED', false),
]
```

Since the weekly digest runs on [Laravel's Scheduler](https://laravel.com/docs/master/scheduling), you'll need to add the following cron entry to your server:

```
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
```

Updates
-------

[](#updates)

Canvas loosely follows [Semantic Versioning](https://semver.org/) and increments versions as `MAJOR.MINOR.PATCH` numbers

- Major and minor versions *can contain breaking changes*, so follow the [upgrade guide](.github/UPGRADE.md) for a step-by-step breakdown
- Patch versions will remain backwards compatible, so you can safely update the package by following the steps below:

You may update your Canvas installation using composer:

```
composer update
```

Run any new migrations using the `canvas:migrate` Artisan command:

```
php artisan canvas:migrate
```

Re-publish the assets using the `canvas:publish` Artisan command:

```
php artisan canvas:publish
```

To keep the assets up-to-date and avoid issues in future updates, you may add the `canvas:publish` command to the `post-update-cmd` scripts in your application's `composer.json` file:

```
{
    "scripts": {
        "post-update-cmd": [
            "@php artisan canvas:publish --ansi"
        ]
    }
}
```

Contributing
------------

[](#contributing)

Thank you for considering contributing to Canvas!

You can open a completely prebuilt, ready-to-code development environment using Gitpod.

[![Open in Gitpod](https://camo.githubusercontent.com/6a4edb76a7e92e0faad09a11e42cba7c39803ee6723f8cb1b801f91113d59695/68747470733a2f2f676974706f642e696f2f627574746f6e2f6f70656e2d696e2d676974706f642e737667)](https://gitpod.io/#https://github.com/austintoddj/canvas/tree/master)

Alternatively, you can use the [contribution guide](.github/CONTRIBUTING.md) to assist you in manually setting up an environment on your own machine.

One of the ongoing goals for Canvas is to make it as accessible as possible. If you come across any translation mistakes or issues and want to make a contribution, please [create a pull request](https://github.com/austintoddj/canvas/pulls). If you don't see your native language included in the `resources/lang` directory, feel free to add it.

Testing
-------

[](#testing)

Run the tests with:

```
composer test
```

License
-------

[](#license)

Canvas is open-sourced software licensed under the [MIT license](license).

Credits
-------

[](#credits)

- [@austintoddj](https://twitter.com/austintoddj)
- [@talvbansal](https://twitter.com/talv)
- [@reliq](https://twitter.com/IAmReliq)
- [@mithicher](https://twitter.com/mithicher)
- [@themsaid](https://twitter.com/themsaid)
- [@NinaLimpi](https://twitter.com/NinaLimpi)

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 66.7% 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 ~26 days

Total

4

Last Release

1915d ago

PHP version history (2 changes)v1.0.0PHP ^7.3

v1.0.3PHP ^7.3|^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/0e49acb7326db03b55eb927c08ee58ade1f40981866237fb221747fb6d53ff53?d=identicon)[tosettil](/maintainers/tosettil)

---

Top Contributors

[![mtconsultingroup](https://avatars.githubusercontent.com/u/56879361?v=4)](https://github.com/mtconsultingroup "mtconsultingroup (2 commits)")[![tosettil-polimi](https://avatars.githubusercontent.com/u/24563313?v=4)](https://github.com/tosettil-polimi "tosettil-polimi (1 commits)")

---

Tags

laravelplatformblogcanvaspublishing

###  Code Quality

TestsPHPUnit

### Embed Badge

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

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

###  Alternatives

[austintoddj/canvas

A Laravel publishing platform

3.4k120.6k](/packages/austintoddj-canvas)[orchid/platform

Platform for back-office applications, admin panel or CMS your Laravel app.

4.8k2.5M59](/packages/orchid-platform)

PHPackages © 2026

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