Laravel Packages

Skeletor

Published
Skeletor image

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 value
if ($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.

Yannick Lyn Fatt photo

Staff Writer at Laravel News and Full stack web developer.

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
Securing Filament plugins with Plumb image

Securing Filament plugins with Plumb

Read article
LayaPHP: Self-Hosted Text Classification for PHP and Laravel image

LayaPHP: Self-Hosted Text Classification for PHP and Laravel

Read article
WhenMounted and BigInt Props in Inertia.js v3.8 image

WhenMounted and BigInt Props in Inertia.js v3.8

Read article
Postcodes for Laravel: GB Postcode Lookup and Geography Data image

Postcodes for Laravel: GB Postcode Lookup and Geography Data

Read article
Laravel 14 Adds a defaults() Method to Eloquent Models image

Laravel 14 Adds a defaults() Method to Eloquent Models

Read article
Laravel AI SDK and Laravel MCP Security Fixes: Update Now image

Laravel AI SDK and Laravel MCP Security Fixes: Update Now

Read article