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

Larafirebase Laravel Package

kutia-software-company/larafirebase

Larafirebase is a Laravel package that makes it easy to send Firebase Cloud Messaging push notifications. It supports the FCM HTTP v1 API, topic and device-group messaging, and a fluent builder for composing notification payloads with data, sound, and custom options.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • larafirebase is a conventional Laravel package: a service provider, a facade, and a config file. It wraps Firebase Cloud Messaging (FCM) behind a fluent builder API, so it slots into Laravel's existing service-container and facade idioms rather than introducing a new abstraction.
  • Coupling is low — it is a leaf dependency that touches only the outbound notification path. It does not own models, migrations, or queue infrastructure, so it can be adopted or removed without structural changes to the host application.
  • Release 1.3.9 is a pure compatibility widening: the only changes are Laravel 11, 12, and 13 constraint additions in composer.json. No API surface, config keys, or payload semantics changed. This is the lowest-risk class of release.

Integration feasibility

  • Integration is a composer require, a config publish, and two environment variables (server key / credentials plus endpoint config). Realistically a half-day spike including a staging send test.
  • The work is concentrated in the adapter layer, not in domain code. The main design decision is whether to call the facade directly from services or wrap it behind an internal PushSender interface so the FCM dependency remains swappable.

Technical risk

  • Primary risk — protocol generation. The release notes address framework compatibility only and say nothing about FCM transport. The package has historically targeted the legacy FCM send endpoint authenticated by a server key. Google has retired the legacy FCM APIs in favour of the HTTP v1 API with OAuth2 service-account credentials. If 1.3.9 does not support HTTP v1, this package is a poor foundation for new work regardless of its Laravel version support. This must be confirmed before the compatibility win is treated as a green light.
  • Support-claim credibility. "Laravel 13 support" is a forward-looking constraint for a framework version not yet released as of this assessment. It is a permissive composer constraint, not validated compatibility, and should not be relied on in a commitment or roadmap.
  • Maintenance concentration. Four framework generations were absorbed into a single patch release (1.3.8 → 1.3.9), and the changes came from four different community contributors. That pattern suggests a low-cadence, PR-driven maintenance model with limited maintainer bandwidth, not a vendor-backed library.
  • Semantic versioning signal. Framework support arriving in a patch bump rather than a minor is acceptable here because nothing broke, but it does mean constraint changes are not a reliable proxy for "safe to adopt without reading the diff."

Key questions

  1. Does this package speak FCM HTTP v1 (OAuth2 service account), or does it still target the legacy server-key endpoint? If legacy, is there a migration path or a planned major?
  2. What PHP versions and illuminate/* constraints are actually declared in 1.3.9's composer.json, and do they intersect with our pinned PHP version?
  3. Is Laravel 13 support backed by CI against a dev branch, or is it an unconstrained ^13.0 allow-list with no test coverage?
  4. What is the maintainer's stated position on a v2 / HTTP v1 rewrite, and is there a maintained fork or alternative we would prefer?
  5. Which FCM features do we need — topics, conditions, data-only messages, batch multicast, token pruning — and does the current API cover them?

Integration Approach

Stack fit

  • Fits any Laravel application on the 8.x–12.x range; 1.3.9 is the first release that makes the package viable for teams already on Laravel 11 or 12 without a composer constraint override.
  • Requires PHP 8.x and Guzzle (transitively via Laravel's HTTP client in most versions). No database, queue, or filesystem assumptions. No conflict expected with typical Laravel stacks.
  • Not a fit for non-Laravel PHP services, and not a fit for anyone who needs first-class HTTP v1 credential handling if that is absent.

Migration path

  • From 1.3.8: effectively a no-op. Constraint widening only; no code changes, no config republish required, no data migration. A composer update plus a smoke test is sufficient.
  • From no package (greenfield): adopt behind an internal interface so the FCM client is replaceable. If HTTP v1 is unsupported, the cheaper path may be a thin in-house HTTP v1 client using Laravel's Http facade with a service-account token — roughly comparable effort to integrating this package and without the deprecation exposure.
  • Away from legacy credentials: if the package does support HTTP v1, plan a credential rotation window: provision the service account in Firebase, dual-run the old and new auth paths per environment, then retire the server key.

Compatibility

  • Verify the declared PHP constraint against our runtime and CI matrix.
  • Verify there is no conflict with any other package pinning illuminate/support or guzzlehttp/guzzle.
  • Confirm the facade alias registration does not collide with existing aliases.
  • Treat Laravel 13 as unverified; do not allow the constraint to drive a framework upgrade decision.

Sequencing

  1. Spike (1–2 days): install 1.3.9 in a scratch branch, send to a real device token in a sandbox Firebase project, and confirm which FCM API generation is on the wire. This single result gates everything downstream.
  2. Decision gate: HTTP v1 supported → proceed to adopt. Legacy-only → evaluate an in-house HTTP v1 client or a maintained alternative before investing further.
  3. Wrap and abstract: introduce an internal PushSender contract with the package as one implementation; wire it through the container.
  4. Staging hardening: exercise invalid tokens, expired credentials, FCM 4xx/5xx responses, and timeouts; confirm logging and alerting capture failures.
  5. Production rollout: enable per notification type behind a feature flag, starting with the lowest-stakes message class, then widen.
  6. Cleanup: document credential rotation, token lifecycle ownership, and the upgrade path if the package stalls.

Operational Impact

Maintenance

  • Low day-to-day maintenance — the package is dormant by design and the API surface is small. The real cost is periodic: framework upgrades arrive in community-driven batches, so we should budget an annual compatibility review rather than expect steady patch flow.
  • Because 1.3.9 absorbed four framework generations in one patch, we cannot infer future cadence from it. Assume the package may lag the next Laravel major by months and plan a fork-and-patch contingency.
  • The abstraction layer from the integration approach is the main maintenance hedge: it caps the blast radius of an abandoned package at one class.

Support

  • Community-only support via GitHub issues. No vendor, no SLA, no security-response commitment.
  • Two first-time contributors in this release is a positive health signal but also an indicator that the project runs on ad-hoc PRs rather than a funded maintainer.
  • Recommend recording an internal owner for the Firebase integration so the knowledge does not sit with whoever ran the spike.

Scaling

  • Sends are synchronous HTTP calls. At volume, wrap them in queued jobs with per-token or per-batch granularity so a slow FCM response does not sit in a request cycle.
  • FCM enforces per-project rate limits and device-token fan-out quotas. Multicast to large audiences should be chunked (FCM caps recipients per request); confirm whether the package handles chunking or whether we must.
  • Token storage and cleanup is our responsibility, not the package's — plan a table for tokens with last-seen and invalidated-at columns and a pruning job, or delivery success rates will silently decay.
  • Throughput ceiling is Firebase's, not the package's; the package adds no meaningful overhead.

Failure modes

  • Auth failure (401/403): most likely caused by a revoked or rotated server key, or by using legacy keys against an endpoint that no longer accepts them. Should surface as a distinct alertable error, not a swallowed exception.
  • Silent drop: the highest-impact failure for push is a send that returns 2xx at the HTTP layer but is rejected per-token. Instrument delivered/failed counts from the FCM response body, not from the HTTP status.
  • Invalid/expired tokens: expected continuously at a low rate. Requires a handler that marks tokens stale and stops retrying them; otherwise every send pays the cost of dead tokens.
  • Retry storms: naive retries against FCM 5xx amplify load during an outage. Use exponential backoff with a cap and a dead-letter path.
  • Configuration drift: config cached on deploy with stale env values is a classic Laravel failure here. Include a post-deploy send check in the smoke suite.
  • Package abandonment: the terminal failure mode. The mitigation is already stated — keep the FCM call behind an internal interface so replacement is a one-class change.

Ramp-up

  • Low. The API is a short fluent chain and the documentation is proportionate to the package's size. An engineer unfamiliar with FCM can ship a first notification in a day; the learning cost sits in Firebase project setup and service-account provisioning, not in the package.
  • The non-obvious knowledge to capture in the runbook: which FCM API generation we are on, how credentials rotate, how tokens are pruned, and what the delivery-rate dashboards mean.
  • Net position on 1.3.9: a genuine unblock for teams on Laravel 11/12, cheap to adopt, and worth doing — but the framework-compatibility win should not be read as evidence the transport layer is current. Resolve the HTTP v1 question before committing.
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.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings