moonshine/contracts
Core contracts and interfaces for MoonShine, the Laravel admin panel. This package defines shared abstractions used across MoonShine components, helping developers build consistent, extensible admin panels and integrate custom resources, fields, and actions.
Architecture fit. MoonShine is a Laravel admin panel / CRUD scaffolding ecosystem, and moonshine-software/contracts is the interface layer that the rest of the monorepo (core, fields, decorators) depends on. For a team already standardized on Laravel, this is a well-aligned fit: it plugs into the existing service-provider/config/policy conventions rather than introducing a parallel framework. For teams not on Laravel, it is effectively a non-starter. The package itself is low-level — it defines contracts, not behavior — so its architectural weight is small, but its blast radius is high because core packages compile against it.
Integration feasibility. Technically straightforward: Composer install, publish config, register the service provider. The real integration cost sits in the surrounding MoonShine stack (auth, resources, fields), not in contracts itself. Version 4.18.1 is a patch-level release with no documented API surface changes, so a like-for-like swap should be low-risk for a team already on the 4.14+ line.
Technical risk. The release notes are effectively a pointer to the monorepo changelog and a compare link — there is no human-readable changelog in the artifact we received. That is the primary risk: we cannot confirm from the release note alone that the contract diff between 4.14.0 and 4.18.1 is non-breaking. Given the minor/patch versioning (4.14 → 4.18), SemVer would suggest backward compatibility, but the package is a contracts package, where an added method to an interface is technically a breaking change for downstream implementers even in a patch release. Risk is low but unverified.
Key questions.
contracts version-locked by the core MoonShine package, or can it drift independently? If locked, the upgrade is atomic with core.Stack fit. Requires Laravel (and by implication PHP 8.x). No front-end integration surface beyond what MoonShine core already manages. It is a library dependency, not an application-layer choice, so the "decision" is really about adopting MoonShine core; contracts follows transitively.
Migration path. Because there is no prior assessment and no evidence this package is currently in the stack, treat this as a greenfield evaluation rather than a migration. If already on MoonShine 4.14.x, the path is: bump contracts alongside core in the same PR, run the full test suite, and verify any custom resource/field classes that implements MoonShine interfaces still satisfy the contract.
Compatibility. Confirm PHP and Laravel constraints in composer.json before bumping — the release note does not state them. Check that moonshine/moonshine and moonshine-software/contracts resolve to a mutually compatible set; do not bump contracts in isolation if core pins it.
Sequencing.
implements against MoonShine contracts to inventory custom implementations.Maintenance. Low ongoing burden — it is a dependency, not infrastructure. The maintenance cost is tied to tracking the MoonShine monorepo release cadence, which appears frequent (4.14 → 4.18 within the observed window). Budget for routine dependency bumps each sprint.
Support. Upstream is a commercially-backed open-source project with documentation and a community channel; there is no vendor SLA unless a support plan is purchased. Internal support burden is limited to knowing who owns MoonShine customization in the codebase.
Scaling. Negligible runtime impact — interfaces impose no overhead. Scaling concerns live in MoonShine core and the underlying database, not here.
Failure modes.
contracts without core (or vice versa) yields hard-to-diagnose type errors — mitigate by pinning the pair and upgrading atomically.Ramp-up. Minimal for a Laravel-fluent engineer (hours to read the contracts and conventions). The real ramp-up is MoonShine core concepts (resources, fields, policies), measured in days, not weeks.
How can I help you explore Laravel packages today?