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

Null Laravel Package

enqueue/null

Null transport implementation for Queue Interop that discards messages instead of sending them anywhere. Use it as a mock or no-op queue in tests and development to verify message flow without a real broker.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. enqueue/null is a no-op transport implementing the Queue Interop (queue-interop) contract: producers send() successfully, consumers receive nothing, and messages are discarded in-process. That makes it a test/dev-only utility, not a messaging system. For a TPM, the fit test is simple: does the codebase talk to Enqueue's Transport/Context abstraction? If yes, this package lets you run queue-dependent code paths (job dispatch, message producers, consumer bootstrapping) in local dev, CI, and integration suites without provisioning RabbitMQ, Redis, SQS, or AMQP. If the codebase is on Laravel's native queue driver instead, this package adds nothing — Laravel already ships sync and null drivers with the same "discard the job" semantics. That distinction is the single most important scoping decision and should be made before any adoption work.

The package is described as a "DEVELOPMENT REPOSITORY" under the php-enqueue/enqueue-dev monorepo; the installable artifact is enqueue/null published from a split repository. The 2,222 stars and high opportunity score reflect the enqueue ecosystem, not this package specifically — note Dependents: 0 and maturity flagged as readme. Translation for planning: this is a supporting dependency in a mature family, with effectively no independent adoption signal and thin package-level documentation. Treat it as low-cost test tooling, not a strategic platform bet.

Integration feasibility. Genuinely low effort. The package has one direct dependency (the Enqueue/Queue Interop core), requires no broker, no credentials, and no network. Integration is a composer require --dev plus a factory swap (NullTransportFactory instead of AmqpTransportFactory, etc.) in the Enqueue context/bootstrap. For Laravel specifically, the swap happens inside the Enqueue Laravel bridge configuration, not by setting QUEUE_CONNECTION=null — that env var controls Laravel's native queue manager and is a different code path. Any plan that conflates the two will produce a working config that tests the wrong thing.

Technical risk.

Risk Severity Why it matters to a TPM Mitigation
Silent success on a broken pipeline Medium Jobs "work" while producer/consumer wiring, serialization, routing keys, or retry config are all wrong; defects surface only against a real broker Keep at least one CI lane on a real broker (Docker service container) as a smoke test
Accidental production use High impact, low likelihood If this transport ever reaches prod, messages vanish with no error, no dead-letter, no retry Environment guards + a deployment check that asserts the configured transport is non-null outside testing/local
Mock/real divergence Medium Broker-specific behavior (exchanges, DLQs, TTL, prefetch, delayed messages) is untested by definition ADR stating explicitly what null transport does not cover
Upstream maintenance Low–Medium Single-vendor project (Forma-Pro), monorepo publishing, no independent dependents Pin a version; keep the swap behind a one-line config so removal is cheap
Misleading performance signal Low O(1), no serialization — looks like a very fast queue Ban it from benchmarks/stress tests in the ADR

Key questions.

  1. Are we on Enqueue / Queue Interop, or on Laravel's native queue? If the latter, is there a reason to introduce Enqueue at all just to get a null transport?
  2. Which message classes are business-critical (payments, notifications, webhooks), and what mechanism prevents their transport from ever resolving to null outside test?
  3. What is our minimum bar for broker realism in CI — do we keep one containerized broker lane, and who owns it?
  4. Do we need the Enqueue Laravel bridge for this, and is that bridge's version pinned and reviewed independently of enqueue/null?
  5. What is the exit cost if the project stalls — how many files reference the null factory today?

Integration Approach

Stack fit. Designed for PHP with first-class support across Symfony, Laravel, and Magento per the description; requires a modern PHP runtime consistent with the current Enqueue major. Best fit: teams already using Enqueue for transport abstraction, running PHPUnit/Pest suites in GitHub Actions, GitLab CI, or ephemeral containers. Poor fit: applications tightly coupled to broker features (RabbitMQ plugins, Redis streams, SQS FIFO semantics), or microservice fleets where cross-service message durability is part of the contract. Positive secondary effect: removing broker containers/credentials from test environments shrinks the attack surface and secret surface of CI.

Migration path. Three phases, all reversible:

  1. Test/CI first — add as a require-dev dependency, register the null transport in the test bootstrap only, and measure pipeline wall-clock improvement. This is where the ROI is easiest to prove.
  2. Local development — promote to the default dev configuration via the Enqueue bridge, documented in the onboarding README, with the real broker still available as an opt-in profile.
  3. Guard rails — add a startup assertion that fails fast if the null transport is selected while APP_ENV is neither local nor testing. This is a few lines and is the highest-value part of the whole integration.

Compatibility. Verify against the Enqueue major the app already depends on and against the Laravel bridge version in composer.lock. Because the artifact is published from a monorepo, check that the tag for enqueue/null aligns with the tags of the core packages you use — mismatched splits are the most likely source of "works for the author, not for me" issues. Nothing here is broker-version-sensitive, which is a genuine advantage.

Sequencing for a TPM. Budget roughly a day for a spike (prove the swap works on one test suite), one sprint to roll out to CI and dev, and a follow-up ticket for the production guard rail. Do not sequence this ahead of a broker-strategy decision — it is an accessory to an existing Enqueue investment, not a substitute for one. Communicate it as "test infrastructure", never as "our queue".

Operational Impact

Maintenance. Near-zero runtime maintenance: no broker to patch, monitor, or scale, no credentials to rotate, no containers to keep alive. The real maintenance load is cognitive: someone must own the documentation that says what this transport silently does not do. The upstream maintenance question is separate — a single-vendor, MIT-licensed project with a commercial sponsor model (Patreon, Forma-Pro client work) is generally healthy but is not a foundation-backed project. Pin the version and prefer it in require-dev so an upstream hiatus cannot affect production builds.

Support. Community support runs through the project's Gitter channel and issue tracker; commercial support exists only via the vendor. For a TPM, the practical answer is that no one will support this package for you, and no one needs to — the failure surface is small and the removal cost is one config line. That asymmetry is the main argument for adopting it.

Scaling. Irrelevant in the production sense and should be described that way. It is O(1), allocates little, and performs no serialization, which means any latency or throughput number derived from it is meaningless. State plainly in the ADR: null transport must never appear in a performance benchmark or capacity model. Its "scale" is limited to test-suite execution time, where it is a clear win by removing container startup and network round-trips.

Failure modes. The dominant failure is silent message loss in an environment that matters, caused by configuration drift rather than by the package itself. Secondary failures are false confidence (green tests over untested retry/DLQ/routing logic) and divergence when a real broker is finally introduced and reveals assumptions the null transport never exercised. A tertiary risk is dependency abandonment, which is mitigated by the trivial swap surface. Each of these is cheap to mitigate and expensive to discover late — which is precisely why the guard rail and the one-real-broker CI lane should be treated as part of the adoption, not as follow-up work.

Ramp-up. For a developer already comfortable with Enqueue's Context/Transport/Producer interfaces, this is a 15-minute concept and a one-hour task. For a team on Laravel's native queue, the ramp-up is misleadingly steep because the relevant learning is the Laravel bridge, not this package — and that is the point at which a TPM should ask whether the Enqueue layer is earning its keep at all. Onboarding material should be two paragraphs: what it does, and the explicit list of what it does not validate. Anything longer is over-investment in a test double.

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.
digitickets/lalit
acacha/names
scool/foundation
frankkessler/guzzle-oauth2-middleware
delatbabel/site-config
delatbabel/applog
eusonlito/laravel-gettext
henzeb/housepedia-intelligence-laravel
aliqsm/laravel-authkit
itsjustvita/laravel-wp-migrator
uslanozan/laravel-cache-contract
adilazhari/laravel-trace
ulsyairil/ai-local-guardrails
dzwallet/laravel-sdk
glc36/maxloop-kernel
ikhbarnuridev/filament-mega-menu
mydnic/volet-chatbot
enadstack/laravel-localization
mydnic/volet-feature-board-filament-plugin
wmde/email-address