Neo4j Database Adapters Compared: Official and Community Drivers Across Every Major Language
Neo4j's core protocol has settled on Bolt as the primary wire protocol since version 4.0, unifying how drivers communicate with the database regardless of language. But the developer experience varies significantly between drivers — from type handling and transaction models to async support and connection pooling. This article maps the landscape so you know what you're getting before you pip install, npm install, or go get.
Official Drivers: The Five Pillars
Neo4j maintains five drivers as first-class citizens, all aligned on the same versioning scheme, the same Bolt protocol support, and the same feature set. They share a common design philosophy: one driver instance per application, sessions for units of work, and transaction functions with automatic retry.
Python — neo4j (formerly neo4j-driver)
The Python driver is the most actively developed, now at v6.2.0 (May 2026). The package was renamed from neo4j-driver starting with 6.0.0 — the old name is deprecated and receives no further updates.
from neo4j import GraphDatabase
driver = GraphDatabase.driver(
"neo4j+s://demo.neo4j.io",
auth=("neo4j", "password")
)
with driver.session(database="neo4j") as session:
result = session.run(
"MATCH (n:Repository) RETURN n.name AS name LIMIT 10"
)
for record in result:
print(record["name"])
Key characteristics:
- Python ≥3.10 required, supports up to 3.14
- Bolt 6.0, 5.x, and 4.4 protocol support
- Optional Rust extensions (
neo4j-rust-ext) for performance-critical paths — not installed by default, opt in withpip install neo4j[rust-ext] - Reactive streams via the experimental
rxmodule - Server notification warnings automatically emitted since v5.21
The Rust extension layer is unique among the official drivers — it replaces the pure-Python Bolt serialisation with native Rust code, yielding measurable throughput gains for bulk operations.
JavaScript — neo4j-driver
The JS driver supports both Node.js (≥18) and browser environments (via WebSocket). It reached v5.28.3 in January 2026 with a v6.0.1 alpha on npm. The v6.x line introduces the Neo4j Vector type for embedding storage.
import neo4j from "neo4j-driver";
const driver = neo4j.driver(
"neo4j+s://demo.neo4j.io",
neo4j.auth.basic("neo4j", "password")
);
const session = driver.session({ database: "neo4j" });
try {
const result = await session.run(
"MATCH (n:Repository) RETURN n.name AS name LIMIT 10"
);
result.records.forEach((record) => console.log(record.get("name")));
} finally {
await session.close();
}