Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Skeleton Laravel Package

mrshanebarron/skeleton

A Laravel package skeleton offering a clean starting point for building reusable packages, with standard structure, service provider setup, and sensible defaults for testing, configuration, and distribution.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Identity conflict — resolve first. The supplied sources describe two different products. The repository description metadata calls it a "Laravel UI component package"; the package's own description calls it a "lightweight Laravel package scaffold" — a Composer/PSR-4/service-provider boilerplate for bootstrapping new packages. These are not the same consumption model:

  • If it is a scaffold/boilerplate: it is a developer productivity artefact, consumed once at project inception, typically via composer create-project, git clone, or a template repository. It is not a runtime dependency, it does not ship to production, and its risk profile is entirely about developer workflow and internal standards.
  • If it is a UI component package: it is a runtime dependency with a public API surface (Blade components, view namespaces, asset publishing) and its risk profile is about upgrade churn and rendering breakage.

The published evidence — service provider with package discovery, publishable config, PSR-4 autoloading, "add your migrations/routes/views" — reads overwhelmingly as a scaffold. Treat that as the working assumption and validate before any adoption decision. Everything below is written for the scaffold case, with the runtime-library case flagged where it diverges.

Architecture fit

  • As a scaffold, it fits the standard Laravel package anatomy and imposes no runtime architecture on the host. The value is in the wiring it saves: Composer metadata, PSR-4 autoload, provider registration, config publishing, test harness.
  • Fit against our conventions is the real question, and it is unassessable from the supplied data. A generic scaffold is only useful to the extent it encodes our house style — package naming, CI config, static analysis, changelog format, Laravel version matrix. A zero-star upstream scaffold encodes none of that, so the delta between "fork it" and "write our own artisan generator" is small.
  • The sb- vendor prefix in v1.0.1 is a sound default for published config filenames and removes collision risk in host apps — but again, in a scaffold this is a convention we would adopt and then own.

Integration feasibility

  • Trivially feasible as a template, which is the honest framing: clone, strip, rename. Days, not weeks.
  • Not feasible as a composer require dev-dependency in any meaningful sense — you cannot "install" a scaffold and get value from it; the boilerplate has to become your code.
  • The v1.0.1 config-file rename is a maintainer's migration problem, not ours, unless we have already forked v1.0.0. If we have, see the migration ordering in the next section.

Technical risk (ranked)

  1. Supply-chain / continuity — 0 stars, single maintainer (mrshanebarron), v1.0.x, one patch release ever visible in the supplied data. There is no community, no downstream signal, no evidence of CI. Do not take a hard dependency of any kind; fork on day one if adopted at all.
  2. Release hygiene signal — a user-visible filename defect shipped in 1.0.0 and fixed in 1.0.1 signals no publish-path test. Expect further churn in the 1.0.x line; do not build automation that assumes filename or tag stability.
  3. Ambiguous product identity — see above. Adopting the wrong interpretation (runtime library vs scaffold) wastes the entire evaluation effort and pollutes production composer.json files.
  4. Silent config regression (only if consumed as a runtime package) — an orphaned unprefixed config file from v1.0.0 leaves config('sb-*.…') falling back to package defaults with no warning. Brownfield-only, and per-app blast radius if the config holds credentials or endpoints.
  5. Documentation thinness — the supplied corpus is a release note and a marketing paragraph. No API docs, no upgrade guide, no supported-versions matrix.

Key questions for the maintainer / package owner

  • Is this a scaffold or a runtime UI component library? Which artifact do we actually composer require or clone?
  • What is the supported Laravel/PHP version matrix, and is it declared and tested in CI?
  • Is there a create-project / template-repo path, and is the scaffold intended to be renamed in place or forked?
  • What is the old → new config filename mapping in v1.0.1, and are the config keys unchanged (filename rename only)?
  • Is there an UPGRADE.md and a stated release cadence / support window for 1.0.x?
  • What is the licence, and is it compatible with internal forking and redistribution across the org?
  • What is the upstream's intent for v2.0 — is this maintained, or a personal learning artefact?

Integration Approach

Stack fit

  • Composer + PSR-4 + a Laravel service provider is the exact shape of an internal Laravel package convention. Nothing exotic, nothing to explain to a reviewer.
  • The fit is generic, not specific: it is a reasonable default skeleton, not a match to our existing package standards. Plan to rewrite the CI, static-analysis, and changelog scaffolding regardless.
  • If it turns out to be a runtime UI library, stack fit weakens considerably: Blade component packages are tightly coupled to layout conventions, Tailwind/CSS build pipeline, and asset-publishing strategy — all of which we would need to reconcile with our design system.

Migration path

  • Preferred path — fork, don't depend. Vendor it into our own namespace (acme/laravel-package-skeleton or an internal artisan generator) on first use, add the CI and QA the upstream lacks, and pin to the fork. Upstream becomes reference material, not a dependency.
  • If we already consume v1.0.0 as a runtime package, treat the v1.0.1 bump as a three-step migration, not a composer update:
    1. Diff the published config against vendor/…/config/sb-*.php to confirm key parity.
    2. Publish the new prefixed file, port customisations, delete the old unprefixed file.
    3. php artisan config:clear → config:cache in the same deploy.
    • Estimated effort: under an hour per app, gated on the diff.
  • No data migration, no codemod, no DB changes either way.

Compatibility

  • Verify composer.json constraints against the oldest Laravel version in the estate before propagating the scaffold — scaffolds are often authored against the newest framework and quietly exclude your legacy services.
  • If multiple apps consume it, they are independent; no cross-app coordination required. The coordination cost is in keeping forks aligned, which argues for one internal fork, owned centrally, rather than per-team copies.

Sequencing

  1. Triage the identity question (blocking, no engineering time should be spent before this).
  2. Fork/template into the internal namespace; strip upstream naming and sb- prefixes to our convention.
  3. Add the missing quality gates — CI matrix across supported Laravel/PHP, composer validate, phpstan/psalm at a fixed level, a smoke test that boots the provider and asserts config resolves under config:cache.
  4. Pilot by generating one real internal package from it end-to-end; the scaffold's quality is only provable by the second consumer, not the first.
  5. Document the "publish config, commit it, diff on upgrade" runbook and the config-cache lifecycle as part of the template's README.
  6. Only then open it to the wider team; add a deploy-time assertion (expected config key present, non-default) to catch silent fallback permanently.

Recommendation: Do not adopt as a runtime dependency. Adopt as reference material and fork into an internal scaffold, if the identity question resolves to "scaffold" and if we do not already have an artisan package generator. If we do have one, the marginal value here is near zero — the upstream is ~200 lines of boilerplate we have already written. Either way, pin ^1.0.1 if any transitive consumption exists, and never ^1.0.

Operational Impact

Maintenance

  • As a forked scaffold, steady-state cost is low but non-zero: one internal repo, one owner, a quarterly review against new Laravel majors. That ownership is the point — it is a small, deliberate, one-time cost that replaces a recurring per-package boilerplate cost.
  • As a runtime dependency, maintenance cost is the opposite: every upstream 1.0.x bump requires reading a changelog and manually diffing config. With a 0-star, single-maintainer upstream, expect to be doing this indefinitely with no support contract.
  • Either way, we own the code the moment we copy it. The upstream is unlikely to be around in two years; plan for that from day one.

Support

  • First-line burden is low and concentrates in two failure modes: "the generated package's config isn't being read" (orphaned/unprefixed config file, or config:cache stale) and "the scaffold doesn't work on Laravel N" (stale version constraints in the fork).
  • Publish a one-page internal note covering the config-publish and config-cache lifecycle and the v1.0.1 rename trap, so on-call does not re-derive it. This is framework knowledge, not package knowledge — write it once, reference it everywhere.

Scaling

  • Package-level scaling is a non-issue; there is no runtime footprint to scale.
  • The scaling concern is organisational and quadratic in the wrong direction: each team that copies the scaffold independently creates a divergent fork. Ten teams, ten skeletons, ten CI configs. The correct scaling unit is one centrally-owned template plus a generator command, not N copies.
  • If a runtime UI library: scaling cost shifts to asset publishing and design-system reconciliation across every consuming app — budget accordingly, and expect to reject it if we already have a component library.

Failure modes

Mode Trigger Detection Blast radius
Divergent forks Teams copy the scaffold independently None — surfaces as inconsistent package conventions months later Org-wide convention drift
Upstream abandonment 0-star, single-maintainer project goes quiet No upstream activity; unnoticed until a Laravel major lands Fork-and-own cost already sunk
Silent config fallback Old unprefixed config file left after v1.0.1 bump None by default; only wrong behaviour Per-app, potentially auth/endpoint misconfiguration
Stale config cache config:cache not rebuilt post-deploy Behaviour differs between CLI and web Whole app
Framework-version skew Scaffold authored against newest Laravel only Generated package fails to boot on older services Per-service, caught at CI if matrix exists
Identity misadoption Scaffold required into composer.json as a library Immediately obvious, low cost Wasted evaluation effort

The absence of alerting on rows 1–3 is the real operational gap. A two-line boot assertion — expected config key present and non-default after config:cache — converts the silent failures into deploy-time failures, which is where they belong. For row 1, the mitigation is structural, not technical: one fork, one owner, published to the internal registry.

Ramp-up

  • A Laravel-fluent engineer is productive in under a day; the surface is a handful of stub files and a service provider.
  • The only training-worthy content is the config-publish/config-cache lifecycle and the fork-and-rename workflow — both framework-level knowledge, both covered by the one-pager above.
  • Do not invest in formal enablement or a dedicated rollout. Generate one package with it, write down what was awkward, and let adoption be pull-driven. If nobody asks for it after the pilot, the answer was that we did not need it.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator