tarantool/client
Pure PHP client for Tarantool 1.7.1+, supporting Unix sockets, SQL, custom types like decimals and UUIDs, middleware, and full customization with thorough testing.
TypeError where they previously coerced.rybakit/msgpack >= 0.11.2. Encoding edge cases (large unsigned ints, binary payloads, map/array distinction) may shift; pins must be reconciled.decimal/uuid PECL extensions).withMiddleware().$client->getSpace()) maps cleanly to Laravel's repository/Query Builder conventions.AppServiceProvider.bind(Tarantool\Client\Client::class, fn() => Client::fromDsn(env('TARANTOOL_DSN'))) still works; the typed API means the binding's return type is now enforced, catching misconfiguration earlier.Criteria/Operations only.Criteria comparisons, optional filters) and is not caught by static analysis on untyped legacy code.msgpack transitive upgrade: encoding behavior for unsigned 64-bit ints and binary blobs must be re-verified against Tarantool's storage format before rollout.RetryMiddleware vs. AuthenticationMiddleware) must be explicitly managed to avoid auth leaks on retries.Decimal/UUID require PECL extensions for full performance; pure-PHP fallback is slower.Tarantool\Client\Exception\* — and now \TypeError from the client's own signatures, which is a different catch class than teams may have registered.tarantool/client 0.10.x (now unsupported)?TypeError regressions?decimal/uuid?LoggingMiddleware must be wired into Monolog; typed APIs change what serializes cleanly into log context.tarantool/client exactly, or float within ^0.11? Given two consecutive minors with breaking changes, exact pinning plus a scheduled review is the safer posture.AppServiceProvider:
public function register()
{
$this->app->singleton(Tarantool\Client\Client::class, fn() =>
Client::fromDsn(env('TARANTOOL_DSN'))
->withMiddleware(
new AuthenticationMiddleware(env('TARANTOOL_USER'), env('TARANTOOL_PASS')),
RetryMiddleware::exponential(3)
)
);
}
\TypeError to the handled exception set alongside Tarantool\Client\Exception\* so strict-type failures surface as actionable API errors rather than 500s.TarantoolUserRepository to hide Criteria/Operations and to own scalar normalization (explicit casts, null handling) at a single boundary rather than scattered across controllers.TarantoolProcessDataJob) with RetryMiddleware; note that a TypeError is not retryable and should be classified as a permanent failure to avoid poisoning the queue.tarantool/client still pinned at 0.10.x.rybakit/msgpack and other shared dependencies resolve on the new runtime.msgpack 0.11.2.^0.11.0; enable Psalm/PHPStan at a level that catches argument-type mismatches in new code.box.stat.user) into Prometheus/Grafana.php: ^8.2, ext-json, ext-pcntl (async), rybakit/msgpack: ^0.11.2.ext-decimal, ext-uuid.tarantool/client call sites.rybakit/msgpack and verify resolution.TypeError failures as a work list.Decimal/UUID need manual PECL management.tarantool-php/queue). Stack Overflow signal for laravel + tarantool remains thin.t.me/tarantool_php, GitHub issues). Maintainers are responsive to PRs, and the tooling modernization suggests they will keep CI green against future PHP releases.TypeError inside a worker is a hard failure — ensure queue failure classification distinguishes permanent type errors from transient connection errors so retries don't amplify load.TypeError from client APIs (new): most likely on dynamic payloads, optional filters, and numeric fields passed as strings from HTTP request input. Mitigation: cast at the repository boundary; add TypeError to the middleware's handled exceptions.msgpack encoding divergence (new): 64-bit unsigned ints and binary payloads may encode differently post-upgrade. Mitigation: round-trip fixture tests against a real Tarantool instance in CI.AuthenticationMiddleware before RetryMiddleware and test the failure path explicitly.box.stat connection counts under worker fan-out.^0.11 risks pulling a future breaking minor. Mitigation: exact pins plus a quarterly dependency review.Criteria) plus Lua for schema work. Estimate 1–2 weeks to first productive contribution for a mid-level Laravel engineer.TypeError remediation sweep. Treat this as a distinct workstream with a named owner, not as incidental maintenance, and communicate the pinning policy (0.10.x intentionally frozen vs. 0.11.x adopted) so future engineers understand the deliberate choice.How can I help you explore Laravel packages today?