wyrihaximus/ticking-promise
A ReactPHP promise that fires a callback on a recurring interval, making it simple to schedule periodic tasks inside asynchronous PHP applications without manual event-loop timer wiring.
react/promise promise so callers can await a tick instead of hand-wiring a Deferred plus Loop::futureTick(). The buy decision is cheap and the build decision is also cheap, so the real question is "do we want one named, tested, versioned implementation instead of N hand-rolled copies."usleep() and sleep() based waits in async test suites with deterministic tick awaits. Flaky CI is a recurring tax on delivery throughput; this is a direct lever on that tax.async-test-utilities, test-utilities), of which this is typically a transitive dev dependency. That is an engineering-standards decision, not a product feature decision.Adopt when all of these hold:
react/promise v3 and react/event-loop, since this adds no new runtime to the tree.Deferred + futureTick block.Look elsewhere when:
php artisan queue:work workers. There is no loop to tick. Nothing to leverage, and adding it would be cargo culting.react/promise-timer.Loop::addPeriodicTimer directly.wyrihaximus/async-test-utilities, which is the higher-leverage entry point and likely pulls this in anyway.Ownership reality check. Six stars, zero dependents on the package index, single-maintainer ecosystem, bus factor of one. Last release dated 2026-04-12 suggests an active cadence, but popularity is not the safety net here. The safety net is surface area: the code is small enough that forking or inlining it is an afternoon, not a quarter. That near-zero exit cost is precisely what makes adoption defensible.
Default recommendation: dev dependency only, adopted at the first concrete async test that sleeps. Do not promote it to production dependencies without a named production call site and an owner.
For executives (30 seconds): "A tiny MIT-licensed utility that lets our async code wait for the event loop to make progress instead of guessing with sleeps. It makes our async test suite deterministic, which means fewer false-red builds and less engineer time chasing flakes. The whole thing is one composer line and small enough to replace in-house in a day, so the downside is capped. We are not funding a dependency here, we are allowing one."
For engineering (60 seconds): "It turns event loop ticks into a promise, so you can await a tick instead of wiring a Deferred and calling futureTick yourself. Two uses: make async tests deterministic instead of usleep-based, and express 'let the loop breathe' as a step inside a promise chain. Requires react/promise and react/event-loop; adds no new runtime. If you are not on ReactPHP, ignore it entirely. If you are, add it as a dev dependency the first time you write a sleeping test, and use async-test-utilities if you want the broader harness rather than the single primitive."
What to explicitly not claim: that it improves performance, that it is a strategic dependency, or that adoption signals anything about the health of the wider async stack. It is a small correctness tool with a small blast radius in both directions.
How can I help you explore Laravel packages today?