> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Laravel Package Skeleton — Official Package Starter Template

> An early investigation of laravel/package-skeleton, the official starter template with Pest, Larastan, Pint, Workbench, and GitHub Actions for Laravel package development.

<Info>
  This article is based on a source-code investigation. The repository was still under active development in July 2026.
</Info>

## What is Laravel Package Skeleton?

[Laravel Package Skeleton](https://github.com/laravel/package-skeleton) is a starter template for building Laravel packages.

```bash theme={null}
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.

```mermaid theme={null}
graph TD
    A["Use this template on GitHub"] --> B["composer install"]
    B --> C["configure.php runs automatically"]
    C --> D{"Interactive configuration"}
    D --> E["Package, vendor, and namespace"]
    D --> F["Select features"]
    E --> G["Configuration complete"]
    F --> G
    G --> H["Verify with composer test"]
```

## 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

| Tool                                                     | Purpose                                |
| -------------------------------------------------------- | -------------------------------------- |
| [Pest](https://pestphp.com/)                             | Test framework                         |
| [Larastan](https://github.com/larastan/larastan)         | Static analysis for Laravel            |
| [Pint](https://laravel.com/docs/pint)                    | Code formatting                        |
| [Orchestra Testbench](https://packages.tools/testbench/) | Package test environment               |
| Workbench                                                | Application for end-to-end development |

## Configurable package features

During `composer install`, select only the features the package needs. Scaffolding for unselected features is removed.

| Feature      | Description                 |
| ------------ | --------------------------- |
| Config file  | Adds a file under `config/` |
| Routes       | Adds a route file           |
| Views        | Adds Blade views            |
| Translations | Adds language files         |
| Migrations   | Adds migration files        |
| Assets       | Adds publishable assets     |
| Commands     | Adds an Artisan command     |
| Facade       | Adds a facade class         |
| Boost Skill  | Adds a skill for AI agents  |

## Configurable tooling

You can also enable or disable project tooling:

| Tool            | Description                                 |
| --------------- | ------------------------------------------- |
| Dependabot      | Automated dependency update pull requests   |
| Issue Template  | GitHub issue templates                      |
| Changelog       | Automatic `CHANGELOG.md` updates on release |
| Funding         | GitHub Sponsors link                        |
| Security Policy | Vulnerability reporting policy              |

## Setup workflow

<Steps>
  <Step title="Create a repository from the template">
    Select **Use this template** on GitHub or clone the repository directly.

    ```bash theme={null}
    git clone https://github.com/laravel/package-skeleton.git my-package
    cd my-package
    ```
  </Step>

  <Step title="Install dependencies">
    Running `composer install` starts `configure.php` automatically.

    ```bash theme={null}
    composer install
    ```

    To run the script manually, skip Composer scripts first.

    ```bash theme={null}
    composer install --no-scripts
    php configure.php
    ```
  </Step>

  <Step title="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.
  </Step>

  <Step title="Verify the package">
    ```bash theme={null}
    composer test
    ```

    This runs PHPStan, Pint, type coverage, and Pest in sequence.
  </Step>

  <Step title="Test end to end with Workbench">
    ```bash theme={null}
    composer serve
    ```

    A small Laravel application for testing the package starts at `http://localhost:8000`.
  </Step>
</Steps>

## Non-interactive mode

Use `--no-interaction` when configuring the package from CI or a script.

```bash theme={null}
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.

```yaml theme={null}
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.

| Label            | Category                    |
| ---------------- | --------------------------- |
| `breaking`       | Breaking changes            |
| `enhancement`    | Features                    |
| `bug`            | Bug fixes                   |
| `documentation`  | Documentation               |
| `dependencies`   | Dependencies                |
| `maintenance`    | Maintenance                 |
| `skip-changelog` | Excluded from the changelog |

## What configure.php does

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

```mermaid theme={null}
graph LR
    A["Run configure.php"] --> B["Replace vendor, package, and author placeholders"]
    B --> C["Remove unused feature files"]
    C --> D["Rename package README and AGENTS files"]
    D --> E["Link CLAUDE.md and .claude to agent files"]
    E --> F["Delete the configuration script"]
```

## 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](https://github.com/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.

<Card title="laravel/package-skeleton repository" icon="github" href="https://github.com/laravel/package-skeleton">
  View the source code and latest updates.
</Card>

<Card title="Official package development documentation" icon="book-open" href="https://laravel.com/docs/packages">
  Learn the fundamentals of Laravel package development.
</Card>
