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

Pest Plugin Realtime Laravel Package

kirschbaum-development/pest-plugin-realtime

A Pest plugin that brings realtime broadcasting assertions to your Laravel tests, letting you verify events are broadcast instantly over Reverb or Pusher. Write expressive expectations for channels, payloads, and event order without boilerplate setup.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Blocking finding: the package has two incompatible identities. The repository description states the plugin "deterministically test[s] realtime browser behavior, dropped events, and connection recovery with Pest" — i.e. a realtime/broadcast assertion library. The package's own description.md states it "adds live test feedback to Pest, streaming results as each test completes" — i.e. a test-output reporter. These are entirely different products with different dependency graphs, different CI requirements, and different value cases. Until someone resolves this from the source, everything below is conditional. This single ambiguity is more decision-relevant than any other fact in the record.

Architecture fit. Under either reading, this is a dev-only require-dev Pest plugin. It auto-registers via Composer/Pest plugin discovery, ships nothing into the production artifact, and imposes no constraint on application architecture. That is the lowest-risk dependency category available to us. The fit conditions differ sharply, however:

  • If it is a realtime tester: only relevant where Pest is the runner and the application has a realtime surface (broadcasting, Reverb/Pusher/Soketi/Ably, presence/auth channels). Absent that surface, it has zero value.
  • If it is a result-streaming reporter: relevant to any Pest repo, but differentiated value is questionable — Pest already surfaces live progress, and CI log aggregation largely solves the "spot failures sooner" problem. A reporter that only improves local terminal ergonomics is a convenience, not a capability.

Integration feasibility. Mechanically trivial (composer require --dev, one line). The unknowns are environmental and, in one case, severe:

  • Compatibility matrix — supported Pest major, PHP floor, Laravel range. Must be checked against our pins first. A plugin tied to a specific Pest major is a latent upgrade blocker.
  • Execution model (realtime reading) — does it need a live broadcaster process reachable from the test runner, or an in-process fake? This question alone accounts for most of the operational cost below.
  • Overlap with native tooling — Laravel's Event::fake() / Broadcast::fake() already cover assertion needs. If the plugin is an ergonomic wrapper, the value case weakens materially.
  • Output-channel conflict (reporter reading) — does it conflict with existing formatters, --parallel output, or CI log parsers? Streaming output from parallel workers can interleave and become unreadable.

Technical risk.

  • Near-zero external validation. 1 star, 0 dependents. No third-party usage to learn from, no community bug surface, no evidence anyone has run this in anger.
  • Pre-1.0 versioning. v0.x carries no semver guarantee. Patch bumps should be safe; minor bumps may not be. Every upgrade needs a look.
  • Release opacity. v0.6.2's only artifact is an auto-generated compare link — no notes, no stated changes. This is likely a dependency bump, but we cannot triage regression risk from the record.
  • Bus factor. Narrowly-scoped OSS from a credible Laravel consultancy, but unproven longevity for this specific package.
  • Test-suite coupling. If it is the realtime tester, timing-sensitive assertions inject flakiness into CI — the dominant risk, and one that corrodes trust in the entire suite rather than just the new tests.
  • Date anomaly. The release is dated 2026-07-31, ahead of the current window. Verify the tag actually exists and is fetchable before planning around it.

Key questions.

  1. What does this package actually do — resolve description vs. description.md from source and from the v0.6.1...v0.6.2 diff. Blocking.
  2. Exact compatibility matrix (Pest / PHP / Laravel), and is it exercised in CI?
  3. If a realtime tester: does it require a running broadcaster, and what is the documented CI harness?
  4. If a reporter: how does it behave under --parallel, and does it conflict with our formatters?
  5. Commit cadence, open-issue backlog, time-to-first-response over the last 6–12 months.
  6. Can its assertions silently pass when the underlying condition is misconfigured (false-green risk)?

Integration Approach

Stack fit. Adopt only if (a) the repository uses Pest, and (b) the identity question resolves in favor of a capability we actually lack. Treat this as a test-tooling decision, not a platform decision — it is reversible by removing one dev dependency and deleting the tests or config that reference it.

Migration path. No production migration exists. The path is a deliberately small pilot:

  1. Resolve the identity question and review the v0.6.1...v0.6.2 diff.
  2. Branch-spike in one repository only.
    • Realtime reading: port 2–3 representative tests — a public broadcast, a private/presence authorization case, and a negative case — from mocks to the plugin.
    • Reporter reading: enable it on an existing suite and evaluate output legibility under local, CI, and --parallel runs.
  3. Run ~20 consecutive CI iterations; record flake rate, added wall-clock time, and log readability.
  4. Go/no-go on measured outcomes, not on API ergonomics.

Compatibility. Pin an exact version (0.6.2) for the pilot — pre-1.0 caret ranges are too permissive. Confirm Composer resolves cleanly against our Pest/PHP/Laravel pins, no transitive conflicts, and no forced phpunit.xml restructuring or runner swap. If it pins us to a Pest major we intend to leave, stop.

Sequencing.

  • Phase 0 (now): identity resolution, diff review, compatibility check. Cheap, blocking, and may end the evaluation outright.
  • Phase 1: single-repo spike, non-gating, one engineer.
  • Phase 2: if the spike passes, pin the version, document any CI service requirement, name an owner, and keep it non-blocking.
  • Phase 3: expand to other repos only after Phase 2 runs clean for several weeks.

Do not gate merges on this package's tests or output until the flake/legibility profile is known. Introduce non-blocking, promote later.

Operational Impact

Maintenance. Low on paper — dev-only footprint means no production blast radius, no security-patch urgency, no runtime monitoring. The recurring tax is upgrade review on a pre-1.0 package with uninformative changelogs. Budget a short review per release and assign a named owner so it does not silently rot. Note the asymmetric cost: a breaking minor here can break the entire test suite's ability to boot, which blocks every engineer at once.

Support. Community OSS, no SLA. Kirschbaum is reputable and reachable, but assume best-effort only. Internal ownership is mandatory: someone must be able to read the plugin source and, if it is abandoned, replace it with hand-rolled assertions (realtime reading) or native runner output (reporter reading). Both fallbacks are cheap, which caps the downside.

Scaling. API surface is small and scales fine; CI infrastructure is the constraint under the realtime reading. That means containerized Reverb/Pusher-compatible services, per-worker port isolation, deterministic startup/teardown, and clean process termination — coordination cost that multiplies under parallel execution. Budget CI minutes and pipeline complexity as first-class line items, not footnotes. Under the reporter reading, scaling cost is near zero, but so is the benefit.

Failure modes to watch.

  • Identity/scope surprise — adopting for one purpose and discovering the other. Highest-probability failure right now.
  • Flaky timing assertions (realtime reading) — erodes suite credibility and drives blind retries.
  • False greens — assertions passing because the broadcaster never connected, not because behavior is correct. Force at least one deliberate-failure check.
  • Port collisions / orphaned server processes in parallel CI workers.
  • Semantic drift between the plugin's simulation and real broadcaster behavior, especially channel authorization and presence events.
  • Output interleaving / formatter conflict (reporter reading) under --parallel.
  • Upstream abandonment or an unannounced pre-1.0 breaking minor.
  • Patch releases with no substantive notes — low severity alone, but it removes our ability to triage upgrade risk from the changelog.

Ramp-up. Shallow for engineers already fluent in Pest — the surface is small and idiomatic. The real learning cost is operational: standing up and debugging a realtime server inside CI (realtime reading), or validating output across environments (reporter reading). Estimate roughly a day for the spike and wiring, near-zero per-developer thereafter. Engineers unfamiliar with broadcasting concepts will need context on channels, presence, and auth before any realtime assertions mean anything.

Recommendation. Do not treat v0.6.2 as an approval signal — its changelog carries no decision-grade information, and the package's identity is currently contradicted by its own metadata. Proceed only to Phase 0: resolve what the package does from source, review the diff, and confirm the compatibility matrix. With 1 star and 0 dependents, there is no external evidence to borrow; the adoption case must be built entirely on our own spike results. If Phase 0 shows the package duplicates native Broadcast::fake() capability, or that it is a terminal-output convenience rather than a testing capability, close the evaluation and move on.

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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource