noerd/notifications
Laravel package for adding notification features to PHP applications. It builds on Laravel's notification system to help you send, store, and manage user alerts, keeping notification logic organized and easy to integrate into existing models and workflows.
Architecture fit. This package is not a standalone library — it is a module that plugs into a host application (noerd/noerd) and conforms to that host's module contract. v0.1.2 moves the package from imperative to declarative registration: what the module contributes is now expressed through getConfigFiles(), publishModuleExtras(), and ensureModuleSetup() rather than being hardcoded in the command's handle(). Architecturally this is the right direction — the module declares intent and the core decides when and how to apply it, which removes a class of drift between install-time and update-time behavior. The trade-off is that the package's behavior is now defined largely by a third-party contract we do not own; our integration surface is the contract version, not the package's public API.
Integration feasibility. Feasible and low-ceremony for a Laravel shop: it is a Composer package, driven by Artisan install/update commands, and config is published through the standard Laravel publishing mechanism. The blocker to check before adoption is the tightened constraint on noerd/noerd (^0.16.35). The release notes state the previous range was open and "would have resolved to a core this package cannot run on" — meaning any environment that installed this package before v0.1.2 may be sitting on an unsupported core and is now Composer-unresolvable until the core is upgraded. That is a sequencing constraint, not a technical one, but it must be planned.
Technical risk.
^0.16.35) means our upgrade cadence for this package is bound to the core's release cadence. Pre-1.0 on both sides means the floor can move again without warning.ensureModuleSetup() now runs on every update, not just install. Any existing installation will receive setup entries it never had. If that setup is not strictly idempotent, the first update after this release is a data-mutating event in production.Key questions.
ensureModuleSetup() idempotent — does re-running it on an already-configured installation duplicate rows, re-write config, or re-trigger side effects?getConfigFiles()/publishModuleExtras() survive 0.17, 0.18?Stack fit. Standard Laravel/PHP: Composer for distribution, Artisan commands for lifecycle, Laravel's config publishing for artifacts. No new runtime dependencies, no queue/worker/infra implications. It fits a conventional Laravel deployment pipeline with no special accommodation.
Compatibility. Two hard prerequisites: PHP/Laravel versions acceptable to both this package and noerd/noerd 0.16.35+, and a core at or above 0.16.35. The second is the one likely to bite — audit composer.lock across all environments and confirm no environment is pinned below the floor. Because both packages are pre-1.0, pin exact versions in composer.json and upgrade deliberately; do not rely on caret ranges resolving safely across a moving contract.
Migration path. Treat this as a two-step deploy, not one:
noerd/noerd to ^0.16.35 and validate the host application independently of this package.Inverting the order will fail resolution and, if forced, will run new-contract code against a core that does not implement it. For existing installations, plan the first post-upgrade update as a supervised operation — snapshot the database and config directory first, since setup entries will be applied that were never applied at original install time.
Sequencing. Confirm core version → deploy to staging → run install and update twice to prove idempotency → diff published config against expectations → verify setup entries landed exactly once → production with rollback artifacts in hand. Budget for a re-run of the full validation on the next core bump, because the contract is not yet stable.
Maintenance. Ongoing maintenance is mostly version-tracking, not code. The package's behavior is delegated to the core's contract, so our exposure is the core's release notes. Assign an owner to watch noerd/noerd releases and re-validate on each minor bump. Pre-1.0 on both sides means we should expect the contract surface to change again; do not build internal tooling directly against getConfigFiles()/publishModuleExtras() signatures.
Support. Support burden is concentrated at upgrade time, not steady state. Anticipate two recurring tickets: "Composer will not resolve" (core below 0.16.35) and "update changed my configuration" (setup entries applied retroactively). Document the core-version prerequisite prominently in the internal runbook. Because this is a niche host ecosystem, upstream support depth is unknown — assume self-sufficiency and verify the source is inspectable before committing.
Scaling. Negligible horizontal scaling impact — config publishing and setup routines are deploy-time operations, not request-path work. The scaling concern here is environment count: every environment (dev, staging, multiple production nodes, ephemeral CI) must independently satisfy the core floor, and the update command must run consistently across all of them. In multi-node deployments, ensure the update command runs once per release, not per node, to avoid concurrent setup execution.
Failure modes.
update runs duplicate configuration or data; this is the highest-severity plausible failure and is unverified.Ramp-up. Low. Any Laravel developer can install and reason about published config and Artisan commands — measured in hours, not days. The genuine ramp-up cost is conceptual, not syntactic: the team needs to internalize that this package is a declarative module whose behavior is governed by an external contract, and that "run install" and "run update" now converge on the same setup routine. Build that into onboarding and the release checklist.
Recommendation. Adopt with conditions. Proceed to a staging evaluation on the current release, gated on confirming (a) ensureModuleSetup() idempotency, (b) a working core-version audit across all environments, and (c) a documented rollback for update-applied setup. Do not promote to production until the double-update idempotency test passes. Re-assess when either package reaches a stable minor or the contract surface changes again.
How can I help you explore Laravel packages today?