PHPackages                             locomotivemtl/charcoal-city-boilerplate - 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. locomotivemtl/charcoal-city-boilerplate

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

locomotivemtl/charcoal-city-boilerplate
=======================================

Boilerplate, a Charcoal City Project

0.2(9y ago)052MITJavaScriptPHP &gt;=5.6.0

Since Oct 3Pushed 9y ago13 watchersCompare

[ Source](https://github.com/locomotivemtl/charcoal-city-boilerplate)[ Packagist](https://packagist.org/packages/locomotivemtl/charcoal-city-boilerplate)[ Docs](https://locomotive.ca)[ RSS](/packages/locomotivemtl-charcoal-city-boilerplate/feed)WikiDiscussions master Synced today

READMEChangelogDependencies (12)Versions (7)Used By (0)

Charcoal City Boilerplate
=========================

[](#charcoal-city-boilerplate)

The goal of this project is to provide a fully working "boilerplate" (empty *skeleton* project) for a *City project* using the Charcoal framework. The installation is fully automated.

Table of Content
================

[](#table-of-content)

- [How to Install](#how-to-install)
    - [1. Create / clone the city boilerplate](#1-create--clone-the-city-boilerplate)
    - [2. Installation process](#2-installation-process)
    - [3. Ready to go](#3-ready-to-go)
    - [4. Basic debug](#4-basic-debug)
    - [5. Set up `charcoal-admin`](#5-set-up-charcoal-admin)
- [Going further](#going-further)
    - More config customizations
    - Creating a custom template
    - Using objects
    - Customizing the backend
- [Dependencies and requirements](#dependencies-and-requirements)
    - [The charcoal modules](#the-charcoal-modules)
- What's inside the Boilerplate
- [Development](#development)
    - [Development dependencies](#development-dependencies)
    - [Continuous Integration](#continuous-integration)
    - [Coding Style](#coding-style)
    - [Authors](#authors)
    - [Changelog](#changelog)

How to Install
==============

[](#how-to-install)

To start a Charcoal project with this Boilerplate, simply:

1. **Create / clone the city boilerplate**
------------------------------------------

[](#1-create--clone-the-city-boilerplate)

```
$ composer create-project locomotivemtl/charcoal-city-boilerplate [path] --prefer-source -s dev
```

The `--prefer-source` argument ensure you have the possibility to edit vendors while the `-s dev` argument specifies composer to user the latest development boilerplate.

> **About the Document Root**
>
> 👉 The project should not be cloned directly in a web-accessible directory. The web server should be configured to serve the `www/` folder directly. The other folders (`vendor/`, `src/`, `templates/`, `metadata/`, `config/`, etc.) should therefore not be available from the web server (kept outside the document root).

2. **Installation process**
---------------------------

[](#2-installation-process)

### **Create-project setup**

[](#create-project-setup)

- **Do you want to remove the existing VCS (.git, .svn..) history? \[Y,n\]?**
    - Yes. This will remove the charcoal-city-boilerplate repository informations.

### **Project setup**

[](#project-setup)

The project setup uses the given name to rename all files to the currently choosen namespace.

**Manual call:**

```
$ ./vendor/bin/charcoal city/setup
```

- **What is the name of the project?**

    - Could be bascily any valid string that is not `charcoal` or `city` which are the 2 already used namespaces.
- **What is the namespace of the project?**

    - Default will be the name of the project with a capital letter. Everything will be renamed accordingly.

#### **Composer setup**

[](#composer-setup)

The composer setup updates the composer.json file to match the current project informations.

- **What is the VCS repository of the project? (let blank to use an already installed VCS)**

    - The repository in which the project will be held. If specified, the script will ensure to `git init` and `git remote add origin [specified repository]`
- **What is the project website url? (optional)**

    - Updates the composer.json file with the given information.

### **City config script**

[](#city-config-script)

The city config script generates a database and a config.local.json file matching the given informations.

**Manual call:**

```
$ ./vendor/bin/charcoal city/config
```

- **Database name (Database will be created or overwritten, let blank to user another database)**
    - Database name. If not specified, you will have to manually edit the config.local.json file automatically generated.
- **Database username : \[default: root\]**
    - Database username (usually root)
- **Database password : \[default: ''\]**
    - Database password (default to empty string)
- **Database hostname : \[default: 127.0.0.1\]**
    - Database hostname which could be either 127.0.0.1 or localhost.

3. **Ready to go**
------------------

[](#3-ready-to-go)

You can now visit the local webpage and access the home template, default news and default events. Depending on your installation, you might have to update the hosts file.

4. **Basic debug**
------------------

[](#4-basic-debug)

If you can't see the home page with all these steps successfully completed, make sure you changed the hosts file accordingly. Then, you can manually `composer update` the project, which will rebuild the autoload and update to the latest package. When all else fails, ask for Joel or Bene.

5. **Set up charcoal-admin**
----------------------------

[](#5-set-up-charcoal-admin)

This step is now completely automated.

First, ensure the admin module (the *backend*) is properly set up and ready:

```
$ cd vendor/locomotivemtl/charcoal-admin
$ npm install
$ bower install
$ grunt
$ cd -
```

Then create the first admin user, to be able to login into the backend:

```
$ ./vendor/bin/charcoal admin/user/create
```

> 👉 The `./vendor/bin/charcoal` CLI tool, provided by `charcoal-app` is required to run various scripts, many of which are provided by the `charcoal-admin` and `charcoal-base` modules.

Point your browser to  and you should see the boilerplate's default home page.

[![Admin login](docs/images/admin-login.png)](docs/images/admin-login.png)

The next step to customize the *backend* is to configure the main menu, as well as the various

Dependencies and Requirements
=============================

[](#dependencies-and-requirements)

- [`PHP 5.5+`](http://php.net)
    - `ext-json`
    - `ext-pdo`
    - `ext-spl`
    - `ext-mbstring`

The Charcoal modules
--------------------

[](#the-charcoal-modules)

- [charcoal-admin](https://github.com/locomotivemtl/charcoal-admin)
    - The backend, or control panel.
- [charcoal-app](https://github.com/locomotivemtl/charcoal-app)
    - App components based on Slim.
- [charcoal-base](https://github.com/locomotivemtl/charcoal-base)
    - Base objects and behaviors.
- [charcoal-cms](https://github.com/locomotivemtl/charcoal-cms)
    - CMS objects (Section, News, Events, etc.)
- [charcoal-core](https://github.com/locomotivemtl/charcoal-core)
    - Core objects, Model, Source.
- [charcoal-config](https://github.com/locomotivemtl/charcoal-config)
    - Base configuration system.
- [charcoal-email](https://github.com/locomotivemtl/charcoal-email)
    - Email utilities, based on phpmailer.
- [charcoal-factory](https://github.com/locomotivemtl/charcoal-factory)
    - Dynamic objects creation.
- [charcoal-image](https://github.com/locomotivemtl/charcoal-image)
    - Image manipulation and effects.
- [charcoal-property](https://github.com/locomotivemtl/charcoal-property)
    - Metadata's properties.
- [charcoal-translation](https://github.com/locomotivemtl/charcoal-translation)
    - Translation utilities.
- [charcoal-ui](https://github.com/locomotivemtl/charcoal-ui)
    - Ui objects (Form, Menu, Dashboard, Layout, etc.)
- [charcoal-view](https://github.com/locomotivemtl/charcoal-view)
    - View renderer. (mustache, twig, etc.)

### Status matrix

[](#status-matrix)

ModuleVersionTravisScrutinizerInsightsCoverallsPHPDocApiGen**admin**[![version](https://camo.githubusercontent.com/0c20ddbb2cb366178591c3c0498c9ce3204928c229a6c21fb5423e2cadd687bc/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d61646d696e61646d696e2e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/0c20ddbb2cb366178591c3c0498c9ce3204928c229a6c21fb5423e2cadd687bc/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d61646d696e61646d696e2e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/ecdc44485ed92acfa325fd99793c9e81c2c5615a0899c7f56cd39e55050f0f1f/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d61646d696e2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-admin)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/be84400fcfbd1a3f34e2108abddfe7d14820b3143af10872c8bb7ba83cf44300/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d61646d696e2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-admin/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/8759cabff846d4cfde2efefb492e65d4957f12a71749dfc5b399742f237d0fab/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f30303430326265352d663862622d343237392d383962382d3365316533323438313738612f6d696e692e706e67)](https://insight.sensiolabs.com/projects/00402be5-f8bb-4279-89b8-3e1e3248178a)[![Coverage Status](https://camo.githubusercontent.com/c473b0dd890de90eda943d2316db9acd8095c82bb0fbcac3b81cf4308070c73c/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d61646d696e2f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-admin?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-admin/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-admin/apigen/master/)**app**[![version](https://camo.githubusercontent.com/ba708505a45c53939ca7a6f7b0b29c4e3d44900a0b34e687418296ce35b619c6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d6170702e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/ba708505a45c53939ca7a6f7b0b29c4e3d44900a0b34e687418296ce35b619c6/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d6170702e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/fba9c037a24a9556bb3f0cc462ef03901ced336986e0c842be947eeda3269b76/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d6170702e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-app)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/5161ea4114123ef1eba06f5505851864528ae803ea026b4a82fc02f92e2f65f7/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d6170702f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-app/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/02f12e4603d7eb24de690ebb6a7d977d2e501f7c5d7123ce9feb88ba8a075e17/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f35333362353739362d376536392d343261372d613034362d3731333432313436333038612f6d696e692e706e67)](https://insight.sensiolabs.com/projects/533b5796-7e69-42a7-a046-71342146308a)[![Coverage Status](https://camo.githubusercontent.com/3287c510e33cb3dfb4d239e0f026ba0875d405fd037e1ce2fd12496fdd30d16b/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d6170702f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-app?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-app/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-app/apigen/master/)**base**[![version](https://camo.githubusercontent.com/a30b4975ca13898f70106ac8ac55dc10e5fef9dfe3d7492cacb895f769b37f56/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/a30b4975ca13898f70106ac8ac55dc10e5fef9dfe3d7492cacb895f769b37f56/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/0307536105288b8db6666b84eddaa97358812bb4cf1f6c21a8bb7845de335617/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-base)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/df256dc68a003731e5e607d8f6ed7763efeab21615dbd9d7908ebd3b226e142b/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-base/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/c12e57b5d98be7a114b70d9d64f66b708d5336eb3774c4538042f9b9ba7d1991/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f37366463303765312d316132632d346665642d623766612d3033306631383634386335312f6d696e692e706e67)](https://insight.sensiolabs.com/projects/76dc07e1-1a2c-4fed-b7fa-030f18648c51)[![Coverage Status](https://camo.githubusercontent.com/8e60e60f7187e31220844fa70fee395732d87be17c737d0e64dd569c71fad9d0/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-base?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-base/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-base/apigen/master/)**cms**[![version](https://camo.githubusercontent.com/9b10f1fbfd881a9ee3101b7d1f2a3ace60daa5d04415dd32ee0e4728fd356317/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636d732e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/9b10f1fbfd881a9ee3101b7d1f2a3ace60daa5d04415dd32ee0e4728fd356317/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636d732e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/79cdc9cf5e4a1fec52aeef5fa1ac58c465d964845a37c89e661b32916d3f90dc/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636d732e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-cms)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/133330fa13c3a0cda4f218d9ecb3c8c59a5d59eb44e5146d553a5cc2df3a3d7a/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636d732f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-cms/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/5a9794e4ffdda19f4892e255785026c67188b635d267f7f10e469f2e76a21432/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f34346438643236342d323037622d343137642d626362642d6464353232373466633230312f6d696e692e706e67)](https://insight.sensiolabs.com/projects/44d8d264-207b-417d-bcbd-dd52274fc201)[![Coverage Status](https://camo.githubusercontent.com/1f5b275ca5ea091478dcf6d2d2b9f4f36778f1912b5415897ddedd8c739b6460/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d636d732f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-cms?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-cms/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-cms/apigen/master/)**config**[![version](https://camo.githubusercontent.com/787032cb7be4df556f9daea4b39017f81158350661efd78ebc9cddbcda7e36c4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f6e6669672e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/787032cb7be4df556f9daea4b39017f81158350661efd78ebc9cddbcda7e36c4/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f6e6669672e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/9b72543ce520dbfe0b21af2dc1e76a0526086c09f52e7228cc10443c915400df/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f6e6669672e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-config)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/38a012176239c94901e9a2bc108e59b41116aef5c62b041abaf067af940dd5df/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f6e6669672f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-config/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/cbb249e380e9652e93221af09d4f2b1c53288d676d75b021157cf81725186624/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f32376164323035662d343230382d346661362d396463662d3533346233613163306161612f6d696e692e706e67)](https://insight.sensiolabs.com/projects/27ad205f-4208-4fa6-9dcf-534b3a1c0aaa)[![Coverage Status](https://camo.githubusercontent.com/ef779087052b2534fbaee85707b2af3cd870a24888ad537684a90d2990fb202b/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f6e6669672f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-config?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-config/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-config/apigen/master/)**core**[![version](https://camo.githubusercontent.com/cf71accc51dc53f0867834a1fb64a31634d2f9ab8b9379a58a6802872b964a66/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f72652e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/cf71accc51dc53f0867834a1fb64a31634d2f9ab8b9379a58a6802872b964a66/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f72652e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/a3dfab807697a8aeefc699560f0c09bb1b76637e56c4605d193e54c21dc7b0cb/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f72652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-core)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/095c8ccdc4217fce29a6a54473caf3900ad03133548d97264910b6ee73aaf2ac/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f72652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-core/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/e3b9bc6a40d84edfc93602601c63f6e74fd2ac041e2b3042eb8c7c5f4628f289/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f61623135663662302d323036332d343435652d383164372d3235373562393139623061622f6d696e692e706e67)](https://insight.sensiolabs.com/projects/ab15f6b0-2063-445e-81d7-2575b919b0ab)[![Coverage Status](https://camo.githubusercontent.com/93b1a0d4ff4f6537d918d44511c8736130b6ba227fa3663395268960e886cc68/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d636f72652f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-core?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-core/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-core/apigen/master/)**email**[![version](https://camo.githubusercontent.com/5db57919b7242aebff78abd8a1000ff4f87f97024107ecaed163c8dedbe17d0f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d656d61696c2e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/5db57919b7242aebff78abd8a1000ff4f87f97024107ecaed163c8dedbe17d0f/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d656d61696c2e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/e80bab459d3222860056906cd4428cea840b3eef1f2bc9becb5356c35a240c50/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d656d61696c2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-email)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/f71dff7f3c82a9daaeba10d685c1738a53246b5ccd62dbc46c997d6573078749/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d656d61696c2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-email/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/406616acfe445d086b8ebb608a71df51625856d630b85780dff9322414e71a19/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f35343035383338382d336235642d343765332d383138352d6630303132333264333166372f6d696e692e706e67)](https://insight.sensiolabs.com/projects/54058388-3b5d-47e3-8185-f001232d31f7)[![Coverage Status](https://camo.githubusercontent.com/b017e42fbff731bd53ea6a75e82c77d786bfef610724094b1811d24c88954709/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d656d61696c2f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-email?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-email/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-email/apigen/master/)**factory**[![version](https://camo.githubusercontent.com/6b576177ab73a247b8d8a8db8c23b5ed42f92c5ea6b030619850d645cf05d4c1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d666163746f72792e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/6b576177ab73a247b8d8a8db8c23b5ed42f92c5ea6b030619850d645cf05d4c1/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d666163746f72792e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/c251f17b53cb766ef5d51ff601fe5a9cba6895125f1c4d2846fafc157909e2dd/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d666163746f72792e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-factory)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/c72f3fd20440cf51db122183d50cbefd05d32df12c5cb1df603095592730e423/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d666163746f72792f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-factory/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/b86ae497c71a1376e9484e7011418c12c210886dc472ab80d3f1a15a883ef5cb/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f30616563393330622d643639362d343135612d623465662d6131356331613536353039652f6d696e692e706e67)](https://insight.sensiolabs.com/projects/0aec930b-d696-415a-b4ef-a15c1a56509e)[![Coverage Status](https://camo.githubusercontent.com/3b2352f4e89b20cfc34cfade04e93af0b6eab4624bdeac4c8912d908d74b9d50/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d666163746f72792f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-factory?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-factory/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-factory/apigen/master/)**image**[![version](https://camo.githubusercontent.com/39f96c7aaa63b26f4aa4e43e28144a8a6e8ef8560e3a27f0c3e158051258e4c5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d696d6167652e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/39f96c7aaa63b26f4aa4e43e28144a8a6e8ef8560e3a27f0c3e158051258e4c5/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d696d6167652e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/e2170b62d79157f606fbf3d2fa63b8044e3a637be961a7ad7c64e21d7737a439/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d696d6167652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-image)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/a6f883e7837267f630d6d490cc3f0f614c5ddbb03116ba37d7f87e39c279ac77/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d696d6167652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-image/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/4a81e2b049887e8555d75fd620420e80d4f48ae31509f7fda4a1a31af5d32f22/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f38376339363231642d336232652d346537312d613432662d6536396562636134363732652f6d696e692e706e67)](https://insight.sensiolabs.com/projects/87c9621d-3b2e-4e71-a42f-e69ebca4672e)[![Coverage Status](https://camo.githubusercontent.com/788b09d977cbc3c9e49a936348f9d2d94ad2ff8ea8c01c00e96cd500fcfa7dcc/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d696d6167652f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-image?branch=master)--**property**[![version](https://camo.githubusercontent.com/3b22e0c17cc75c086b2c699784de2b12de594b592d7f505fb15e208a7b0b1679/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d70726f70657274792e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/3b22e0c17cc75c086b2c699784de2b12de594b592d7f505fb15e208a7b0b1679/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d70726f70657274792e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/3e52417abbc6f41c1eba8ea30e35e2fd7a8fd1185a73ab75d0abd189bfd6e038/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d70726f70657274792e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-property)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/52478e12f5d06cf09d44046936e64c3aafc082dd9b2e5263580120639bd33d9b/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d70726f70657274792f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-property/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/6ec8a0a860d97acce1d452703997cf81ab2eb2e5183a34f0235ec67d45fe3fa2/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f66336264666633382d633330302d343230372d383334322d6461303032653634613665312f6d696e692e706e67)](https://insight.sensiolabs.com/projects/f3bdff38-c300-4207-8342-da002e64a6e1)[![Coverage Status](https://camo.githubusercontent.com/bffcc7c2c35fbe2482ed7bfdf4bfa39c72e43018ba1cba65dcf988d0868d67bc/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d70726f70657274792f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-property?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-property/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-property/apigen/master/)**translation**[![version](https://camo.githubusercontent.com/cee61ac8a27c984ed19312a7514904b10fd9bfde724ab35136d2a9dbf1477700/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d7472616e736c6174696f6e2e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/cee61ac8a27c984ed19312a7514904b10fd9bfde724ab35136d2a9dbf1477700/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d7472616e736c6174696f6e2e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/6a2288328453dfd260443cb429b3ed3cc893bc9b3f11614a6db8af86ac0f525e/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d7472616e736c6174696f6e2e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-translation)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/08c3f2839a2d7bf98fb4b8ed5b01a169b484cc799727596ba57c788c7cf3fab2/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d7472616e736c6174696f6e2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-translation/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/9d7767cd995590864d15afd04255b71d5d66c28731e050a0bc8f369b7224fa66/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f66613434643265642d393962372d346662312d393961312d6134613962376163623938362f6d696e692e706e67)](https://insight.sensiolabs.com/projects/fa44d2ed-99b7-4fb1-99a1-a4a9b7acb986)[![Coverage Status](https://camo.githubusercontent.com/b715453d863bbf6b3db1fc0181a528fe6ff3fffccb94957338c72dfd29a2385b/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d7472616e736c6174696f6e2f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-translation?branch=master)--**ui**[![version](https://camo.githubusercontent.com/bdeb3dba93f169baa2e7eb1caf3ddebde523747fee0c32e359a0d6e76f3ec16d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d75692e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/bdeb3dba93f169baa2e7eb1caf3ddebde523747fee0c32e359a0d6e76f3ec16d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d75692e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/f26295c36db133017cd008af6f2b1e34b9c6c6c38aa5521a9d9f7eea3a0bb450/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d75692e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-ui)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/79e3eb16b5a3d55a3320b6cc6f0d16287c9eee06a4c5d8f3d8c39a140770d4c3/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d75692f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-ui/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/dbc93126feedf6cf35ed018588318fc13e03ac2c65620f55d186232ea71f0883/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f61643564313639392d303763632d343562352d396261342d3962336234356636373765302f6d696e692e706e67)](https://insight.sensiolabs.com/projects/ad5d1699-07cc-45b5-9ba4-9b3b45f677e0)[![Coverage Status](https://camo.githubusercontent.com/8f77d226cf0de6901c4a8b5038e900dfb4c0360ce424350959f2fdadef605e8f/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d75692f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-ui?branch=master)[PHPDoc](http://locomotivemtl.github.io/charcoal-ui/docs/master/)[ApiGen](http://locomotivemtl.github.io/charcoal-ui/apigen/master/)**view**[![version](https://camo.githubusercontent.com/d990260131e645e0673d8f080539eb290ee6871e5eb49dab42a37347deccb1fc/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d766965772e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)](https://camo.githubusercontent.com/d990260131e645e0673d8f080539eb290ee6871e5eb49dab42a37347deccb1fc/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f7461672f6c6f636f6d6f746976656d746c2f63686172636f616c2d766965772e7376673f7374796c653d666c6174266c6162656c3d72656c65617365)[![Build Status](https://camo.githubusercontent.com/ca225733998bc9c63d544f7e849f3c921307e400032d64f33ce9d3d0bc8062ca/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d766965772e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-view)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/5511c32cd8b3d9f2db32ab7a04cef45cf63807220d354686fc5ddb3ccbfc97e1/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d766965772f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-view/?branch=master)[![SensioLabsInsight](https://camo.githubusercontent.com/b5acbc0d86ae3d3fb674eca831b2c29ab7cb1c2a8cf92f67e43a1bec064c7504/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f33393664326630362d383262612d346337392d623863632d3736326631653862646132392f6d696e692e706e67)](https://insight.sensiolabs.com/projects/396d2f06-82ba-4c79-b8cc-762f1e8bda29)[![Coverage Status](https://camo.githubusercontent.com/4d50308d22c86ca7884d3a33c86f585a3f8a29fc873cc8604a85c272885884ea/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d766965772f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-view?branch=master)--What's inside this Boilerplate?
===============================

[](#whats-inside-this-boilerplate)

Like all Charcoal projects / modules, the main components are:

- **Autoloader**
    - Provided by Composer.
- **Config**
    - As JSON or PHP files in the [`config/`](config/) directory.
    - Use [`locomotivemtl/charcoal-config`](https://github.com/locomotivemtl/charcoal-config)
- **Front Controller**
    - See [`www/.htaccess`](www/.htaccess) and [`www/index.php`](www/index.php) for details.
    - Route dispatcher
- **Script Controller (Charoal Binary)**
    - Installed from `charcoal-app` as `vendor/bin/charcoal`.
- **PHP scripts**
    - PSR-1, PSR2 and PSR-4 compliant scripts are located in [`src/`](src/)
    - There are typically 3 types of controllers:
        - *Templates*
        - *Actions*
        - *Scripts*
    - ... 2 types of object
        - Objects based on *Content*
        - Objects based on *UserData*
    - ... and all other types of scripts (services, helpers, configs, factories, etc.)
- **Assets**
    - Assets are files required to be on the webserver root
    - Scripts, in `src/scripts/` and compiled in `www/assets/scripts/`
    - Styles , with Sass in `src/styles/` and compiled CSS in `www/assets/styles/`
    - Images, in `www/assets/images/`

Development
===========

[](#development)

To install the development environment:

```
★ composer install --prefer-source
```

To run the scripts (phplint, phpcs and phpunit):

```
★ composer test
```

API documentation
-----------------

[](#api-documentation)

- The auto-generated `phpDocumentor` API documentation is available at
- The auto-generated `apigen` API documentation is available at [https://codedoc.pub/locomotivemtl/charcoal-base/master/](https://codedoc.pub/locomotivemtl/charcoal-base/master/index.html)

Development dependencies
------------------------

[](#development-dependencies)

- `phpunit/phpunit`
- `squizlabs/php_codesniffer`
- `satooshi/php-coveralls`

Continuous Integration
----------------------

[](#continuous-integration)

ServiceBadgeDescription[Travis](https://travis-ci.org/locomotivemtl/charcoal-base)[![Build Status](https://camo.githubusercontent.com/0307536105288b8db6666b84eddaa97358812bb4cf1f6c21a8bb7845de335617/68747470733a2f2f7472617669732d63692e6f72672f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/locomotivemtl/charcoal-base)Runs code sniff check and unit tests. Auto-generates API documentation.[Scrutinizer](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-base/)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/df256dc68a003731e5e607d8f6ed7763efeab21615dbd9d7908ebd3b226e142b/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/locomotivemtl/charcoal-base/?branch=master)Code quality checker. Also validates API documentation quality.[Coveralls](https://coveralls.io/github/locomotivemtl/charcoal-base)[![Coverage Status](https://camo.githubusercontent.com/8e60e60f7187e31220844fa70fee395732d87be17c737d0e64dd569c71fad9d0/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6c6f636f6d6f746976656d746c2f63686172636f616c2d626173652f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/locomotivemtl/charcoal-base?branch=master)Unit Tests code coverage.[Sensiolabs](https://insight.sensiolabs.com/projects/533b5796-7e69-42a7-a046-71342146308a)[![SensioLabsInsight](https://camo.githubusercontent.com/02f12e4603d7eb24de690ebb6a7d977d2e501f7c5d7123ce9feb88ba8a075e17/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f35333362353739362d376536392d343261372d613034362d3731333432313436333038612f6d696e692e706e67)](https://insight.sensiolabs.com/projects/533b5796-7e69-42a7-a046-71342146308a)Another code quality checker, focused on PHP.Coding Style
------------

[](#coding-style)

The charcoal-base module follows the Charcoal coding-style:

- [*PSR-1*](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md)
- [*PSR-2*](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)
- [*PSR-4*](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md), autoloading is therefore provided by *Composer*.
- [*phpDocumentor*](http://phpdoc.org/) comments.
- Read the [phpcs.xml](phpcs.xml) file for all the details on code style.

> Coding style validation / enforcement can be performed with `composer phpcs`. An auto-fixer is also available with `composer phpcbf`.

Authors
=======

[](#authors)

- Mathieu Ducharme,
- Joel Alphonso,

Changelog
=========

[](#changelog)

*Unreleased*

###  Health Score

25

—

LowBetter than 35% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity8

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity52

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 61.8% 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 ~60 days

Total

4

Last Release

3379d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/cfb071c0ff7ce9500c528a003a2c53124248debc3e5bf367c17f89f5e6136125?d=identicon)[mducharme](/maintainers/mducharme)

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

---

Top Contributors

[![JoelAlphonso](https://avatars.githubusercontent.com/u/10762266?v=4)](https://github.com/JoelAlphonso "JoelAlphonso (21 commits)")[![BeneRoch](https://avatars.githubusercontent.com/u/3017380?v=4)](https://github.com/BeneRoch "BeneRoch (7 commits)")[![mducharme](https://avatars.githubusercontent.com/u/12157?v=4)](https://github.com/mducharme "mducharme (6 commits)")

---

Tags

boilerplatecharcoalproject

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/locomotivemtl-charcoal-city-boilerplate/health.svg)

```
[![Health](https://phpackages.com/badges/locomotivemtl-charcoal-city-boilerplate/health.svg)](https://phpackages.com/packages/locomotivemtl-charcoal-city-boilerplate)
```

###  Alternatives

[phpoffice/phpproject

PHPProject - Read, Create and Write Project Management documents in PHP

20718.3k](/packages/phpoffice-phpproject)[acacha/llum

Llum (light in catalan language) illuminates your Laravel projects.

10926.1k](/packages/acacha-llum)[markocupic/contao-bundle-creator-bundle

This bundle provides a bundle maker for Contao 4.\*. The extension will create a fully working backend- or/and frontend module after you have defined a few parameters in the contao backend.

224.9k](/packages/markocupic-contao-bundle-creator-bundle)

PHPackages © 2026

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