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-digital-agency/larafirebase

Larafirebase is a Laravel package for sending Firebase Cloud Messaging push notifications via a simple API. Target devices, topics, or conditions with notification and data payloads, making Firebase integration in Laravel quick and clean.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit larafirebase is a thin transport adapter: a Laravel service provider, a facade, and a small sender class that authenticates against Google/Firebase and posts message payloads to Firebase Cloud Messaging (HTTP v1). It is not a first-class Laravel Notification channel — consumers call the facade directly from their own code (or wrap it in a custom channel). That makes it an edge dependency: it sits at the boundary of the domain, has no database or state footprint, and touches nothing in the request lifecycle unless invoked. Architecturally that is a low-blast-radius fit for any Laravel app that already depends on FCM as an external service; the package does not dictate application structure. The trade-off is that it also provides very little: no queue integration, no retry/backoff policy, no token lifecycle management, no batching. Those become our responsibility, and should be designed as our own thin wrapper rather than as direct facade calls scattered through the codebase.

Integration feasibility Low effort. The integration shape is: composer require, publish the config, drop a service-account JSON into a path referenced by env, and call the facade. The only historic blocker for teams on modern Laravel was version constraint support, and this release is precisely that fix — 1.3.9 widens compatibility to Laravel 11.x, 12, and (nominally) 13, following an earlier path to 11.x. For a team currently pinned to Laravel 10 with this package, 1.3.9 is the enabling change for a framework upgrade; for a team already on 11/12 and blocked by a composer conflict, this unblocks immediately. Nothing in the changelog suggests config key changes, facade signature changes, or namespace moves, so the expected integration delta is a constraint widening and nothing more.

Technical risk

  • Semver discipline is the main concern. 1.3.9 is a patch release, yet it widens supported framework majors across four versions (11, 12, 13). Widening a dependency constraint changes the resolution graph for every consumer, which is normally a minor bump (1.4.0). Anyone on a floating ^1.3 constraint will silently pick up four new, presumably less-tested combinations. Recommend pinning exact and upgrading deliberately.
  • Unverified compatibility matrix. Four community PRs merged into one patch strongly implies the maintainers did not author these changes. We must confirm CI actually runs against Laravel 11, 12, and 13 — if the constraint was widened without a matrix, "compatibility" is a composer.json assertion, not a tested fact.
  • "Laravel 13 support" is speculative. Laravel 13 has not shipped as a stable release. A constraint of ^13.0 added now is a forward-looking guess; it also means PHP floor requirements (illuminate/*, PHP 8.2+ for Laravel 11) need re-verification, and that the package may claim support for APIs that will change before 13 ships.
  • Bus factor / maintenance health. The release being driven by first-time contributors (@laravel-shift, @anggerpputro) for something as routine as framework support suggests the maintainers are not actively tracking Laravel releases. That is a forward-looking risk: expect the same lag at Laravel 14.
  • Credential handling. The package expects a Firebase service-account JSON on disk. That is a long-lived private key in the application filesystem; it needs secrets-manager injection, strict file permissions, and rotation policy. This is a package-agnostic risk but is materialized by adopting the package.
  • No stated breaking changes, so upgrade risk from 1.3.8 is effectively zero — the risk is concentrated in new adopters on the newly-claimed frameworks.

Key questions

  1. Does the repo's CI matrix actually execute the test suite against Laravel 11, 12, and 13, and against the minimum supported PHP?
  2. What exactly does the new composer.json constrain — illuminate/support, illuminate/console, guzzlehttp/guzzle, google/auth? Are the disjunctions correct and are the PHP floors aligned (Laravel 11 requires PHP 8.2)? Is the Laravel 13 entry a wildcard guess?
  3. Does the package target FCM HTTP v1, or the deprecated legacy server-key endpoint? If legacy, that is a functional dead end regardless of Laravel version.
  4. What is the package's actual release cadence and issue-response time over the last 12 months? How many open issues/PRs are unaddressed?
  5. Who owns this dependency internally, and is there a documented fallback (kreait/laravel-firebase, or a ~50-line direct HTTP client)?
  6. Are there tests covering the send path with a mocked HTTP client, or is the suite limited to config/service-provider wiring?

Integration Approach

Stack fit Fits cleanly into a standard Laravel app (service provider + auto-discovery + published config). Verify that auto-discovery still resolves under Laravel 11's slim bootstrap/app.php skeleton — packages that registered bindings in a custom Kernel or relied on removed container aliases will break. Also confirm the package does not depend on the removed $defer property or other pre-11 service-provider conventions.

Migration path composer require kutia-software-company/larafirebase:1.3.9 (exact pin), publish config, wire the service-account path via env/secret, and — for existing consumers — run composer update on that single package and re-run the test suite. No code changes are anticipated from the changelog. For teams using this as a stepping stone to a Laravel 11/12 upgrade, sequence it as: framework upgrade branch → resolve package constraints → adopt 1.3.9.

Compatibility Check four things before merging: (a) transitive constraints on google/auth and guzzlehttp/guzzle resolve without conflict; (b) PHP floor matches Laravel 11's 8.2 requirement; (c) the Laravel 13 constraint does not create an unresolvable platform requirement now; (d) the service provider boots on the oldest and newest target versions. Run composer why-not in the target application rather than reasoning from the changelog.

Sequencing

  1. Verify, don't trust — read composer.json and the CI config at the 1.3.9 tag. Confirm the matrix before treating compatibility as established.
  2. Branch spike — install on a scratch branch at the target Laravel version; boot the app; assert the facade resolves and config publishes.
  3. Contract test — one integration test that stubs the HTTP layer and asserts the outgoing payload shape (title/body/image/data/token) and the auth header path. This is the test that catches future silent breakage from community PRs.
  4. Security review — service-account JSON injection path, permissions, rotation, and non-committal of the key to VCS.
  5. Wrap it — introduce an internal PushNotifier interface with a Larafirebase implementation. All call sites depend on the interface, not the package facade.
  6. Adopt and pin — exact version in composer.json, upgrade tickets for future majors, documented owner.

Operational Impact

Maintenance Small footprint (a service provider, a facade, one sender class, a config file), so maintenance cost is mostly dependency maintenance, not code maintenance. The real cost is the lag pattern: this release covers four framework majors at once, which implies the package goes unattended between Laravel releases. Budget a recurring task on each Laravel major upgrade to check whether this package has followed, and treat "not yet supported" as a plan-for item rather than a surprise. Pinning exact versions is essential given the patch-level constraint widening.

Support Community-maintained, no vendor, no SLA. Internal support burden falls on whoever owns the wrapper — which is why the interface indirection matters: when the package stalls or a maintainer disappears, swapping to kreait/laravel-firebase or a direct HTTP v1 client is a one-class change behind our own interface, not a codebase-wide refactor.

Scaling The package sends synchronously — one blocking outbound HTTPS call per message. At any meaningful volume this must be moved behind a queue worker with concurrency limits, and bulk sends must be chunked to respect FCM's per-project quotas and rate limits. Watch for: connection pooling/reuse, worker timeouts shorter than the HTTP timeout, and per-token throughput. Because the package offers no batching primitive, throughput is a function of our worker pool, not the package.

Failure modes

  • Auth: expired or revoked service account, deleted key, clock skew breaking JWT signing, missing OAuth scope — all surface as opaque 401/403s at send time, not at boot.
  • Token hygiene: UNREGISTERED / INVALID_ARGUMENT responses for stale device tokens; without pruning, failure rates climb monotonically. Need a feedback loop from response codes back to our token store.
  • Payload: >4KB payloads rejected; malformed topic conditions silently fail.
  • Transport: FCM 429/5xx; retry with exponential backoff and jitter, and do not retry non-idempotent sends blindly — FCM has no dedupe key, so naive retries can double-deliver.
  • Partial success: HTTP v1 returns per-message errors in the response body; a 200 does not mean delivered. The wrapper must inspect the response payload, not just the status code.
  • Config drift: missing/misnamed config key results in a null credential path and a confusing runtime error rather than a fail-fast at boot — add a startup validation.

Ramp-up Roughly half a day to a day for a Laravel-competent engineer to integrate and validate, with the learning concentrated in FCM HTTP v1 authentication and payload semantics rather than in the package itself. Add time for the security review of credential handling and for building the queue/retry wrapper, which is where the actual engineering lives. Document the config keys, the credential rotation procedure, and the response-code → token-pruning mapping; those three artifacts are what keeps this dependency cheap over time.

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.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log