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

Event Source Laravel Package

dessimoney/event-source

Event sourcing for Laravel and PHP applications: persist domain events, rebuild aggregates from history, and maintain projections. The package provides an event store, aggregate support, and Laravel-friendly tooling for building event-driven applications with event-sourced persistence.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. Server-Sent Events (SSE) is a good architectural fit for unidirectional, server-to-client updates where WebSocket complexity is unjustified: notification feeds, dashboard refreshes, progress updates, and low-to-moderate fan-out event streams. The package’s claim to support plain PHP, Symfony, and Laravel suggests a thin abstraction over Symfony’s StreamedResponse/PHP output streaming rather than a framework-specific event bus. For a Laravel application, that is a plausible fit as a single route/controller endpoint. However, SSE’s architecture is fundamentally at odds with the standard PHP-FPM request model: each open SSE connection occupies a PHP worker for its lifetime. That makes the package suitable for low-concurrency internal tools or pilots, not as a default real-time transport for a high-traffic Laravel product without Octane/Swoole/RoadRunner or a separate event service.

Integration feasibility. Composer-based installation is likely straightforward, and a Laravel integration probably consists of registering a route and returning a streamed response. Feasibility is therefore moderate for a proof of concept. Production feasibility is lower because the package must coexist with Laravel middleware, authentication, session handling, output buffering, and whatever reverse proxy sits in front of the app. With only 3 stars and 0 dependents, there is no observable ecosystem evidence that these integration edges have been exercised by other teams. A TPM should treat the package as an unproven component requiring a code review and a spike before any commitment.

Technical risk. High, primarily due to maturity and operational characteristics rather than SSE itself. Key risks include: unknown Laravel/PHP version support; unclear behavior under Laravel Octane or other long-running runtimes; no evidence of automated tests, CI, static analysis, or security policy; potential worker exhaustion from long-held PHP-FPM connections; proxy/load-balancer buffering and idle timeout incompatibilities; missing or undocumented heartbeat, retry, and Last-Event-ID semantics; session file locking that can block unrelated requests; and unbounded loops that can leak memory or hold database connections. The MIT license is a mitigation because the code can be forked, but the team must be prepared to own it.

Key questions.

  • Which Laravel and PHP versions are supported, and is there a compatibility matrix?
  • Does it integrate with Laravel’s middleware, auth, and exception handling, or does it bypass the framework lifecycle?
  • Is it compatible with Laravel Octane/Swoole/RoadRunner, and what changes under those runtimes?
  • Does it implement heartbeats, retry, event IDs, and Last-Event-ID reconnection handling?
  • How does it behave when the client disconnects mid-stream? Are resources released deterministically?
  • What is the maintainer’s commitment level, and are there tests, CI, and documented security practices?
  • What reverse-proxy configuration is required (buffering off, timeouts, compression)?
  • How are authorization and per-connection permissions enforced after reconnect?
  • What is the memory and connection profile under 10, 100, and 1,000 concurrent streams?

Integration Approach

Stack fit. The package fits a Laravel stack best when the application already serves HTTP traffic and the team wants to avoid introducing WebSocket infrastructure. It is a poor fit for serverless platforms with short execution limits, for standard PHP-FPM deployments expected to hold hundreds of concurrent streams, or for teams without reverse-proxy ownership. A better fit is a Laravel app running on Octane/Swoole or a dedicated SSE/event service where long-lived connections are cheap. SSE is also a reasonable complement to existing polling, not an immediate replacement for a mature WebSocket or queue-driven notification system.

Migration path. Treat this as an additive pilot, not a platform migration. Add the package via Composer, implement one non-critical endpoint behind a feature flag, and keep the existing polling or WebSocket path as a fallback. Choose a bounded use case such as admin dashboard updates or import-progress notifications. Instrument connection counts, worker saturation, and disconnect behavior. If the pilot succeeds, expand incrementally; if it fails, removing a single route and dependency is low-cost. Avoid routing critical customer-facing real-time features through this package until production behavior is proven.

Compatibility. Validate explicit support for the team’s Laravel major version, PHP version, and Symfony components. Test against the actual deployment topology: nginx or Apache, load balancer idle timeout, HTTP/1.1 versus HTTP/2, gzip/buffering settings, and CORS. Test with Laravel Octane if that is the target runtime, because streamed responses and worker lifecycles differ materially from PHP-FPM. Also verify browser connection limits per domain, since SSE over HTTP/1.1 consumes one of the browser’s limited connections per origin. Confirm that authentication middleware and session drivers do not serialize or lock requests while a stream is open.

Sequencing.

  1. Perform a code review and dependency/security audit; confirm license and maintainer activity.
  2. Run a local spike with one SSE route behind a feature flag.
  3. Configure staging to mirror production proxy timeouts and buffering behavior.
  4. Load-test at expected and 2–3x expected concurrency; measure PHP worker usage, memory, and disconnect cleanup.
  5. Add observability for open connections, stream duration, reconnect rate, and worker-pool saturation.
  6. Pilot with an internal, non-critical feature and a polling fallback.
  7. Document an exit plan: replace with native StreamedResponse, a maintained SSE package, or a dedicated service such as Mercure/Centrifugo.
  8. Decide whether to adopt, fork, or reject based on pilot evidence.

Operational Impact

Maintenance. Maintenance risk is high. With 3 stars, 0 dependents, and a single apparent maintainer, the package has little community validation and no visible breadth of production usage. The team should assume internal ownership: pin the version, vendor or fork the code, and budget for periodic review. MIT licensing makes a fork viable, but forking transfers all maintenance burden. The 2026-10-23 release date may indicate recent activity, but recency without adoption is weak evidence of stability.

Support. There is no commercial support model. Support will come from GitHub issues and internal documentation, which is insufficient for a critical dependency. A TPM should require an internal runbook covering configuration, proxy settings, rollback, and known failure modes before production use. If the feature is customer-facing, identify an on-call owner and escalation path independent of the upstream maintainer.

Scaling. Scaling is the dominant operational concern. Under PHP-FPM, every SSE connection consumes a worker, so concurrency is capped by pm.max_children; a few hundred streams can starve the entire application. Scaling therefore requires either an event-driven runtime with cheap connections or a separate SSE service. Multi-instance deployments also require a fan-out mechanism such as Redis pub/sub so that events reach the instance holding the client connection. Load balancers must have idle timeouts longer than the heartbeat interval, and the application must emit heartbeats to keep connections alive through proxies. Capacity planning should be based on connection count, not request rate.

Failure modes. The most serious failure is worker-pool exhaustion, which can take down unrelated HTTP traffic. Other likely failures include proxy buffering that delays or batches events, idle timeouts that silently drop connections, missing heartbeats that leave dead connections open, session locking that blocks other requests from the same user, memory growth in long-running loops, database connection exhaustion from held connections, reconnect storms after a deploy or network blip, and missed events when Last-Event-ID is not supported. Authorization failures on reconnect and inconsistent behavior under Octane are also plausible. Each of these needs a detection signal and a documented mitigation.

Ramp-up. Developer ramp-up for a basic endpoint is low: a Laravel engineer familiar with HTTP responses can likely produce a working SSE route quickly. Production ramp-up is moderate to high because it requires SSE protocol knowledge, reverse-proxy tuning, load testing, and long-running process debugging. Allocate at least one to two sprints for a pilot, including load testing and runbook creation. If the team lacks SRE capacity or ownership of the proxy layer, the operational ramp-up likely outweighs the convenience of the package, and a managed real-time service is the safer TPM recommendation.

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.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core