Drivers, protocols and query languages in one place. Pick your language, copy a working sample, and connect. ArcadeDB ships official HTTP and gRPC clients, a native Java API, and wire-protocol compatibility that lets PostgreSQL, Neo4j, MongoDB and Redis clients talk to it unchanged.
Every sample below connects to a server, writes a two-person graph and asks who Alice knows. They
assume a server on localhost with the root password playwithdata and an
existing database called mydb. The fastest way to get there is one Docker command from the
Deployment Center, then:
curl -X POST http://localhost:2480/api/v1/server -u root:playwithdata \
-H "Content-Type: application/json" -d '{"command":"create database mydb"}'
All samples talk to a running server, the client-server deployment. Java and Python can also run the whole database inside your process: see embedded Java and embedded Python.
Install: com.arcadedb:arcadedb-engine:26.10.1 (embedded, runs in your JVM)
try (DatabaseFactory factory = new DatabaseFactory("./databases/mydb")) {
Database db = factory.exists() ? factory.open() : factory.create();
db.transaction(() -> {
db.getSchema().getOrCreateVertexType("Person");
db.getSchema().getOrCreateEdgeType("KNOWS");
MutableVertex alice = db.newVertex("Person").set("name", "Alice").save();
MutableVertex bob = db.newVertex("Person").set("name", "Bob").save();
alice.newEdge("KNOWS", bob);
});
try (ResultSet rs = db.query("sql",
"SELECT expand(out('KNOWS')) FROM Person WHERE name = :name", Map.of("name", "Alice"))) {
rs.stream().forEach(r -> System.out.println(r.getProperty("name")));
}
db.close();
}
To reach a server instead, add com.arcadedb:arcadedb-network and open
new RemoteDatabase("localhost", 2480, "mydb", "root", "playwithdata"): it exposes the same
query(language, command, params) and command(...) calls. For gRPC use
arcadedb-grpc-client. The official Neo4j Java driver also works over Bolt.
Docs: Java API,
remote API,
Java tutorial.
Install: pip install arcadedb-driver (Python 3.10+, sync and async)
from arcadedb_driver import ArcadeDBServer, basic_auth
with ArcadeDBServer(base_url="http://localhost:2480", auth=basic_auth("root", "playwithdata")) as srv:
db = srv.db("mydb")
db.command(language="cypher",
command="CREATE (:Person {name: $a})-[:KNOWS]->(:Person {name: $b})",
params={"a": "Alice", "b": "Bob"})
env = db.query(language="cypher",
command="MATCH (:Person {name: $name})-[:KNOWS]->(f) RETURN f.name AS friend",
params={"name": "Alice"})
for row in env.result: # check env.truncated before trusting a partial answer
print(row["friend"])
Use AsyncArcadeDBServer for asyncio, and arcadedb-driver-grpc for
streaming workloads. Docs: Python HTTP driver,
Python gRPC driver.
Want the database inside your Python process instead? pip install arcadedb-embedded.
Install: npm install @arcadedb/driver (Node.js 20+ and browsers, ESM only)
import { createClient, basicAuth } from "@arcadedb/driver";
const server = createClient({ baseUrl: "http://localhost:2480", auth: basicAuth("root", "playwithdata") });
const db = server.db("mydb");
await db.command({
language: "sqlscript",
command: `CREATE VERTEX TYPE Person IF NOT EXISTS; CREATE EDGE TYPE KNOWS IF NOT EXISTS;
LET a = CREATE VERTEX Person SET name = :a; LET b = CREATE VERTEX Person SET name = :b;
CREATE EDGE KNOWS FROM $a TO $b;`,
params: { a: "Alice", b: "Bob" },
});
const { result, truncated } = await db.query({
language: "cypher",
command: "MATCH (:Person {name: $name})-[:KNOWS]->(f) RETURN f.name AS friend",
params: { name: "Alice" },
});
console.log(result.map((row) => row.friend), truncated);
Import it, do not require() it. For server-to-server streaming use
@arcadedb/driver-grpc (Node, Bun and Deno; no browser build).
Docs: JS HTTP driver,
JS gRPC driver.
Install: go get github.com/ArcadeData/arcadedb-drivers/go/arcadedb@latest
ctx := context.Background()
srv, err := arcadedb.NewServer("http://localhost:2480", arcadedb.WithBasicAuth("root", "playwithdata"))
if err != nil {
log.Fatal(err)
}
defer srv.Close()
db := srv.DB("mydb")
_, err = db.Command(ctx, arcadedb.Cypher,
"CREATE (:Person {name: $a})-[:KNOWS]->(:Person {name: $b})", map[string]any{"a": "Alice", "b": "Bob"})
if err != nil {
log.Fatal(err)
}
env, err := db.Query(ctx, arcadedb.Cypher,
"MATCH (:Person {name: $name})-[:KNOWS]->(f) RETURN f.name AS friend", map[string]any{"name": "Alice"})
if err != nil {
log.Fatal(err)
}
for _, row := range env.Result { // check env.Truncated before trusting a partial answer
fmt.Println(row["friend"])
}
Every call takes a context.Context; there is no default timeout, so set
deadlines on the context. The gRPC client is go/arcadedbgrpc.
Docs: Go HTTP driver,
Go gRPC driver,
Go quickstart.
No official ArcadeDB .NET package yet. The documented route for Cypher is the Neo4j driver over Bolt. Install: dotnet add package Neo4j.Driver and enable the Bolt plugin on the server (port 7687).
using Neo4j.Driver;
await using var driver = GraphDatabase.Driver("bolt://localhost:7687",
AuthTokens.Basic("root", "playwithdata"));
await using var session = driver.AsyncSession(o => o.WithDatabase("mydb"));
await session.RunAsync("CREATE (:Person {name: $a})-[:KNOWS]->(:Person {name: $b})",
new { a = "Alice", b = "Bob" });
var cursor = await session.RunAsync(
"MATCH (:Person {name: $name})-[:KNOWS]->(f) RETURN f.name AS friend", new { name = "Alice" });
await foreach (var record in cursor)
Console.WriteLine(record["friend"].As<string>());
For SQL, Npgsql works over the PostgreSQL wire protocol; add
Server Compatibility Mode=NoTypeLoading to the connection string. Plain HttpClient
against the HTTP/JSON API needs no package at all.
Docs: C# connection options,
Bolt.
No driver needed: any language that can send an HTTP request can use ArcadeDB.
# Create two people and an edge
curl -X POST http://localhost:2480/api/v1/command/mydb -u root:playwithdata \
-H "Content-Type: application/json" \
-d '{"language":"cypher","command":"CREATE (:Person {name: $a})-[:KNOWS]->(:Person {name: $b})","params":{"a":"Alice","b":"Bob"}}'
# Who does Alice know?
curl -X POST http://localhost:2480/api/v1/query/mydb -u root:playwithdata \
-H "Content-Type: application/json" \
-d '{"language":"cypher","command":"MATCH (:Person {name: $name})-[:KNOWS]->(f) RETURN f.name AS friend","params":{"name":"Alice"}}'
The server publishes an OpenAPI spec and Swagger UI at /api/v1/docs, and the spec is
attached to every GitHub release. Docs: HTTP API reference.
These languages have no official ArcadeDB package. They connect through a standard driver for one of the wire protocols ArcadeDB speaks, as documented in the ArcadeDB docs.
| Language | Documented clients | Docs |
|---|---|---|
| Rust | postgres (PostgreSQL), neo4rs (Bolt), reqwest (HTTP) | Rust |
| Ruby | pg, neo4j-ruby-driver, Net::HTTP | Ruby |
| C | libpq, libcurl | C |
| C++ | libpqxx, cpp-httplib | C++ |
| R | RPostgres, httr2 | R |
| Elixir | HTTPoison, Req (HTTP) | Elixir |
| JVM via JDBC | PostgreSQL JDBC driver | JDBC |
Anything with a gRPC toolchain can also generate a client from arcadedb-server.proto,
which is attached to every ArcadeDB release.
ArcadeDB runs SQL, OpenCypher, Gremlin and GraphQL on the same engine and the same records, so you can pick the language per query rather than per database. Teams moving from Neo4j keep their Cypher (see ArcadeDB vs Neo4j); teams building a knowledge graph often mix SQL for filtering with Cypher for traversals. Start with this tiny dataset:
-- SQL script (language "sqlscript"): Alice knows Bob and Carol
CREATE VERTEX TYPE Person; CREATE EDGE TYPE KNOWS;
CREATE VERTEX Person SET name = 'Alice';
CREATE VERTEX Person SET name = 'Bob';
CREATE VERTEX Person SET name = 'Carol';
CREATE EDGE KNOWS FROM (SELECT FROM Person WHERE name = 'Alice') TO (SELECT FROM Person WHERE name = 'Bob');
CREATE EDGE KNOWS FROM (SELECT FROM Person WHERE name = 'Alice') TO (SELECT FROM Person WHERE name = 'Carol');
Each tab asks the same question, "who does Alice know?", and returns Bob and Carol.
MATCH (:Person {name: 'Alice'})-[:KNOWS]->(f:Person)
RETURN f.name AS friend
Native OpenCypher engine. Also reachable over Bolt with any Neo4j driver. Cypher reference
-- traversal function
SELECT name FROM (SELECT expand(out('KNOWS')) FROM Person WHERE name = 'Alice')
-- or pattern matching
MATCH {type: Person, where: (name = 'Alice')}-KNOWS->{as: f}
RETURN f.name AS friend
ArcadeDB SQL adds graph traversal (out(), in(), both()) and
MATCH to standard SELECT.
SQL reference
g.V().has('Person', 'name', 'Alice').out('KNOWS').values('name')
Runs through the HTTP API with "language": "gremlin", or through Gremlin Server
(port 8182) with any Apache TinkerPop driver.
Gremlin reference
# 1. Declare the types once per database open (requires the updateSchema right)
type Query { personByName(name: String): Person }
type Person {
name: String
friends: [Person] @relationship(type: "KNOWS", direction: OUT)
}
# 2. Query
{ personByName(name: "Alice") { name friends { name } } }
GraphQL type definitions are not stored in the database: submit them after the database is opened, then query. GraphQL reference
The MongoDB query language is available too, through the MongoDB wire protocol. All four languages above
work from every driver on this page by changing the language field.
The Python, TypeScript and Go clients live in ArcadeData/arcadedb-drivers. Each one is generated from the OpenAPI spec or the Protobuf contract that the ArcadeDB server publishes, and CI fails the build if the generated code drifts from the contract. All six are Apache-2.0 and released together; version 0.2.0 was generated against ArcadeDB server 26.10.1. They are pre-1.0, so pin a version. The Java clients ship with every ArcadeDB release and share its version number.
| Language | Package | Transport | Install | Status | Links |
|---|---|---|---|---|---|
| Python | arcadedb-driver | HTTP | pip install arcadedb-driver | 0.2.0, pre-1.0 | PyPI · Docs |
| Python | arcadedb-driver-grpc | gRPC | pip install arcadedb-driver-grpc | 0.2.0, pre-1.0 | PyPI · Docs |
| TypeScript / JS | @arcadedb/driver | HTTP | npm install @arcadedb/driver | 0.2.0, pre-1.0 | npm · Docs |
| TypeScript / JS | @arcadedb/driver-grpc | gRPC | npm install @arcadedb/driver-grpc | 0.2.0, pre-1.0 | npm · Docs |
| Go | .../go/arcadedb | HTTP | go get github.com/ArcadeData/arcadedb-drivers/go/arcadedb@latest | 0.2.0, pre-1.0 | pkg.go.dev · Docs |
| Go | .../go/arcadedbgrpc | gRPC | go get github.com/ArcadeData/arcadedb-drivers/go/arcadedbgrpc@latest | 0.2.0, pre-1.0 | pkg.go.dev · Docs |
| Java | com.arcadedb:arcadedb-engine | Embedded | Maven / Gradle, version 26.10.1 | Released with ArcadeDB | Maven Central · Docs |
| Java | com.arcadedb:arcadedb-network | HTTP | Maven / Gradle, version 26.10.1 | Released with ArcadeDB | Docs |
| Java | com.arcadedb:arcadedb-grpc-client | gRPC | Maven / Gradle, version 26.10.1 | Released with ArcadeDB | Docs |
Use HTTP by default: it works in browsers and serverless functions, needs the fewest dependencies, and fits
existing proxies and gateways. Reach for gRPC when the workload is sustained server-to-server traffic, such as
streaming large result sets or bulk inserts over one long-lived connection. The gRPC drivers have no browser build
because the server's gRPC endpoint is plain HTTP/2 gRPC without gRPC-Web. The HTTP drivers return the whole result
envelope, including a truncated flag, so always check it before treating a result as complete.
The background is in the native drivers announcement.
One ArcadeDB server can speak several protocols at once, all against the same databases. HTTP is always on;
the others are server plugins you enable with arcadedb.server.plugins (the
Docker section of the Deployment Center has a command that turns them all on).
The client-server guide covers each protocol in depth.
| Protocol | Default port | Enable | Client to use | Docs |
|---|---|---|---|---|
| HTTP / JSON | 2480 | Always on | The official HTTP drivers, Java RemoteDatabase, or any HTTP client. Every query language, plus Studio and admin. |
HTTP API |
| gRPC | 50051 | gRPC:com.arcadedb.server.grpc.GrpcServerPlugin |
The official gRPC drivers, Java arcadedb-grpc-client, or a client generated from arcadedb-server.proto. |
gRPC API |
| PostgreSQL wire | 5432 | Postgres:com.arcadedb.postgres.PostgresProtocolPlugin |
psql, PostgreSQL JDBC, psycopg, pg, pgx, Npgsql, and BI tools. Prefix with {cypher}, {gremlin} or {graphql} to switch language. |
PostgreSQL |
| Neo4j Bolt | 7687 | Bolt:com.arcadedb.bolt.BoltProtocolPlugin |
Official Neo4j drivers for Java, Python, JavaScript, .NET and Go work unchanged: point them at bolt://host:7687. |
Bolt |
| MongoDB wire | 27017 | MongoDB:com.arcadedb.mongo.MongoDBProtocolPlugin |
Standard MongoDB drivers, such as pymongo. |
MongoDB |
| Redis wire | 6379 | Redis:com.arcadedb.redis.RedisProtocolPlugin |
Any Redis client, such as redis-py, for transient and persistent key-value access. |
Redis |
| Gremlin Server | 8182 | GremlinServer:com.arcadedb.server.gremlin.GremlinServerPlugin |
Apache TinkerPop drivers (Java, Python, JavaScript, .NET, Go). | Gremlin |
| MCP | 2480, /api/v1/mcp | Bundled in the standard distribution | LLM clients that speak the Model Context Protocol. | MCP server |
Everything else you need, from reference docs to free courses with a certificate in the ArcadeDB Academy.
Languages and drivers, query language references, settings and operations.
docs.arcadedb.comFree, self-paced courses with quizzes and a completion certificate.
Start learningRunnable projects and sample datasets to learn from and adapt.
Browse examplesFrameworks, BI tools and AI libraries that work with ArcadeDB.
See integrationsDocker, Kubernetes with Helm, downloads, Maven, pip and HA clusters.
Deployment CenterStart a server with Docker, install the driver for your language, and paste a sample from above.
Yes. The arcadedb-drivers repository publishes six Apache-2.0 clients: an HTTP and a gRPC client each for Python (arcadedb-driver, arcadedb-driver-grpc on PyPI), TypeScript/JavaScript (@arcadedb/driver, @arcadedb/driver-grpc on npm) and Go (github.com/ArcadeData/arcadedb-drivers/go/arcadedb and go/arcadedbgrpc). Java applications use the ArcadeDB Java API from Maven Central, either embedded (arcadedb-engine) or remote (arcadedb-network for HTTP, arcadedb-grpc-client for gRPC).
Start with HTTP. It works everywhere, including browsers and serverless functions, and needs the fewest dependencies. Move a workload to gRPC when it is throughput-sensitive server-to-server traffic, such as large streamed result sets or bulk inserts. Browsers cannot use the gRPC driver, because the ArcadeDB gRPC server has no gRPC-Web endpoint.
Yes. Enable the Bolt plugin (Bolt:com.arcadedb.bolt.BoltProtocolPlugin) and the server listens on port 7687. The official Neo4j drivers for Java, Python, JavaScript, .NET and Go connect to bolt://host:7687 and run Cypher against ArcadeDB without code changes beyond the connection URL and credentials.
There is no official ArcadeDB .NET package yet. The documented routes are the Neo4j.Driver package over the Bolt protocol for Cypher, Npgsql over the PostgreSQL wire protocol for SQL (add Server Compatibility Mode=NoTypeLoading to the connection string), or HttpClient against the HTTP/JSON API.
SQL, OpenCypher, Gremlin, GraphQL and the MongoDB query language all run on the same engine and the same data. Over HTTP and in the native drivers you pick the language per call with the language field; over the PostgreSQL protocol you prefix the statement with {cypher}, {gremlin} or {graphql}.