neo4j/neo4j-bundle
A Symfony bundle that integrates Neo4j graph databases into PHP applications. It configures the Neo4j client, wires services for dependency injection, and provides convenient access to graph database queries and transactions from Symfony projects.
Architecture fit. The headline mismatch stands: this is a Symfony bundle, not a Laravel package, and release 1.2.0 widens rather than narrows that gap. The release extends stopwatch timing, logging, and event-bus dispatch from the driver layer down into sessions and transactions — all of which are Symfony kernel/debug-stack constructs (Stopwatch, LoggerInterface autowiring, EventDispatcherInterface). Roughly 70–75% of the bundle's value is now Symfony-specific; on a Laravel codebase none of it applies, and you would use the underlying laudis/neo4j-php-client directly behind a custom service provider. The bundle remains a fit only if the target stack includes Symfony.
Integration feasibility. Unchanged. The real dependency is laudis/neo4j-php-client, which is mature enough for production: Bolt and HTTP transports, session/transaction handling, lazy connections, result formatting, and typed exceptions. 1.2.0 does not alter that client contract — it wires existing client session/transaction objects into Symfony's observability stack, so there is no new API surface a Laravel integrator would call. Laravel wiring remains a ~1-day task (singleton binding, config file, facade, repository wrapper).
Technical risk.
Key questions.
Stack fit. For a Laravel shop, do not adopt the bundle — 1.2.0 adds nothing usable to you. Adopt laudis/neo4j-php-client and build a thin Laravel integration: config/neo4j.php, a Neo4jServiceProvider registering a singleton Client, and a Neo4j facade for ergonomics. If a Symfony service is in scope, use the bundle there and keep the client version aligned across both.
Migration path.
Graph domain boundary — repository interfaces in the app layer, client usage confined to infrastructure. Never inject ClientInterface into controllers or jobs.Compatibility. The four-way matrix (PHP 8.1–8.3, Laravel 10/11, client major version, Neo4j server Bolt version) is unchanged by 1.2.0 — it touches Symfony instrumentation only and introduces no new config keys or deprecations. If a Symfony service does use the bundle, ^1.2 is a safe minor upgrade requiring no code changes. Lock the client minor version; it does not follow Symfony/Laravel release cadences.
Sequencing.
Maintenance. Low but thin. 1.2.0 is a healthy cadence signal, but a narrow-scope instrumentation release also confirms the maintainer's attention is on Symfony ergonomics. Expect slow turnaround on issues and no vendor SLA. Budget for a fork-or-patch contingency; keep the integration surface small enough that forking the client is survivable.
Support. Community-only. Escalation path is the maintainer's GitHub. For anything customer-facing you need an internal owner who can read the client source. With 1.2.0, that owner must also own the observability story, since upstream debugging features will not reach a Laravel deployment.
Scaling. PHP-FPM means per-request connection setup against Bolt — measure connection overhead before assuming it is free, and prefer the HTTP driver for async/batch workloads. Neo4j scales differently from MySQL/Postgres; query cost is a modeling problem, not an infra problem. The session/transaction timing introduced in 1.2.0 is the kind of data you would want when tuning this — but it is Symfony-only, so plan to capture equivalent timing in your own middleware. Plan for read replicas or Aura tiering only once query patterns are known.
Failure modes.
Neo4jTransientException) → implement retry-with-backoff at the repository layer, not scattered in callers.Ramp-up. The package is the easy part; Cypher and graph data modeling are the real cost — realistically 3–6 weeks before a mid-level PHP developer writes non-trivial, performant Cypher unsupervised. Add roughly 2–3 days for hand-rolled query tracing that Symfony users get from 1.2.0 for free. Budget for a modeling review before the first production schema, because graph schema mistakes are expensive to unwind. Total readiness: ~1 week for plumbing, ~1 month for a trustworthy first use case.
How can I help you explore Laravel packages today?