Skip to main content
This article is based on a source-code investigation. The repository was still under active development in July 2026.

What is Laravel Package Skeleton?

Laravel Package Skeleton is a starter template for building Laravel packages.
git clone https://github.com/laravel/package-skeleton.git my-package
cd my-package
composer install
Running composer install automatically starts an interactive configuration script named configure.php. It asks for the package name, vendor, namespace, and required features, leaving the package ready for development.

Why use this skeleton?

Starting a Laravel package from scratch often means spending time on test setup, static analysis, formatting, and GitHub Actions before working on the package itself. Laravel Package Skeleton collects the Laravel team’s package-development practices in one template so you can begin with package logic instead of infrastructure.

Included tools

ToolPurpose
PestTest framework
LarastanStatic analysis for Laravel
PintCode formatting
Orchestra TestbenchPackage test environment
WorkbenchApplication for end-to-end development

Configurable package features

During composer install, select only the features the package needs. Scaffolding for unselected features is removed.
FeatureDescription
Config fileAdds a file under config/
RoutesAdds a route file
ViewsAdds Blade views
TranslationsAdds language files
MigrationsAdds migration files
AssetsAdds publishable assets
CommandsAdds an Artisan command
FacadeAdds a facade class
Boost SkillAdds a skill for AI agents

Configurable tooling

You can also enable or disable project tooling:
ToolDescription
DependabotAutomated dependency update pull requests
Issue TemplateGitHub issue templates
ChangelogAutomatic CHANGELOG.md updates on release
FundingGitHub Sponsors link
Security PolicyVulnerability reporting policy

Setup workflow

1

Create a repository from the template

Select Use this template on GitHub or clone the repository directly.
git clone https://github.com/laravel/package-skeleton.git my-package
cd my-package
2

Install dependencies

Running composer install starts configure.php automatically.
composer install
To run the script manually, skip Composer scripts first.
composer install --no-scripts
php configure.php
3

Answer the prompts

Configure the author name and email, vendor, package name and description, class name, enabled features, enabled tooling, and optional GitHub repository creation when the GitHub CLI is authenticated.
4

Verify the package

composer test
This runs PHPStan, Pint, type coverage, and Pest in sequence.
5

Test end to end with Workbench

composer serve
A small Laravel application for testing the package starts at http://localhost:8000.

Non-interactive mode

Use --no-interaction when configuring the package from CI or a script.
php configure.php --no-interaction --config --routes
When feature flags are supplied, only those features are included. Omitting all feature flags includes every feature.

GitHub Actions CI

The included tests.yml workflow runs a matrix across multiple PHP versions, Laravel versions, and operating systems.
matrix:
  os: [ubuntu-latest, windows-latest]
  php: [8.3, 8.4, 8.5]
  laravel: [12.*, 13.*]
  stability: [prefer-lowest, prefer-stable]
Each job runs:
  1. PHPStan with composer analyse
  2. Pint with composer lint:check
  3. Type coverage with composer test:types on Ubuntu
  4. Pest with composer test:unit on Ubuntu

Changelog automation

update-changelog.yml updates CHANGELOG.md when a GitHub Release is published. release.yml groups release notes by pull request label.
LabelCategory
breakingBreaking changes
enhancementFeatures
bugBug fixes
documentationDocumentation
dependenciesDependencies
maintenanceMaintenance
skip-changelogExcluded from the changelog

What configure.php does

configure.php is a one-time bootstrap script that removes itself after configuration.

GitHub configuration after installation

The README recommends reviewing Dependabot pull requests manually, creating the release-note labels listed above, and configuring protection for main. Changelog automation commits to CHANGELOG.md, so branch protection must permit the GitHub Actions workflow. No additional repository secrets are required because the workflows use the built-in GITHUB_TOKEN.

Development status

  • Repository: laravel/package-skeleton
  • Published: July 2026 and under active development
  • Caution: APIs and structure may change during early development
For a new Laravel package, this template provides a practical starting point based on the Laravel team’s established package-development conventions.

laravel/package-skeleton repository

View the source code and latest updates.

Official package development documentation

Learn the fundamentals of Laravel package development.
Last modified on July 13, 2026