2016: The Year in Neo4j Drivers for Java, Python, .NET ,and More
With the release of Neo4j 3.0 last year came Bolt, Neo4j's own Cypher-based binary protocol. Since then, numerous drivers for several languages have been developed.
Join the DZone community and get the full member experience.Join For Free
Spring Is in the Air
that were developed in-house and documented in theNeo4j developer manual.
Since the first days of Neo4j we’ve been supported by our active community of contributors who did a great job of providing drivers for our HTTP and REST endpoints for more than 20 popular programming languages.
Thank you all so much for this impressive work!
With Neo4j 3.0 and the Bolt binary protocol, we saw this amazing work continue. Originally we were a bit concerned because of the higher effort required to develop a Neo4j driver for a custom binary protocol but our contributors surprised us here.
Even during the development of Neo4j 3.0 the first three drivers: Nigel’s py2neo (Python), neo4j-php-client (PHP) by Chris Willemsen from our partner GraphAware (UK) and libneo4j-client (C) by Chris Leishman had their first releases.
To make it easier for contributors to develop Neo4j drivers using Bolt, Nigel started theboltkit project: a detailed, executable documentation (in Python) that details how to structure and implement a driver for the Bolt protocol and the Packstream serialization. This also includes some tools for driver authors and is used in-house here at Neo Technology.
Summertime and the Livin’ Is Easy
In the Go community, several people actively worked on Neo4j drivers using Bolt. John Nadratowski developed the golang-neo4j-bolt-driver
of which a more idiomatic fork was made and maintained by Eric Lagergren from SermoDigital to a more idiomatic variant
. And Hugo Bost wrote neoql,
a variant that was (similar to cq) based on the widely used database/SQL API for Go.
Florin Patrascu enjoyed working in Elixir and couldn’t live without a current Neo4j driver. So he provided neo4j-sips, a Bolt driver for Elixir.
In October at GraphConnect San Francisco, the third beta of Neo4j 3.1 was launched, with some notable improvements in the official Neo4j drivers, especially in concurrent operations and session reuse.
The bigger changes were in the new APIs to support Causal Clustering in Neo4j 3.1. Smart client routing (
bolt+routing://host:port) that uses information on cluster topology together with demarcation of read and write sessions alleviates the need for a load balancer. And the ability to use a transaction-state token (bookmark) allows for causal consistency to read your own writes even on an eventually consistent cluster underneath. These features were first to launch with the 1.1 version of the Java driver.
Pavel Yakovlev found time besides his job as the research director of a biotech company to develop a Bolt Neo4j driver for Haskell named hasbolt
Hazy Shade of Winter
(Ruby) team (Brian Underwood, Chris Grigg, et al) worked over the year – besides other improvements – on implementing the Bolt protocol in neo4j-core gem
so that it is supported both on the low-level APIs as well as in the ActiveRecord module of neo4j.rb, both of which were released at the end of the year.
The PHP driver is used in the Drupal module
developed by Pronovix and also in the brand-new
You can find all these mentioned drivers on our language guide pages for developers
and for many of them also an implementation of our example movie application
in our github.com/neo4j-examples
As with any open source project, feedback from users is crucial to our success, so if you use any of the abovementioned Neo4j drivers make sure to raise issues if you encounter problems or have ideas and/or suggestions for improvements.
We’re sure any driver author would appreciate a “thank you” for their efforts as well. And if you are using the Neo4j drivers in a commercial project, perhaps you can find an opportunity to either contribute back code that you’ve developed or consider contacting the author or the author’s company to help improve the driver for real-world usage.
Are there languages missing that you would like to see supported by the Neo4j community or officially by Neo4j? Please let us know! Drop us an email to
Published at DZone with permission of Nigel Small, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.