zing/package-skeleton-laravel
zing/package-skeleton-laravel is a ready-to-use starting point for building Laravel packages. It provides sensible defaults, service provider scaffolding, configuration publishing, and test setup so you can skip boilerplate and focus on shipping your package.
Architecture fit. zingimmick/package-skeleton-laravel is not a runtime library — it is a Composer/Laravel package scaffolding template used at the inception of a new package repository. It shapes the project layout, composer.json constraints, static-analysis and formatting config, PHPUnit setup, and the GitHub Actions CI matrix. Architecture fit is therefore a governance/standards question, not a runtime one: adopting it means adopting its opinions about how Laravel packages should be structured and tested. 3.5.0 expands the supported matrix to Laravel 13, PHP 8.5, and PHPUnit 12, and realigns the orchestra/testbench constraint — i.e. it tracks upstream Laravel release cadence, which is the primary value proposition of a maintained skeleton.
Integration feasibility. Low technical effort, non-zero process effort. There is no code path to wire into our services; a team runs composer create-project (or clones/forked-remote) once per new package and then owns the generated code outright. The real integration work is template distribution and drift control: how teams obtain the skeleton, what version they pin, and how CI/config improvements from upstream reach packages that were generated months ago. The release itself contains no behavioural changes — every entry is either CI action bumps (setup-php, actions/checkout, ramsey/composer-install), a license year tick, or test-matrix support additions.
Technical risk. Moderate and concentrated in version skew rather than defects:
orchestra/testbench constraint change (PR #176) is the most consequential line item: testbench majors are coupled to Laravel majors, so a relaxed or shifted constraint can silently determine which Laravel versions a generated package can be tested against.Key questions.
Stack fit. Good for a PHP/Laravel organisation standardising package shape: it encodes Laravel-idiomatic conventions (Pint, PHPStan, PHPUnit, testbench, GitHub Actions) that would otherwise be re-litigated per package. It is a poor fit for teams not on GitHub Actions, or on teams with an existing internal package template — adopting both creates two competing gold paths.
Migration path. Do not retrofit. Existing packages stay as-is; the skeleton applies to new packages only, with CI/config improvements cherry-picked by hand where valuable. Concretely: fork or mirror at tag 3.5.0, add our org-level layer (LICENSE holder, CODEOWNERS, security policy, required workflows, PHP/Laravel constraint floors, internal namespace/author defaults), and publish that as the canonical entry point.
Compatibility. Validate generated output against our real matrix before rollout — at minimum, generate one throwaway package and confirm it installs and tests green on each Laravel/PHP combination we actually support. Treat the Laravel 13 / PHP 8.5 support as available, not default: pin the generated composer.json and CI matrix to our supported floor rather than inheriting upstream's maximum. Confirm the new orchestra/testbench constraint resolves cleanly alongside our locked Laravel versions.
Sequencing.
3.5.0 in the internal mirror; do not track 3.x floating.Maintenance. Ongoing cost is owning a thin fork: absorbing upstream diffs, resolving conflicts against our org layer, and periodically re-validating generated output. Upstream's dependabot volume means the diff is noisy but the semantic surface is small — expect a few hours per quarter, more when Laravel ships a major.
Support. Low. Failures surface at scaffold time in a developer's terminal, not in production. The support conversation is "which template version did you start from," so version-stamping generated repos (a TEMPLATE_VERSION marker or PR template note) is worth the small effort. Escalation path is the template owner, not an on-call rotation.
Scaling. Effectively free — usage is proportional to new-package count, not traffic or data volume. The scaling concern is organisational: divergence grows with the number of teams unless the template is the only sanctioned start path and is reviewed like any shared dependency.
Failure modes.
orchestra/testbench or PHPUnit constraint conflicting with our pinned test tooling.Ramp-up. Near-zero for any PHP developer — it is a create-project and a README. Budget roughly half a day for a developer's first pass through the org-specific conventions (namespace defaults, required workflows, constraint floors) and about a day for the template owner to produce and validate the internal layer. Document the "start from the template, not from an old package" rule explicitly; that single line prevents most of the failure modes above.
How can I help you explore Laravel packages today?