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

Catchable Bundle Laravel Package

forci/catchable-bundle

Symfony bundle for Forci Catchable that brings catchable exception handling to PHP applications. It integrates with Symfony’s error and exception workflow, helping centralize failure handling, reduce repetitive try/catch blocks, and keep controllers clean and consistent.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a Symfony bundle, not a Laravel package. Its lifecycle runs through Kernel::registerBundles(), a DependencyInjection\Extension, and Symfony's kernel.exception event — none of which execute under Laravel's service-provider bootstrapping or Illuminate\Foundation\Exceptions\Handler. For a TPM, this is a go/no-go signal before any roadmap discussion: the artifact cannot be adopted on our stack as shipped. What remains is a readable reference implementation of "capture unhandled exceptions close to where they are thrown" — a pattern, not a component.

Integration feasibility. Low. Any path to value is a port: extract the collector logic, rebuild it as a Laravel service provider plus a reportable()/renderable() hook or a custom exceptions log channel, and discard the Symfony scaffolding. That work is small in volume but not free, and the result is unverified code we now own. Composer-level resolution is a separate hazard — abandoned Symfony bundles typically pin Symfony 2.x/3.x components that conflict with the Symfony 6/7 constraints Laravel 10/11 require, so a dry-run composer require is likely to fail or drag in a conflicting graph.

Technical risk. High, and concentrated in governance:

  • License: NOASSERTION. No recognized grant to use, modify, or redistribute. This is a legal stop, not an engineering trade-off, and the repository is inactive enough that upstream clarification is unlikely.
  • Zero adoption. 0 stars, 0 dependents means no production validation, no reported-issue history, and no one watching for vulnerabilities in a code path that touches every request.
  • Unmaintained security surface. Exception collectors ingest stack traces, request payloads, and often credentials or PII — an unpatched dependency here is an unacceptable risk concentration.
  • No differentiated capability. Laravel's native report()/reportable() hooks and mature, MIT-licensed, heavily adopted SDKs (Sentry, Flare, Bugsnag) already cover this scope.

Key questions. (1) Is the bundle designation accurate, or does the repo ship Laravel auto-discovery via extra.laravel? (2) Is there a named maintainer and any licensing statement? (3) Does a dry-run composer require resolve against our current lockfile, and on which PHP version? (4) What does this provide that a ten-line reportable() hook or a Sentry integration does not? (5) If the answer to (4) is "nothing," is this assessment simply documentation of a rejection for the decision log?

TPM recommendation. Reject as a direct dependency. Route the underlying observability requirement to a maintained solution or a small owned implementation. The opportunity score and adoption signals are consistent with an abandoned or never-adopted artifact.

Integration Approach

Stack fit. Poor by construction. Our stack is Laravel with service-provider bootstrapping and PSR-4 autoloading; the package assumes a Symfony kernel, DI extensions, and bundle configuration trees. There is no configuration-only path between them. If the team wants the pattern, the correct target is a small internal package: a Laravel service provider, a queue-backed reporter or custom log channel, and a reportable() closure registered on the exception handler.

Migration path. Two viable routes, both short:

  1. Replace, don't port. Adopt a maintained reporter — sentry/sentry-laravel is the default recommendation given MIT licensing, broad dependent count, and active security response. Instrumentation is a provider registration plus a config publish, roughly an afternoon including staging verification.
  2. Build in-house if the requirement is genuinely narrow. If the need is "persist unhandled exceptions somewhere queryable," a handler override dispatching to a queued job writing to a dedicated table is ~100 lines, fully owned and testable. The catchable-bundle source can be read as a design reference, but should not be copied without license clarity.

Compatibility. Beyond the framework mismatch, verify PHP constraints and whether the code uses removed language features — abandoned bundles frequently rely on create_function, deprecated each(), or pre-7.4 string/array semantics. Even a vendored fork needs a modernization pass before running on PHP 8.2+.

Sequencing. Do not fund a sprint spike. Order of work: (1) confirm the licensing and framework question internally and close the item if NOASSERTION stands; (2) confirm the requirement with the on-call/observability stakeholder — is the gap missing exception visibility, or missing alerting and triage?; (3) evaluate the maintained alternative against that requirement; (4) only if the alternative fails a specific, documented constraint, scope the in-house build. Timebox the whole evaluation to days, not weeks, and record the outcome in the decision log so the question does not resurface next quarter.

Operational Impact

Maintenance. As a dependency: unacceptable — no upstream, no release cadence, no security response, and a license that prevents clean patching and redistribution. As a fork: we inherit full ownership of code we did not design, written in an idiom (Symfony DI) our Laravel team reads slowly. Either way, total cost of ownership exceeds the alternative, because the alternative is a managed SDK with a vendor behind it.

Support. No vendor, no maintainer, no issue backlog to consult. Incident debugging falls entirely to whichever engineer adopted it — an undocumented bus factor of one, with no escalation path.

Scaling. The likely implementation, writing collected exceptions to local files or a database, does not survive horizontal scaling. Across containers or autoscaled instances, file-based collection fragments on ephemeral filesystems and vanishes on redeploy. A database sink adds write contention on the failure path precisely when the system is already degraded. Production use requires a shared asynchronous sink — a queue plus a dedicated store — which is exactly what the maintained alternatives already ship.

Failure modes. These matter because the collector executes when the application is already unhealthy:

  • Recursive failure. The collector throws while collecting, masking the original exception or looping. Must degrade silently to the native handler.
  • Unbounded growth. Full traces and request bodies without size caps or retention can exhaust disk or tables during an incident storm.
  • PII/secret capture. Bodies, headers, and cookies land in storage; without scrubbing this creates a retention and privacy exposure that outlives the incident.
  • Synchronous I/O on the hot path. Blocking network or disk writes multiply latency during outages; collection must be queued or fire-and-forget.
  • Silent swallowing. A collector that catches and discards hides genuine regressions from existing alerting — the worst outcome, because it looks like improved stability.
  • Composer resolution drift. Pinned legacy Symfony constraints quietly freeze the platform's upgrade path.

Ramp-up. The code is readable in an hour; the cost is conceptual, not volume. Laravel engineers must context-switch into Symfony bundle conventions to review it, and that knowledge transfers to nothing else on the roadmap. Expect half a day to read plus a day to validate behavior under failure, with no upstream documentation to check the reading against. The alternative offers a vendor quickstart and a support channel.

Bottom line for planning. Treat this as a pattern to learn from, not a component to ship. Budget zero engineering days for integration and one day for a documented rejection, with the observability requirement routed to a maintained solution or a small owned implementation.

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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource