dejwcake/craftable
Craftable is an admin panel and CRUD generator for Laravel that scaffolds management screens, forms, and data tables with authentication and permissions built in, so you can ship back-office tools without repetitive boilerplate.
Architecture fit
This package sits directly on top of spatie/laravel-permission and exposes that package's Role / Permission contracts as its authorization surface. Its architecture is therefore derivative: most of the meaningful behaviour — role resolution, guard/team scoping, permission caching — is owned upstream, and this package contributes orchestration plus (per the release notes) alignment with dejwcake/admin-auth. The lockstep version alignment with dejwcake/admin-auth 2.1.0 is the single most important architectural fact here: these two packages are co-released and must be treated as a versioned bundle, not independently versioned dependencies. Any integration plan that upgrades one without the other is unsound.
Integration feasibility Low-to-moderate effort. The release notes explicitly state no code changes in this package, so the work is almost entirely:
spatie/laravel-permission from ^7.4 to ^8.3.Role / Permission contract implementations so findByName() / findOrCreate() accept BackedEnum|string.Apps that use the stock Spatie models and never implement the contracts will likely see a near-mechanical upgrade. Apps with custom models, enum-backed roles, or multi-guard/teams configuration carry the real effort.
Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Transitive major bump (Spatie v7 → v8) | High | Semver-major on the package that owns all authorization semantics; not confined to this repo |
Custom Role/Permission contract implementations |
Medium–High | Signature change is a hard fatal (type error / LSP violation), not a deprecation |
Co-dependency on dejwcake/admin-auth 2.1.0 |
Medium | Partial upgrade leaves the app in a state neither package supports |
Third-party packages still pinning Spatie ^7 |
Medium | Composer hard-conflict; must be audited before the bump |
| Behavior changes inherited from Spatie v8 | Unknown | Not enumerated in these notes; must be read from the upstream guide |
| Dev files removed from dist archives | Low | Only matters if anything references vendored tests/QA config |
Note the risk is asymmetric: this package is well-tested and unchanged, so the risk is not in its diff — it is in everything the diff drags along.
Key questions
Role / Permission contracts itself, or extend Spatie's models? (Determines whether this is a 1-hour or 1-sprint change.)spatie/laravel-permission constraint, and do any still cap at ^7?BackedEnum support already relied upon, or newly available?dejwcake/admin-auth currently pinned at 2.0.x, and is its 2.1.0 upgrade independently safe?Stack fit Fits a standard Laravel authorization stack with no architectural adaptation required — the package's job is unchanged; only its dependency floor moves. The material fit consideration is fleet fit: if multiple apps share this package, they should be upgraded as a cohort so the Spatie major version doesn't diverge across environments.
Migration path
composer why-not spatie/laravel-permission ^8.3 to enumerate blockers before touching anything.dejwcake/admin-auth to 2.1.0 and this package to 2.1.0 in the same commit, then resolve Spatie to ^8.3.findByName() / findOrCreate() signatures to BackedEnum|string (accepting a union is backward compatible; narrowing is not).config/permission.php, guard/team settings, cache store).Compatibility
Two compatibility axes must be satisfied simultaneously: (a) PHP/Laravel version support in Spatie v8.3, and (b) the transitive constraint graph — every installed package declaring a spatie/laravel-permission requirement must accept ^8.3. Axis (b) is the more likely source of surprise and should be checked first, since a conflict there invalidates the whole plan.
Sequencing
Maintenance
The release is predominantly hygiene: PHPMD 3 with a checked-in phpmd.yml, coverage reporting on the pgsql CI job, MariaDB 12.3 in compose and CI, and AGENTS.md / CLAUDE.md for AI-assisted contribution. That is a positive maintainability signal — static analysis is enforced rather than aspirational, and the DB matrix is current. The countervailing cost is inherited churn: by binding tightly to Spatie's major line, this package converts upstream majors into our maintenance events. Budget for a Spatie-major upgrade roughly annually, and expect the two packages to move together.
Support
Because this release contains no code changes, defects here will overwhelmingly be upstream defects. Support routing should point at Spatie's issue tracker first, and the team should be explicit that this package cannot patch around an upstream v8 regression. The dist-archive slimming is a modest support win: fewer files in vendor/ means cleaner dependency audits and less noise in licence/SBOM scans. Keep the upstream v8 upgrade guide linked from the internal runbook — the contract signature change is exactly the kind of thing that gets rediscovered painfully six months later.
Scaling No runtime, query, or caching changes are claimed, so the release should be scaling-neutral. The one thing to confirm rather than assume is that v8.3 does not change permission cache structure or invalidation — permission caching is the load-bearing element in any high-traffic authorization path, and a silent change there would show up as either stale authorizations or a database hit on every check. Validate under realistic concurrency in staging, not just functionally.
Failure modes
Role/Permission implementations that weren't widened — surfaces at role lookup, i.e. on authenticated requests, which means a broad blast radius.^7 — fails loudly at build time; low severity, high annoyance.admin-auth at 2.0.x, or vice versa. Avoid by upgrading atomically.Ramp-up
For a team consuming the package with stock models: minimal — a few hours, mostly dependency resolution and test verification. For a team with custom contract implementations or a broad multi-package authorization surface: plan a day or two including staging validation, and assign someone who already understands the role/permission model rather than treating this as a routine version bump. The release notes are unusually clear about the one real code-level requirement (the BackedEnum|string signature), which meaningfully shortens discovery time — use them as the checklist.
Recommendation: Adopt 2.1.0, upgrading in lockstep with dejwcake/admin-auth 2.1.0, gated on the dependency-conflict audit and on confirming no first-party contract implementations remain on the old signatures. Treat the Spatie v8 move as the actual work item; this package's own change surface is effectively zero.
How can I help you explore Laravel packages today?