This page walks you through connecting to Neo4j from OCaml and running your first query with the neodriver packages.
bolt://localhost:7687 (the Bolt port), with a user that can run queries.Install the packages from opam:
opam install neodriver neodriver_eio
When developing against a local checkout of the driver, pin the packages instead:
cd ocaml-neo4j-driver opam pin add neodriver_packstream . opam pin add neodriver_core . opam pin add neodriver_eio . opam pin add neodriver . opam install neodriver neodriver_eio eio_main
eio_main provides the Eio_main.run entry point used by the example below.
Declare the dependency in your executable's dune file:
(executable (name hello) (libraries neodriver neodriver_eio eio_main))
Save the following as hello.ml:
open Neodriver
let () =
Eio_main.run (fun env ->
let net = Eio.Stdenv.net env in
let clock = Eio.Stdenv.mono_clock env in
Eio.Switch.run (fun sw ->
let session =
match
Driver.connect ~uri:"bolt://localhost:7687"
~auth:(Conn.basic_auth ~credentials:"your_password" ())
net clock sw
with
| Ok session -> session
| Error error -> failwith (Errors.to_string error)
in
(match Session.run session ~query:"RETURN 1 AS n" ~parameters:[] with
| Ok result -> (
match Neo4jResult.values result with
| Ok [ [ Values.Int n ] ] -> Printf.printf "n = %Ld\n%!" n
| _ -> ())
| Error error -> failwith (Errors.to_string error));
Session.close session))Run it:
dune exec ./hello.exe
You should see n = 1.
Driver.connect parses the URI and returns a lazily connecting Session: no server contact happens until the first query, so the error returned is the same whether the URI is invalid, the server is unreachable or the credentials are wrong. It returns a Session.t — there is no connection pool yet, so each connect produces one session that owns its own connection.Conn.basic_auth builds the authentication token (default principal neo4j; only the basic scheme is supported so far).Session.run sends the query and returns a lazily streamed Neo4jResult. Neo4jResult.values drains it into a list of records, each a list of Values.t; Neo4jResult.consume instead returns the Summary of the query.sw switch passed to Driver.connect hosts the session's connection attempt, so it must outlive the session (it does here, as the session is closed inside Eio.Switch.run).neo4j://) is not implemented yet: a neo4j:// URI fails on first use with a Service_unavailable error. Only bolt://, bolt+s:// (TLS with certificate validation) and bolt+ssc:// (TLS, self-signed allowed) are supported.