Neo4j Developer Guides

Neo4j Developer Resources

Everything you need to become an expert in Neo4j

Getting Started

2. Querying Data

There is nothing worse than an empty database. You can either download one of our example data set or model and import your own from many sources.

3. Build your application

You can use our suite of Neo4j products to share your data or build out your own application in the programming language of your preference.

What is a Graph Database (in under 10 Minutes)

Start with a Use Case

Real-time Recommendations

Create a free Neo4j Movies and Recommendations example datasets

Generate personalized real-time recommendations using a dataset of movie reviews.

Network Management

Neo4j Network Management Example

Dependency and root cause analysis + more for network and IT management.

Fraud Detection

Neo4j Fraud Detection Data Model

Fraud detection with the Paysim financial dataset, Neo4j Graph Data Science, and Neo4j Bloom.

Code Examples by Language

Neo4j officially supports drivers for .Net, Java, Node.js, GoLang and Python. Our community contributors provide many more, including PHP, Ruby, R, Erlang and Clojure.

// Add your the driver dependency to your pom.xml build.gradle etc.
// Java Driver Dependency: http://search.maven.org/#artifactdetails|org.neo4j.driver|neo4j-java-driver|4.0.1|jar
// Reactive Streams http://search.maven.org/#artifactdetails|org.reactivestreams|reactive-streams|1.0.3|jar
// download jars into current directory
// java -cp "*" Example.java

import org.neo4j.driver.*;
import static org.neo4j.driver.Values.parameters;

public class Example {

  public static void main(String...args) {

    Driver driver = GraphDatabase.driver("neo4j+s://demo.neo4jlabs.com:7687",
              AuthTokens.basic("mUser","s3cr3t"));

    try (Session session = driver.session(SessionConfig.forDatabase("movies"))) {

      String cypherQuery =
        "MATCH (m:Movie {title:$movieTitle})<-[:ACTED_IN]-(a:Person) RETURN a.name as actorName";

      var result = session.readTransaction(
        tx -> tx.run(cypherQuery,
                parameters("movieTitle","The Matrix"))
            .list());

      for (Record record : result) {
        System.out.println(record.get("actorName").asString());
      }
    }
    driver.close();
  }
}
Node.js
// npm install --save neo4j-driver
// node example.js
const neo4j = require('neo4j-driver');
const driver = neo4j.driver('neo4j+s://demo.neo4jlabs.com:7687',
                  neo4j.auth.basic('mUser', 's3cr3t'),
                  {/* encrypted: 'ENCRYPTION_OFF' */});

const query =
  `
  MATCH (m:Movie {title:$movieTitle})<-[:ACTED_IN]-(a:Person) RETURN a.name as actorName
  `;

const params = {"movieTitle": "The Matrix"};

const session = driver.session({database:"movies"});

session.run(query, params)
  .then((result) => {
    result.records.forEach((record) => {
        console.log(record.get('actorName'));
    });
    session.close();
    driver.close();
  })
  .catch((error) => {
    console.error(error);
  });
# pip3 install neo4j-driver
# python3 example.py

from neo4j import GraphDatabase, basic_auth

driver = GraphDatabase.driver(
  "neo4j+s://demo.neo4jlabs.com:7687",
  auth=basic_auth("mUser", "s3cr3t"))

cypher_query = '''
MATCH (m:Movie {title:$movieTitle})<-[:ACTED_IN]-(a:Person) RETURN a.name as actorName
'''

with driver.session(database="movies") as session:
  results = session.read_transaction(
    lambda tx: tx.run(cypher_query,
      movieTitle="The Matrix").data())

  for record in results:
    print(record['actorName'])

driver.close()
// go mod init main
// go run example.go
package main
import (
	"fmt"
	"github.com/neo4j/neo4j-go-driver/neo4j" //Go 1.8
)
func main() {
	s, err := runQuery("bolt://demo.neo4jlabs.com:7687", "mUser", "s3cr3t")
	if err != nil {
		panic(err)
	}
	fmt.Println(s)
}
func runQuery(uri, username, password string) ([]string, error) {
	configForNeo4j4 := func(conf *neo4j.Config) { conf.Encrypted = false }
	driver, err := neo4j.NewDriver(uri, neo4j.BasicAuth(username, password, ""), configForNeo4j4)
	if err != nil {
		return nil, err
	}
	defer driver.Close()
	sessionConfig := neo4j.SessionConfig{AccessMode: neo4j.AccessModeRead, DatabaseName: "movies"}
	session, err := driver.NewSession(sessionConfig)
	if err != nil {
		return nil, err
	}
	defer session.Close()
	results, err := session.ReadTransaction(func(transaction neo4j.Transaction) (interface{}, error) {
		result, err := transaction.Run(
			`
			MATCH (m:Movie {title:$movieTitle})<-[:ACTED_IN]-(a:Person) RETURN a.name as actorName
			`, map[string]interface{}{
				"movieTitle": "The Matrix",
			})
		if err != nil {
			return nil, err
		}
		var arr []string
		for result.Next() {
			value, found := result.Record().Get("actorName")
			if found {
			  arr = append(arr, value.(string))
			}
		}
		if err = result.Err(); err != nil {
			return nil, err
		}
		return arr, nil
	})
	if err != nil {
		return nil, err
	}
	return results.([]string), err
}
.NET
// install dotnet core on your system
// dotnet new console -o .
// dotnet add package Neo4j.Driver
// paste in this code into Program.cs
// dotnet run

using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using Neo4j.Driver;

namespace dotnet {
  class Example {
  static async Task Main() {
    var driver = GraphDatabase.Driver("neo4j+s://demo.neo4jlabs.com:7687",
                    AuthTokens.Basic("mUser", "s3cr3t"));

    var cypherQuery =
      @"
      MATCH (m:Movie {title:$movieTitle})<-[:ACTED_IN]-(a:Person) RETURN a.name as actorName
      ";

    var session = driver.AsyncSession(o => o.WithDatabase("movies"));
    var result = await session.ReadTransactionAsync(async tx => {
      var r = await tx.RunAsync(cypherQuery,
              new { movieTitle="The Matrix"});
      return await r.ToListAsync();
    });

    await session?.CloseAsync();
    foreach (var row in result)
      Console.WriteLine(row["actorName"].As<string>());

    }
  }
}

Neo4j Community Site

If you’re ever stuck, need help or general feedback, you can head over to the Neo4j Community Site to get help. We have an active community of members who are more than happy to help. Why not come and Introduce yourself? Do you have a side-project that you’re excited about or have an idea and would like to find collaborators? Tell us in the Projects & Collaboration category.