2016: The Year in Neo4j Drivers

Spring is in the Air

2016 was the year when, in April with the availability of Neo4j 3.0 we also introduced our own binary protocol named Bolt. We also provided the first set of officially supported drivers for Bolt, including Java, .Net, JavaScript and Python that were developed in-house and documented in the Neo4j developer manual.

Learn about Neo4j drivers for JavaScript, Java, .NET, Python and other community language drivers.

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 the boltkit 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.

boltkit for Neo4j drivers includes and API and PackStream details

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.

Forever Autumn

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

The neo4j.rb (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.

These core Neo4j drivers were not the only libraries developed in 2016, we also saw them being used by other projects. The Java Neo4j driver was used for the neo4j-spark-connector and for the Neo4j-JDBC driver by the team of our partner Larus BA in Italy. The JavaScript driver powers the Neo4j Browser and the Tableau 10 (WDC2) Neo4j connector, maintained by our partner Ralf Becher from TIQ in Germany.

The PHP driver is used in the drupal module developed by Pronovix and also in the brand-new neo4j-symfony. Neomodel 3, the Django-friendly OGM by Robin Edwards uses py2neo under the hood.

The Jan 19th release of the new official 1.1 driver series for .NET, JavaScript and Python adds smart routing and bookmarking capabilities to work seamlessly with causal clusters.

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 repositories.

The Neo4j example movie application

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 contracting 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 feedback@neo4j.com.

If you would love to work on Neo4j drivers and related topics full-time, we’re hiring for positions in the drivers team.

Think you have what it takes to be Neo4j certified?
Show off your graph database skills to the community and employers with the official Neo4j Certification. Click below to get started and you could be done in less than an hour.

Start My Certification