Bolt Driver Compatibility Matrix

ArcadeDB’s Neo4j BOLT protocol implementation is certified against every official Neo4j driver — Java, JavaScript, Python, .NET, and Go — driven by a single, language-neutral conformance spec. Every driver is proven against the full feature matrix, and every unsupported cell is an explicitly documented limitation, never a silent omission.

The full driver × feature × version matrix is generated from CI and is the authoritative source. It is published and kept current in the ArcadeDB repository:

The matrix on this page summarizes the certified feature areas. Consult the generated matrix above for exact per-version results.

Certified Feature Areas

Area Scenarios Status

Connection

bolt://, bolt+s:// (TLS required), neo4j:// routing (single-node and HA), TLS OPTIONAL fallback

Certified

Authentication

Basic auth (valid / invalid credentials); scheme none rejected (intentional)

Certified

Transactions

Autocommit; explicit BEGIN/COMMIT/ROLLBACK; managed executeRead/executeWrite with retry-on-transient

Certified

Causal consistency

Bookmarks (read-after-write across sessions)

Certified

Multi-database

Per-session named-database selection; isolation across databases

Certified

Result handling

Streaming PULL n, DISCARD, accurate ResultSummary counters

Certified

Type round-trip

Node, Relationship, Path; temporal (Date, Time, LocalTime, DateTime, LocalDateTime); Duration; spatial Point; byte array; lists, sets and typed array properties (ARRAY_OF_FLOATS and the other ARRAY_OF_* types, as used for vector embeddings) all returned as lists; nested lists/maps; null

Certified

Errors

Neo.ClientError. (syntax, semantic, security, missing entity, invalid argument, constraint, type) and Neo.TransientError. (drives driver retry). Since 26.10.1 a missing record, an unknown type or property, and an invalid value report their own client error codes instead of the generic Neo.DatabaseError.General.UnknownError. See Error codes

Certified

Protocol

BOLT 3.0 / 4.0 / 4.4 and 5.0–5.4 negotiation; RESET mid-stream

Certified

Error Codes

Every failure carries the Neo4j status code that describes it, so a driver can tell a mistake in your request from a problem with the server, and retry only what is worth retrying.

Selecting a database. These are the first errors a driver can meet, because the database is resolved before anything else runs:

Code Meaning

Neo.ClientError.Database.DatabaseNotFound

The name in the database connection parameter does not exist on this server. Permanent: retrying cannot help, fix the name.

Neo.TransientError.Database.DatabaseUnavailable

The database exists but cannot serve the request right now - it is closed, or the server has not finished opening its databases. The same request succeeds once it is available, so a retry is worthwhile.

Neo.ClientError.Security.Forbidden

The user is not allowed to reach that database. A permissions problem, not a database one.

Neo.DatabaseError.General.UnknownError

The database is genuinely broken - corruption, an I/O failure. This is the only case that is the server’s fault.

Transactions. BEGIN, COMMIT and ROLLBACK all report the same code for the same underlying failure:

Code Meaning

Neo.TransientError.Transaction.DeadlockDetected

A concurrent modification or lock contention. Drivers retry a managed transaction on this code automatically.

Neo.ClientError.Transaction.TransactionTimedOut

A query or transaction deadline ran out. Retrying with a longer timeout is a decision for the caller, so drivers do not retry it on their own.

Neo.ClientError.Security.Forbidden

The operation was refused for permission reasons.

Neo.ClientError.Transaction.TransactionNotFound

The fallback when the failure matches none of the above.

Before 26.10.1, BEGIN and ROLLBACK reported Neo.ClientError.Transaction.TransactionNotFound for every failure, and all database-selection failures reported Neo.DatabaseError.General.UnknownError. If your application branches on the status code, a conflict on BEGIN is now retried by the driver instead of failing, and a wrong database name is no longer indistinguishable from a broken server.

Documented Limitations

These cells are deliberate, documented differences rather than defects:

  • Auth none — always rejected; ArcadeDB requires credentials.

  • Unauthenticated RUN — the "reject a query before authentication" scenario cannot be exercised through any official driver, because every driver completes the handshake before exposing query methods. It is therefore marked not-applicable rather than tested.

  • Heterogeneous HA BOLT ports — clusters whose nodes expose BOLT on different ports must declare each node’s client-reachable address in arcadedb.ha.serverList (see Routing and High Availability).

  • RID / UUID — serialized as strings (no native BOLT type).

  • BigDecimal / oversized BigInteger — down-converted to double (possible precision loss).

Certified Drivers and Versions

Each driver is pinned for PR-gating CI and re-tested nightly across a wider version band, so a driver-side release that breaks compatibility is caught quickly. The pinned versions live in the driver-version matrix.

Language Driver Certified version bands

Java

neo4j-java-driver

4.4.x (legacy), 5.x, 6.x

JavaScript

neo4j-driver

5.x, 6.x

Python

neo4j

5.x (LTS), 6.x

.NET

Neo4j.Driver

5.x, 6.x

Go

neo4j-go-driver/v5

5.x

For the advertised server identity these results are measured against, see Server Identity and Feature Envelope.