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

Microsoftgraph Laravel Package

lloadout/microsoftgraph

Laravel package for integrating the Microsoft Graph API. Connect your app to Microsoft 365 to work with Outlook mail, calendars, OneDrive files, Teams, and Azure AD users through a fluent interface.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a thin Laravel service-provider layer over Microsoft Graph, exposing two integration surfaces: a mail transport (MicrosoftGraphTransport) and a Flysystem-backed onedrive storage disk (OnedriveAdapter). That is architecturally attractive for teams already standardised on Laravel's Mail and Storage facades — adoption is configuration-level, not code-level, and it avoids bespoke Graph SDK wiring. The v1.21 changes do not alter this shape; they harden it. The Storage::extend() closure rebinding fix on Laravel 13 is a genuine framework-compatibility correction rather than a feature, and the move to explicit provider capture removes a class of container-resolution bugs that would otherwise surface only in long-running workers or Octane.

Integration feasibility. High for Laravel 10/11/12 estates already on PHP 8.2+. The package is installable via Composer with no native extensions, no sidecar service, and no queue infrastructure required. The gating factor is not the package but Azure AD: an app registration, Mail.Send (application or delegated) and Files.ReadWrite.All scopes, and tenant admin consent. That is a procurement/identity-workstream task, not an engineering one, and it typically dominates the timeline.

Technical risk.

  • PHP 8.2 floor is a hard cutoff. Any application or CI image still on 8.1 cannot take v1.21. This is presented as a minor release, which is semver-questionable from a consumer's perspective; treat it as effectively breaking for 8.1 estates.
  • read() now throws UnableToReadFile instead of returning false. This is a behavioural break for any caller doing falsy checks on the adapter's return value. Flysystem 3 conformance is the right call, but existing code paths that swallowed failures will now surface exceptions — desirable in production, disruptive in tests.
  • Laravel 13 support implies a pre-GA or newly-GA framework target. Confirm the framework's release status and whether the package's illuminate/* constraints permit stable resolution or require --dev stability flags.
  • Maintainer concentration. Single-vendor, small-team package sitting directly on the credential path for mail and file storage. No Microsoft first-party support behind it.
  • Graph API surface drift. Microsoft's throttling, permission model, and deprecation cadence are external risks the package can only partially absorb.

Key questions.

  1. Is the read() semantics change documented as breaking, and is there a published upgrade note for consumers relying on false returns?
  2. What is the CI matrix — are Laravel 11/12/13 and PHP 8.2–8.4 actually exercised, or is support declared via constraints only?
  3. Is the Laravel 13 fix required for existing Laravel 12 users, or is it inert until we upgrade the framework?
  4. What is the maintainer's support window and release cadence, and is there a stated policy for Graph API version deprecations?
  5. Does the package support chunked/large-file upload sessions for OneDrive, and what are the documented limits?

Integration Approach

Stack fit. Best fit is a Laravel 11/12 monolith or modular app on PHP 8.2–8.4, already using Storage disks and Laravel's mailer, with an existing Entra ID tenant. Poor fit for polyglot estates needing a shared Graph abstraction outside PHP, or for apps that must send mail through a provider-agnostic relay.

Migration path. From v1.20: bump PHP to 8.2+, update orchestra/testbench to 9–11 and swap nunomaduro/larastan for larastan/larastan in require-dev, then audit every call site that consumes the OneDrive disk for falsy-return handling and wrap in try/catch for UnableToReadFile. If already on Laravel 13, the Storage::extend() fix removes the need for any local workaround — delete any app-side shim added to compensate. If on Laravel 10 or PHP 8.1, pin to v1.20 and schedule the platform upgrade; do not attempt a partial bump.

Compatibility. Laravel 11, 12, and 13 with testbench 9–11; PHP 8.2 minimum, with a PHP 8.4 deprecation fix in MicrosoftGraphTransport::send() indicating active 8.4 validation. The nullable Envelope change is signature-level and should be transparent to callers, but confirm no subclass in your codebase overrides send().

Sequencing.

  1. Pin lloadout/microsoftgraph to v1.21 in a branch; resolve dev-dependency swaps first (testbench, larastan) so CI stays green.
  2. Run the full suite; triage failures into "read() now throws" versus genuine regressions.
  3. Static analysis pass on larastan/larastan — expect new findings given the analyser change, budget time for triage noise.
  4. Staging validation of the OneDrive disk specifically under the target Laravel version, including a long-running queue worker or Octane process to exercise the closure-rebinding fix.
  5. Smoke-test mail send end-to-end against a real tenant mailbox.
  6. Promote to production behind the existing config; no data migration required.

Operational Impact

Maintenance. Low steady-state effort: two config entries, one service provider, no schema. The recurring cost is dependency hygiene — the package tracks Laravel majors and Flysystem interfaces, so it will force a platform upgrade roughly annually. The larastan namespace switch signals the maintainer is actively pruning abandoned dependencies, which is a positive maintenance signal.

Support. No commercial backing. Escalation path is GitHub issues, and any Graph-side incident (throttling, permission changes, API version retirement) is a shared-risk situation where you diagnose alongside the maintainer. Recommend internal ownership: one named engineer accountable for the package and the Azure app registration, plus a documented fallback (SMTP relay for mail; S3/Azure Blob for storage) that can be switched by config.

Scaling. Bounded by Microsoft Graph, not by the package. Expect per-tenant throttling on both mail send and file operations; the transport is synchronous, so high-volume mail should be queued at the Laravel layer rather than relying on the package. Large OneDrive uploads need chunked sessions — verify support before committing to bulk file workflows. Horizontal scaling of the PHP tier is unaffected; the closure-rebinding fix specifically improves safety under Octane and long-lived workers.

Failure modes.

  • Token acquisition/refresh failure (expired secret, revoked consent, conditional access policy) — surfaces as transport exceptions, not graceful degradation. Alert on it.
  • Graph 429 throttling under burst load — requires retry/backoff at the application layer.
  • UnableToReadFile now propagating as an uncaught exception in code written against the old false contract — the highest-likelihood post-upgrade incident.
  • Misconfigured disk name or missing Storage::extend() registration — historically the Laravel 13 bug; now fixed, but verify after any framework bump.
  • Silent mail delivery failures if exceptions are caught too broadly at the app layer; keep Graph send errors visible in logs and metrics.

Ramp-up. Engineering ramp-up is roughly half a day for a mid-level Laravel developer — the API surface is the framework's own Mail and Storage facades. The real cost sits with identity: app registration, scope selection, admin consent, and secret rotation runbook, which is an Azure AD administrator task with lead time measured in days, not hours. Budget for that separately and start it before the code change, not after.

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.
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log
gregsphotography/site-builder-components
io-digital/clickatell
snowsoft/laravel-admin
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums