pds/skeleton
PDS standard defining a common filesystem skeleton for PHP packages. Specifies required root directories (src, tests, docs, config, bin, public, resources) and key root files (README, LICENSE, CHANGELOG, CONTRIBUTING), plus validation/generation tools.
Start by installing pds/skeleton as a dev dependency:
composer require --dev pds/skeleton
Then run the validator to check your existing project:
vendor/bin/pds-skeleton validate
Or generate a fresh compliant structure:
vendor/bin/pds-skeleton generate ./my-new-package
The validator also works on arbitrary paths: vendor/bin/pds-skeleton validate ./some-other-project.
First use case: as a foundation for new packages, ensuring consistent structure across your organization or open-source work.
generate once, then customize with your own namespace, autoloading (composer.json), and initial source code under src/.validate to audit your current layout. Adjust directory names or add missing files (e.g., CHANGELOG.md, CONTRIBUTING.md) to meet requirements.# .github/workflows/skeleton.yml
- run: vendor/bin/pds-skeleton validate
README.md, docs/api.md) into the docs/ directory; place API or usage docs under docs/api/ or similar.config/, not Config/). This matters on case-insensitive filesystems (e.g., macOS/Windows), but validation fails on case-sensitive ones (e.g., Linux) if mismatched.public/ and resources/ are optional; omit them if unused (e.g., pure library). Validation does not fail for their absence.CHANGELOG, LICENSE, and README, extensions are permitted (e.g., CHANGELOG.md, LICENSE.txt). The validator uses regex pattern (.*).vendor/—don’t try to validate or generate it.composer.json, PSR-4, PHPUnit, etc., yourself.0 = compliant, 1 = non-compliant (per 1.0.1). Useful for CI failsafes.How can I help you explore Laravel packages today?