From a one-line Docker command on your laptop to a Raft cluster on Kubernetes. Every option below installs the same Apache 2.0 engine, version 26.10.1.
ArcadeDB runs two ways: as a server your applications reach over the network (client-server mode), or inside your application process with no server at all (embedded Java or embedded Python). Start from what you need:
| You want to | Pick | Mode |
|---|---|---|
| Try ArcadeDB on your laptop in a minute | Docker | Server |
| Run in production on Kubernetes | Helm chart | Server, single node or HA |
| Install on a VM or bare metal without containers | Download, Homebrew or Scoop | Server |
| Put the database inside a Java, Kotlin or Scala app | Maven / Gradle | Embedded |
| Use a database from a Python script or notebook, no server | pip install arcadedb-embedded | Embedded |
| Keep serving through a node failure | HA cluster (Helm, Docker Compose or embedded) | Server cluster |
| Start in a fraction of a second with a small memory footprint | Native image (experimental) | Server |
Once a server is running, the Developer Center has drivers and samples for your language.
The official image is arcadedata/arcadedb on Docker Hub. Start a server and open Studio at http://localhost:2480 (user root):
docker run --rm -p 2480:2480 \
--env ARCADEDB_SETTINGS="-Darcadedb.server.rootPassword=playwithdata" \
arcadedata/arcadedb:26.10.1
Pass ArcadeDB settings in ARCADEDB_SETTINGS and extra JVM flags in JAVA_OPTS, keeping the two apart so the image's own JVM defaults stay in place. The image works with Podman too.
Databases live in /home/arcadedb/databases. Mount a volume there, or the data disappears with the container:
docker run -d --name arcadedb -p 2480:2480 \
-v arcadedb-data:/home/arcadedb/databases \
--env ARCADEDB_SETTINGS="-Darcadedb.server.rootPassword=playwithdata" \
arcadedata/arcadedb:26.10.1
Backups go to /home/arcadedb/backups, logs to /home/arcadedb/log and configuration to /home/arcadedb/config; mount those too if you need them. The JVM heap is sized at 75% of the container memory limit, so set the limit (for example -m 4g) and the heap follows.
PostgreSQL, Bolt, MongoDB, Redis, Gremlin and gRPC are server plugins. This command enables all of them and publishes their default ports:
docker run --rm -p 2480:2480 -p 5432:5432 -p 7687:7687 -p 27017:27017 \
-p 6379:6379 -p 8182:8182 -p 50051:50051 \
--env ARCADEDB_SETTINGS="-Darcadedb.server.rootPassword=playwithdata -Darcadedb.server.plugins=Bolt:com.arcadedb.bolt.BoltProtocolPlugin,Postgres:com.arcadedb.postgres.PostgresProtocolPlugin,MongoDB:com.arcadedb.mongo.MongoDBProtocolPlugin,Redis:com.arcadedb.redis.RedisProtocolPlugin,GremlinServer:com.arcadedb.server.gremlin.GremlinServerPlugin,gRPC:com.arcadedb.server.grpc.GrpcServerPlugin" \
arcadedata/arcadedb:26.10.1
Keep only the plugins you use. The protocols table lists which client to point at each port.
ghcr.io/arcadedata/arcadedb:26.10.1-java17 on GitHub Container Registry. The Docker Hub image runs on Java 21.arcadedata/arcadedb:26.10.1-native is compiled with GraalVM Native Image for fast startup and lower memory. It does not include Gremlin, and settings are passed as trailing -D arguments instead of through ARCADEDB_SETTINGS.More options: Docker documentation.
The official chart is published at https://helm.arcadedb.com/ and listed on
Artifact Hub.
It deploys ArcadeDB as a StatefulSet; with replicaCount above 1 it turns on Raft high availability automatically.
1. Store the root password as a secret:
kubectl create secret generic arcadedb-credentials \
--from-literal=rootPassword='<password>'
2. Add the repository:
helm repo add arcadedb https://helm.arcadedb.com/
helm repo update
3. Install a three-server cluster:
helm install my-arcadedb arcadedb/arcadedb \
--set replicaCount=3 \
--set image.tag=26.10.1 \
--set arcadedb.credentials.rootPassword.secret.name=arcadedb-credentials \
--set arcadedb.credentials.rootPassword.secret.key=rootPassword \
--wait
4. Reach Studio and the HTTP API from your machine:
kubectl port-forward svc/my-arcadedb-http 2480:2480
Storage is ephemeral by default. The chart's arcadedb-data, arcadedb-config,
arcadedb-logs, arcadedb-tmp and arcadedb-raft volumes all start as emptyDir.
For anything beyond a test, replace them with volumeClaimTemplates entries of the same name; the
chart README
has a worked example. The chart can also expose Prometheus metrics with a ServiceMonitor, export OTLP metrics and traces,
and switch logs to JSON; all of these are off by default.
Docs: Kubernetes · source: ArcadeData/arcadedb-helm.
Every release on GitHub Releases
ships these archives, each with a matching .sha256 checksum file:
| Archive | What it is |
|---|---|
arcadedb-26.10.1.tar.gz | The full server distribution for the JVM, with every module, Studio and the console. Runs on Linux, macOS and Windows. Start here. |
arcadedb-26.10.1-base.tar.gz | A minimal base used by the modular distribution builder to assemble packages with only the modules you need. |
arcadedb-26.10.1-linux-x86_64.tar.gz...-linux-aarch_64.tar.gz...-osx-aarch_64.tar.gz...-windows-x86_64.zip | Experimental native-image server binaries, one per platform. Fast startup, smaller memory, no Gremlin. |
arcadedb-openapi-26.10.1.jsonarcadedb-server-26.10.1.proto | The HTTP (OpenAPI) and gRPC (Protobuf) contracts, for generating your own clients. |
Download, verify, unpack and start the server (the JVM distribution needs Java 21; Java 17 builds are published on GitHub Packages):
VERSION=26.10.1
curl -LO https://github.com/ArcadeData/arcadedb/releases/download/$VERSION/arcadedb-$VERSION.tar.gz
curl -LO https://github.com/ArcadeData/arcadedb/releases/download/$VERSION/arcadedb-$VERSION.tar.gz.sha256
echo "$(cut -d' ' -f1 arcadedb-$VERSION.tar.gz.sha256) arcadedb-$VERSION.tar.gz" | shasum -a 256 -c -
tar -xzf arcadedb-$VERSION.tar.gz && cd arcadedb-$VERSION
bin/server.sh # Windows: bin\server.bat
The first start asks you to set the root password. Open Studio at http://localhost:2480, or run bin/console.sh for the console.
brew install arcadedb, then arcadedb-server -Darcadedb.server.rootPassword=<password> on first launch.scoop bucket add extras then scoop install arcadedb.Docs: Installation from binaries, including the modular builder.
In embedded mode the database runs inside your JVM: no server process, no network hop, and the database files sit in a directory you choose. Add the engine from Maven Central:
<dependency>
<groupId>com.arcadedb</groupId>
<artifactId>arcadedb-engine</artifactId>
<version>26.10.1</version>
</dependency>
// Gradle (Kotlin DSL)
implementation("com.arcadedb:arcadedb-engine:26.10.1")
try (DatabaseFactory factory = new DatabaseFactory("./databases/mydb")) {
Database db = factory.exists() ? factory.open() : factory.create();
db.transaction(() -> {
db.getSchema().getOrCreateVertexType("Person");
db.newVertex("Person").set("name", "Alice").save();
});
db.close();
}
Other artifacts share the same group and version:
arcadedb-network: the remote Java client over HTTP (RemoteDatabase).arcadedb-grpc-client: the remote Java client over gRPC.arcadedb-bolt and arcadedb-graphql when you embed a full server.Docs: Java API · Embed a server in your app.
arcadedb-embedded puts the whole engine inside your Python process. The wheel bundles its own Java
runtime, so there is nothing else to install. Wheels are published for Python 3.10 to 3.14 on Linux (x86_64 and ARM64),
macOS (Apple Silicon) and Windows (x86_64). More on the embedded Python page.
pip install arcadedb-embedded
import arcadedb_embedded as arcadedb
with arcadedb.create_database("./mydb") as db:
with db.transaction():
db.command("sql", "CREATE VERTEX TYPE Person")
db.command("sql", "INSERT INTO Person SET name = 'Alice'")
for row in db.query("sql", "SELECT name FROM Person"):
print(row.get("name"))
Need to talk to a server from Python instead? Use the arcadedb-driver HTTP client.
ArcadeDB servers form a cluster with Raft consensus, implemented with Apache Ratis. The leader takes writes and
replicates them; any node can serve reads, and replicas forward writes to the leader. Outside Kubernetes you enable it
on each server with arcadedb.ha.enabled=true and an arcadedb.ha.serverList of peers
(host:raftPort:httpPort, Raft on port 2434 by default). On Kubernetes, the Helm chart above does this for you.
HA is part of the Apache 2.0 build.
The ArcadeData/arcadedb-deployments
repository has ready-to-run scenarios, each tested in CI, with a start.sh to bring it up and a test.sh to prove it works:
Three ArcadeDB servers in Docker Compose with Raft leader election and full replication (replicationFactor=3). The test writes on one node and reads from the other two.
A three-pod HA cluster installed with the official Helm chart on a local kind cluster, with peers found through the headless service DNS.
kubernetesThree Spring Boot apps, each embedding ArcadeDB, forming a Raft cluster among themselves with no standalone server. They serve the recommendation engine use case over REST.
spring-clustergit clone https://github.com/ArcadeData/arcadedb-deployments.git
cd arcadedb-deployments/ha-cluster
./start.sh # 3 nodes, waits until all are healthy
./test.sh # write on node-0, read from node-1 and node-2
docker compose down -v # tear down
Needs Docker 24+, Docker Compose 2+, curl and jq. The sample passwords in these scenarios are for local use only.
Docs: High availability.
Official drivers for Python, TypeScript and Go, the Java API, and Postgres, Neo4j, MongoDB and Redis clients that work unchanged.
Run the official Docker image: docker run --rm -p 2480:2480 --env ARCADEDB_SETTINGS="-Darcadedb.server.rootPassword=playwithdata" arcadedata/arcadedb:26.10.1. Then open http://localhost:2480 and log in to ArcadeDB Studio as root with the password you set.
Mount a volume or a host directory on /home/arcadedb/databases, for example -v arcadedb-data:/home/arcadedb/databases. Without a mount, databases live inside the container and are lost when it is removed.
No. The chart's data, config, logs, tmp and raft volumes all default to emptyDir, so a fresh install is ephemeral. To persist a directory, replace its emptyDir with a volumeClaimTemplates entry of the same name, as shown in the chart README.
Yes. HA is part of the Apache 2.0 build. Servers form a cluster with Raft consensus (Apache Ratis): one leader takes writes and replicates them, and any node can serve reads. With the Helm chart, setting replicaCount above 1 enables Raft HA automatically.
Every archive on the GitHub release page has a matching .sha256 file. Download both, then compare the published hash with a locally computed one, for example with shasum -a 256 or sha256sum.
No. pip install arcadedb-embedded installs a wheel that bundles its own Java runtime, so there is no JAVA_HOME or separate JVM to manage. Wheels are published for Python 3.10 to 3.14 on Linux (x86_64 and ARM64), macOS (Apple Silicon) and Windows (x86_64).