starnerz/laravel-daraja
Laravel Daraja wraps all seventeen Safaricom M-Pesa Daraja APIs in ordinary Laravel code: STK Push, C2B, B2C, B2B, Dynamic QR, Ratiba, Bill Manager, typed responses, cached tokens, and testable callbacks. PHP 8.3+, Laravel 12/13.
[email protected] address and publishes SECURITY.md as the single authority, with README and CONTRIBUTING.md aligned. For a package sitting in your payment path, that is a concrete, checkable signal about how disclosed vulnerabilities get handled — useful evidence for a security review or vendor questionnaire.laraveldaraja.com with redirects from the old GitHub Pages URLs. If you have internal runbooks or onboarding docs pointing at the old links, they still work, so no cleanup sprint is required — but new documentation should cite the new domain.Adopt it when all of the following hold:
Look elsewhere — or plan to build on top — when:
SECURITY.md and a role-based inbox are good hygiene, not a contract.Migration note: upgrading from v5.1.0 is low-risk. Nothing in the package's behavior changed in v5.2.0 — the Guzzle constraint widened from ^7.8 to ^7.8 || ^8.0. Treat it as a compatibility release, not a feature release, and do not let it absorb a planning slot.
For executives: This is a free, open-source Laravel integration for Safaricom's M-Pesa API. The latest release is a compatibility and housekeeping update — it lets the package run on the newer Guzzle HTTP client, which removes a blocker for teams upgrading their Laravel stack, and it moves security reporting to a company-wide address with a published policy. There are no breaking changes and no new features. The strategic value is speed-to-market in Kenya: it turns M-Pesa from a bespoke integration project into a bounded configuration task. The caveats worth stating plainly are that it does not provide M-Pesa access — Safaricom onboarding remains on the critical path — and that it is community-maintained, so we own the operational risk on the payment path.
For engineering: v5.2.0 widens the Guzzle requirement to ^7.8 || ^8.0. Package code is unchanged; this only relaxes what Composer will accept, so apps on Guzzle 7 need to do nothing and apps on Guzzle 8 can now install. CI covers both — Laravel 12 with Guzzle 7 and Laravel 13 with Guzzle 8, on PHP 8.3 and 8.4 — so the compatibility claim is tested, not asserted. Security reports now go to [email protected], with SECURITY.md as the authoritative source and README/CONTRIBUTING aligned to it. Docs moved to laraveldaraja.com; old starnerz.github.io/daraja-docs/ links redirect, so no bookmark or runbook cleanup is urgent, but update internal references opportunistically. Before adopting, validate the wrapped API surface against our specific flows (STK Push, C2B, B2C, status, reversal) and confirm our idempotency, callback verification, and reconciliation layers sit outside the package, because they do. Pin the version and budget for the possibility that a small maintainer team goes quiet.
How can I help you explore Laravel packages today?