userbase/client-bundle
Symfony bundle integrating the Userbase PHP client. Register and configure the client through bundle configuration, then inject it as a service to add user authentication, sessions, and encrypted per-user data storage to your Symfony application with minimal setup.
Architecture fit — mismatch to flag first. Despite the "Laravel/PHP package" framing, this is explicitly a Symfony bundle (linkorb/userbase-client-bundle), not a Laravel package. Laravel consumes Symfony components (HttpFoundation, Console, etc.) but has no bundle kernel, no DependencyInjection\Extension auto-registration, and no services.yaml bundle convention. Treat "works in Laravel" as an unproven assumption until the source is read. The likely reality is a thin HTTP client plus Symfony wiring (service definitions, a security user provider or authenticator). The client/DTO layer may be extractable; the bundle layer will not be.
What it presumably is. A client integration for LinkORB's UserBase identity/user service — i.e., it makes your app delegate authentication and user records to a centralized UserBase instance. That makes this a security-critical dependency, not a convenience library. Everything downstream (login, session, authorization, user profile) depends on a third party's API contract.
Integration feasibility — medium-to-low, gated on two unknowns. Feasibility hinges on (a) whether the underlying HTTP client is framework-decoupled and reusable behind a Laravel service provider, and (b) whether UserBase itself is a service you can actually run against (hosted SaaS, self-hosted Docker, or internal-only to LinkORB). If it is internal-only, this package is effectively unusable and the evaluation ends there.
Technical risk — high, and mostly non-technical.
Key questions to answer before any commitment.
Stack fit. There is no direct fit for a Laravel app. The viable pattern is an anti-corruption layer: a first-party Laravel package (service provider + config + facade) that wraps either the extracted UserBase client or, more likely, the UserBase HTTP API directly. Do not attempt to shoehorn Symfony bundle registration into Laravel; the maintenance cost of that shim exceeds writing a thin client.
Migration path.
UserBaseClient interface, config-driven credentials, HTTP client via Laravel's Http factory or Guzzle with retry/timeout policy.Authenticatable models. Keep a local user table as a cache so that a UserBase blip degrades gracefully.IdentityProvider contracts so a swap to OIDC (Keycloak, Authentik, Auth0, Cognito) is a config change, not a rewrite.Compatibility. Verify PHP version constraints, Symfony component versions (Laravel 10/11 pin specific Symfony majors — a bundle requiring Symfony 5.x components may still be fine, but confirm), and whether the package pulls conflicting transitive dependencies. Run composer why-not before anything else.
Sequencing and decision gates. Gate 0: confirm UserBase service availability. Gate 1: spike proves the API is reachable and the client is extractable. Gate 2: an OIDC fallback is designed and costed. Proceed only if all three pass. If Gate 0 fails, stop — the package is irrelevant regardless of code quality.
Maintenance. Assume you own it. With 0 dependents there is no upstream community to absorb fixes; the realistic posture is "vendor fork on day one." Budget for periodic patches against UserBase API changes, and pin the dependency with a lockfile and a scheduled review cadence (quarterly is reasonable for an auth path).
Support. No evidence of an SLA, public issue triage, or security policy. For an authentication dependency this is a material gap — an auth CVE with no disclosure channel is a serious exposure. Require a named contact at LinkORB and a written escalation path, or treat the package as unsupported internal code.
Scaling. The client itself is thin — scaling pressure lands on the UserBase service, whose capacity, rate limits, and latency characteristics are undocumented here. Auth sits on the critical path of every request that revalidates a session; add local session caching so a 50ms identity lookup is not paid on every page load. Benchmark p99 login latency against a self-hosted OIDC alternative before committing.
Failure modes.
IdentityProvider abstraction and local user records portable from day one.Ramp-up. Low for engineers fluent in Symfony bundles; moderate for a Laravel-only team, who will spend most of their time on the adapter rather than the client. Estimate roughly a 1–2 sprint spike-and-adapter effort before production readiness, plus ongoing ownership. The dominant cost is not the code — it is the vendor-risk contingency plan. Recommend a written "exit to OIDC" design as a deliverable of the initial spike, sized and accepted by the team, so the decision to adopt is reversible.
How can I help you explore Laravel packages today?