By Nigel Small & Michael Hunger, Neo4j Drivers Team Lead & Developer Relations | January 26, 2017
Spring is in the Air
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.
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.
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
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.
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.
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.
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 email@example.com.
If you would love to work on Neo4j drivers and related topics full-time, we’re hiring for positions in the drivers team.
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
About the Author
Nigel Small & Michael Hunger, Neo4j Drivers Team Lead & Developer Relations
Nigel Small is an engineer on the Neo4j team. He created the py2neo driver and the Geoff and Zerograph projects. Nigel has several decades of software development experience within a wide variety of different domains and technologies.
Michael Hunger has been passionate about software development for a very long time. For the last few years he has been working with Neo Technology on the open source Neo4j graph database filling many roles. As Caretaker General of the Neo4j community and ecosystem he especially loves to work with graph-related projects, users and contributors. As a developer Michael enjoys many aspects of programming languages, learning new things every day, participating in exciting and ambitious open source projects and contributing and writing software related books and articles.
From the CEO
Have a Graph Question?
Reach out and connect with the Neo4j staff.Stackoverflow
Share your Graph Story?
Email us: firstname.lastname@example.org