Skeletor is an application skeleton scaffolding package created by Josh Manders. With this package you can use it to add additional functionality to anything you can setup with composer create-project
. It works well with Laravel, however, it isn’t exclusive to Laravel apps.
To install this package you use composer:
composer install --dev aniftyco/skeletor
From there you update the scripts
section of composer.json
:
"post-create-project-cmd": [ "NiftyCo\\Skeletor\\Runner::execute"],
And then create a Skeletorfile.php
in the root of your project with this:
<?php use NiftyCo\Skeletor\Skeletor; return function (Skeletor $skeletor) { // add the commands you would like to execute in your new application starter};
Skeletor offers various methods for gathering input, displaying information, executing file operations, and running commands—including find and replace within files. A few examples can be seen below:
// Display Messages and Alerts$skeletor->intro('Welcome to the App setup wizard!'); // Text Input with a default value$appName = $skeletor->text('Enter your App name:', 'laravel_news'); // Replace a string in a file// e.g. $skeletor->replaceInFile('search string', 'replace string', 'path/to/file.txt');$skeletor->replaceInFile('APP_NAME=Laravel', 'APP_NAME=' . $appName, '.env'); // Confirm a user choice with a default valueif ($skeletor->confirm('Do you want to install AcmeUIKit?', true) { // Process some tasks and display a spinner $skeletor->spin( message: 'Installing AcmeUIKit and dependencies', success: 'AcmeUIKit installed.', error: 'Failed to install AcmeUIKit and one or more of its dependencies.', callback: function () use ($skeletor) { $skeletor->exec(['npm', 'install', '@acme/ui']); } );} $skeletor->outro('Your application setup is complete!');
With this in place, you can publish your skeleton to Packagist. When you run composer create-project
with a Skeletor application skeleton, it automatically hooks into the post-create-project-cmd
event and runs the setup commands defined in Skeletorfile.php
.
As an example, Josh has already created a Laravel starter template that you can use which mimics his own personal preferences when starting a new Laravel app.
composer create-project starter/laravel my-new-app
If you need more control over your application setup, Skeletor makes customization easy. Whether you’re integrating a UI component library with a default layout, configuring Inertia with React or Vue.js, adding your database credentials to the .env
file or automating other setup tasks, you can script these steps once and apply them to every new project—saving time and effort.
To learn more about Skeletor you can view the source code and documentation on Github.