PHPackages                             ysato/catalyst - 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. [Testing &amp; Quality](/categories/testing)
4. /
5. ysato/catalyst

ActiveLibrary[Testing &amp; Quality](/categories/testing)

ysato/catalyst
==============

An Artisan command package for Laravel to improve code quality and project structure.

2.5.3(8mo ago)1275↑114.3%[2 issues](https://github.com/ysato/Ysato.Catalyst/issues)MITPHPPHP ~8.2.27 || ~8.3.16 || ~8.4.3CI passing

Since Jun 11Pushed 4mo agoCompare

[ Source](https://github.com/ysato/Ysato.Catalyst)[ Packagist](https://packagist.org/packages/ysato/catalyst)[ Docs](https://github.com/ysato/Ysato.Catalyst)[ RSS](/packages/ysato-catalyst/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (22)Versions (39)Used By (0)

Ysato.Catalyst
==============

[](#ysatocatalyst)

A scaffolding tool to accelerate the setup of Laravel projects.

About This Package
------------------

[](#about-this-package)

This package generates the necessary file structure for initializing a Laravel project using a unified template system with enhanced extensibility.

**Important Note: This command will always overwrite existing files.**To prevent unintended changes, you are expected to carefully review the output with a tool like `git diff` after running the command, and then selectively commit only the changes you want to adopt.

The tool's role is to generate a diff based on the latest template; how that diff is handled is delegated to the user.

Installation
------------

[](#installation)

### Prerequisites (Strongly Recommended)

[](#prerequisites-strongly-recommended)

This package strongly recommends installing [just](https://github.com/casey/just), a command runner that simplifies Docker-based development workflows.

Please refer to the [installation guide](https://github.com/casey/just?tab=readme-ov-file#packages) for your platform. For example, on macOS with Homebrew:

```
brew install just
```

### Package Installation

[](#package-installation)

Run the following command to install:

```
composer require --dev ysato/catalyst
```

Usage
-----

[](#usage)

This command will prompt you for necessary information interactively when run without arguments. For automation, you can pass the information as arguments to run it non-interactively.

#### Interactive Execution

[](#interactive-execution)

If you run the command without any arguments, you will be prompted sequentially for the vendor name, package name, and PHP version.

```
php artisan catalyst:scaffold
```

#### Execution with Arguments (for Automation)

[](#execution-with-arguments-for-automation)

For use in CI/CD scripts, you can run the command non-interactively by passing arguments in the following format.

**Format:**

```
php artisan catalyst:scaffold
```

ArgumentDescription**``**`(Required)` The vendor name for namespacing (e.g., `Ysato`).**``**`(Required)` The package name that follows the vendor (e.g., `Catalyst`).**``**`(Required)` The PHP version to configure for the project (e.g., `8.3`).**Example:**

```
php artisan catalyst:scaffold MyVendor MyProject 8.3
```

#### Options

[](#options)

OptionDescription**`--with-ca-file`**`(Optional)` Path to a custom CA certificate file to trust within the container. Needed when behind a corporate proxy.**Example with Arguments and Options:**

```
php artisan catalyst:scaffold MyCorp WebApp 8.3 --with-ca-file=./certs/certificate.pem
```

Post-Setup Manual Steps
-----------------------

[](#post-setup-manual-steps)

### Initial QA Setup

[](#initial-qa-setup)

When running `just composer lints` for the first time on a newly scaffolded project, you may encounter errors due to existing code patterns. To resolve these, create baseline files for each QA tool:

#### PHP\_CodeSniffer Baseline

[](#php_codesniffer-baseline)

```
vendor/bin/phpcs --report=\\DR\\CodeSnifferBaseline\\Reports\\Baseline --report-file=phpcs.baseline.xml --basepath=.
```

#### PHPMD Baseline

[](#phpmd-baseline)

```
vendor/bin/phpmd app,src text ./phpmd.xml --generate-baseline
```

#### PHPStan Baseline

[](#phpstan-baseline)

```
vendor/bin/phpstan --generate-baseline
```

Add the generated baseline file to the includes in phpstan.neon:

```
includes:
    - vendor/larastan/larastan/extension.neon
    - vendor/nesbot/carbon/extension.neon
+    - phpstan-baseline.neon

...
```

#### Psalm Baseline

[](#psalm-baseline)

```
vendor/bin/psalm --set-baseline
```

### Laravel IDE Helper Setup

[](#laravel-ide-helper-setup)

For enhanced IDE support and autocompletion, run the [Laravel IDE Helper](https://github.com/barryvdh/laravel-ide-helper) commands:

```
php artisan ide-helper:generate
php artisan ide-helper:models -N
php artisan ide-helper:meta
```

### OpenAPI Validation in Feature Tests

[](#openapi-validation-in-feature-tests)

This package provides two types of OpenAPI validation capabilities for Feature tests:

Place your OpenAPI specification at the project root as `openapi.yaml`, or configure the path via `OPENAPI_SPEC_PATH` environment variable.

#### 1. Request/Response Validation (`ValidatesOpenApiSpec`)

[](#1-requestresponse-validation-validatesopenapispec)

Automatically validates that requests called from test cases and returned responses comply with the OpenAPI specification.

#### 2. Specification Coverage Verification (`Spectatable`)

[](#2-specification-coverage-verification-spectatable)

Verifies whether the specifications described in the OpenAPI specification are being called from tests.

```
composer spectate
```

This displays a report showing which endpoints and status codes have been tested:

```
+-------------+--------+-------------------------------------------+-------------+
| IMPLEMENTED | METHOD | ENDPOINT                                  | STATUS CODE |
+-------------+--------+-------------------------------------------+-------------+
| ✅          | GET    | /threads                                  | 200         |
| ✅          | POST   | /threads                                  | 201         |
| ✅          | POST   | /threads                                  | 422         |
| ✅          | POST   | /threads                                  | 401         |
| ✅          | GET    | /threads/{threadid}                       | 200         |
| ✅          | GET    | /threads/{threadid}                       | 404         |
| ❌          | PUT    | /threads/{threadid}                       | 204         |
| ❌          | PUT    | /threads/{threadid}                       | 401         |
| ❌          | PUT    | /threads/{threadid}                       | 403         |
| ❌          | PUT    | /threads/{threadid}                       | 404         |
| ❌          | PUT    | /threads/{threadid}                       | 422         |
| ❌          | DELETE | /threads/{threadid}                       | 204         |
| ❌          | DELETE | /threads/{threadid}                       | 401         |
| ❌          | DELETE | /threads/{threadid}                       | 403         |
| ❌          | DELETE | /threads/{threadid}                       | 404         |
| ❌          | POST   | /threads/{threadid}/scratches             | 201         |
| ❌          | POST   | /threads/{threadid}/scratches             | 401         |
| ❌          | POST   | /threads/{threadid}/scratches             | 403         |
| ❌          | POST   | /threads/{threadid}/scratches             | 404         |
| ❌          | POST   | /threads/{threadid}/scratches             | 422         |
| ❌          | PUT    | /threads/{threadid}/scratches/{scratchid} | 204         |
| ❌          | PUT    | /threads/{threadid}/scratches/{scratchid} | 401         |
| ❌          | PUT    | /threads/{threadid}/scratches/{scratchid} | 403         |
| ❌          | PUT    | /threads/{threadid}/scratches/{scratchid} | 404         |
| ❌          | PUT    | /threads/{threadid}/scratches/{scratchid} | 422         |
| ❌          | DELETE | /threads/{threadid}/scratches/{scratchid} | 204         |
| ❌          | DELETE | /threads/{threadid}/scratches/{scratchid} | 401         |
| ❌          | DELETE | /threads/{threadid}/scratches/{scratchid} | 403         |
| ❌          | DELETE | /threads/{threadid}/scratches/{scratchid} | 404         |
+-------------+--------+-------------------------------------------+-------------+

```

### Importing GitHub Rulesets

[](#importing-github-rulesets)

This project generates predefined GitHub rulesets as JSON files in the `.github/rulesets` directory. These must be manually applied to your repository.

#### Prerequisites

[](#prerequisites)

- You need **admin access** to the GitHub repository where you want to import these rulesets.

#### Importing via GitHub UI

[](#importing-via-github-ui)

1. Navigate to your repository on GitHub.
2. Click on **Settings**.
3. In the left sidebar, under the "Code and automation" section, click on **Rules**, then **Rulesets**.
4. Click the **"Import ruleset"** button.
5. When prompted to upload a JSON file, select a `.json` file from the `.github/rulesets/` directory.
6. Review the imported settings and click **"Create"**.
7. Repeat for other ruleset files as needed.

    **Note:** Carefully review the "Target branches" section for each ruleset after import to ensure they apply to the intended branches (e.g., `main`, `develop`).

Documentation
-------------

[](#documentation)

Detailed documentation is available on the [GitHub wiki](https://github.com/ysato/Ysato.Catalyst/wiki).

For Contributors
----------------

[](#for-contributors)

### Development Setup

[](#development-setup)

This project uses Docker for development. Use the provided `justfile` commands.

### Available Commands

[](#available-commands)

- `just build` - Builds the necessary Docker images
- `just composer` - Runs composer commands via Docker
- `just act` - Runs GitHub Actions locally
- `just clean` - Removes the Docker images
- `just help` - Displays this help message

### Compatibility Testing

[](#compatibility-testing)

To install the oldest compatible versions of dependencies and ensure this package works reliably in diverse environments, run the following command:

```
composer update --prefer-lowest
```

License
-------

[](#license)

This package is provided under the MIT License.

###  Health Score

39

—

LowBetter than 85% of packages

Maintenance52

Moderate activity, may be stable

Popularity16

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 100% 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 ~1 days

Total

38

Last Release

269d ago

Major Versions

1.0.2 → 2.0.02025-06-17

PHP version history (2 changes)1.0.0PHP ^8.2

2.4.5PHP ~8.2.27 || ~8.3.16 || ~8.4.3

### Community

Maintainers

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

---

Top Contributors

[![ysato](https://avatars.githubusercontent.com/u/56924527?v=4)](https://github.com/ysato "ysato (280 commits)")

---

Tags

laravelqa

### Embed Badge

![Health badge](/badges/ysato-catalyst/health.svg)

```
[![Health](https://phpackages.com/badges/ysato-catalyst/health.svg)](https://phpackages.com/packages/ysato-catalyst)
```

###  Alternatives

[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k43.5M5.2k](/packages/larastan-larastan)[laravel-zero/framework

The Laravel Zero Framework.

3371.4M368](/packages/laravel-zero-framework)[timacdonald/log-fake

A drop in fake logger for testing with the Laravel framework.

4235.9M54](/packages/timacdonald-log-fake)[spatie/laravel-health

Monitor the health of a Laravel application

85810.0M83](/packages/spatie-laravel-health)[wnx/laravel-stats

Get insights about your Laravel Project

1.8k1.8M7](/packages/wnx-laravel-stats)[acquia/orca

A tool for testing a company's software packages together in the context of a realistic, functioning, best practices Drupal build

32902.4k](/packages/acquia-orca)

PHPackages © 2026

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