spatie/ignition-contracts
Contracts for spatie/ignition that define interfaces for building custom error pages. Provides shared abstractions so solutions can integrate with Ignition’s error reporting and rendering workflow.
Solution, RunnableSolution, HasSolutionsForThrowable, SolutionRepository, SolutionProviderRepository) that let an error page render a suggested fix alongside a stack trace — "run this command," "set this env var," "publish this config." If DX is a differentiator, error-page remediation is a user-facing feature, and this contract is the seam to build against.SolutionProvider and register it with Ignition, versus writing a bespoke exception renderer, is a real build-vs-buy call. Adopting the contract is nearly free; reinventing it means owning discovery, rendering, and the safety of runnable actions yourself.RunnableSolution with a copy-paste or one-click fix. That's a legitimate roadmap item to size against support-ticket volume, not a nice-to-have.Consider it when:
Look elsewhere / do not adopt directly when:
composer require it explicitly. In nearly all cases it arrives transitively; a direct dependency is a smell that you're reaching one layer too low. Check composer why spatie/ignition-contracts first.Spatie\Ignition\Contracts — target that namespace and skip the standalone package.php artisan x" after the command was renamed) are worse than none and erode trust in the error page.For executives (one paragraph): This is a small, free, open-source interface package that Laravel's error page already pulls in. It doesn't add a feature by itself — it defines the standard way to attach an actionable fix ("run this command," "set this key") to an error. The opportunity is on our side: we can turn our most common setup and configuration failures into self-service fixes, reducing support load and shortening time-to-first-success for new customers. Cost to adopt is near zero; the real investment is writing and maintaining the fix content for our top failure modes, scoped and measured against current ticket volume. Risk is low but non-zero — it's a maintenance-mode dependency controlled by a third party, so we keep our usage thin, version-pin it, and treat the namespace as an adapter boundary.
For engineering (the operative version):
SolutionProvider (registered via SolutionProviderRepository / container binding) returning BaseSolution subclasses for our known failure modes; keep our own RemediationAdvice value objects internal and map to the Spatie interfaces at the boundary so a namespace move doesn't ripple.RunnableSolution only for genuinely safe, idempotent actions. An error page that can execute commands is a security boundary — gate it to local/dev or require explicit confirmation.Spatie\Ignition\Contracts, and a class can satisfy one interface and not the other, producing a silently non-rendering solution.Bottom line: Not a product decision on its own — a cheap, low-risk enabler for a DX bet. Approve a thin integration behind an adapter, budget for content maintenance, and judge it later on ticket deflection, not on the dependency itself.
How can I help you explore Laravel packages today?