默认端口为 2480,启动后需在浏览器访问 http://localhost:2480 进入 Studio;root 密码必须通过 ARCADEDB_SETTINGS 显式设置;数据库设置放 ARCADEDB_SETTINGS、JVM 参数放 JAVA_OPTS,混用会覆盖镜像自带的 GC 与堆配置;minimal、headless、base 发行版分别剔除了 gremlin、redisw、mongodbw、graphql、studio 等模块,需要这些功能要选 full 或自定义构建。

arcadedb
ArcadeDataApache-2.0活跃维护一款多模型数据库管理系统,用一套引擎同时支持图、文档、键值和向量嵌入,兼容 SQL、Cypher、Gremlin、MongoDB 与 Redis 协议,适合需要统一存储多种数据模型的场景。
ArcadeDB Multi-Model Database, one DBMS that supports SQL, Cypher, Gremlin, HTTP/JSON, MongoDB and Redis. ArcadeDB is a conceptual fork of OrientDB, the first Multi-Model DBMS. ArcadeDB supports Vector Embeddings.
docker run --rm -p 2480:2480 -v arcadedb-config:/home/arcadedb/config -v arcadedb-databases:/home/arcadedb/databases -e ARCADEDB_SETTINGS="-Darcadedb.server.rootPassword=playwithdata" arcadedata/arcadedb:latestREADME 未说明具体显存或 GPU 要求;服务端以 Docker 镜像运行,堆内存按容器内存上限的百分比自动调整,因此 512MB 容器到多 GB 生产容器都能运行。
多模型数据库,一个 DBMS 同时支持 SQL、Cypher、Gremlin、MongoDB 和 Redis 协议
一款多模型数据库管理系统,用一套引擎同时支持图、文档、键值和向量嵌入,兼容 SQL、Cypher、Gremlin、MongoDB 与 Redis 协议,适合需要统一存储多种数据模型的场景。
核心能力
- 用 SQL、Cypher、Gremlin 多种查询语言访问同一份数据
- 兼容 MongoDB 和 Redis 线协议,可直接复用现有客户端
- 支持向量嵌入(Vector Embeddings)存储与检索
- 提供 Docker 与 Kubernetes 部署方式,自带 Studio 可视化界面
- 可按需裁剪模块,构建自定义发行包
容易踩的坑
- 26.11.1最新正式版2026-11-04 · 2026-11-04 21:21 UTC
ArcadeDB 26.11.1
Overview
887 issues and pull requests closed under the 26.11.1 milestone - 651 issues and 236 pull requests - out of 483 pull requests merged and about 690 commits since 26.10.2. 468 of the closed issues are bug fixes, 28 of them rated critical.
The headline work is in six places:
- Transactions that behave like SQL - a statement that fails inside a transaction is now taken back on its own (statement-level savepoints) and the transaction goes on,
UPDATE ... SETreads the row as it was before the statement, an explicitNULLis stored asNULL, andCREATE INDEXno longer misses records other sessions have not committed yet. - Crash safety and durability - recovery after a power loss (Jepsen LazyFS) repairs torn pages and quarantines what it cannot recover instead of serving it, vector and sparse vector indexes survive a crash right after their build, and a growing record can no longer overwrite its neighbour on the page.
- Vector search - the Cypher 25
SEARCHclause, Neo4j'sCREATE VECTOR INDEX/CREATE FULLTEXT INDEXDDL, a pre-filter fordb.index.vector.queryNodes,PRODUCTandBINARYindexes that search on their compressed codes and re-rank, and a graph build 2.3x faster on largeINT8indexes. - Operations - databases nobody uses can close and reopen on demand, a database that is only read holds no WAL file, every Docker image runs as UID 1000, the native image states its CPU baseline (with a compatibility archive for older x86 CPUs) and is built at
-O3, and Claude Code can connect to your own server through the new ArcadeDB plugin. - Wire protocols - the PostgreSQL catalog answers what psql, pgjdbc and psqlodbc ask (
\d,\dt,\di,\dm,\df,\du, JDBC metadata), PostgreSQL results stream in chunks, Redis pipelining runs at 0.8-0.9x of Redis on one connection and 2x under heavy load, and every protocol re-resolves a database after a close, restore or drop. - Security hardening - the users, groups and API-token files are never replaced by a default on a bad reload, plugin routes answer only the method they declare, wrong Basic credentials answer 401, and the HA cluster token can no longer change silently on a rolling restart.
Upgrading is recommended for every deployment. This release changes several answers to be correct (SQL, Cypher temporals, string functions, HTTP status codes), changes the Docker user and drops the plain Kubernetes StatefulSet: read the Upgrade notes before upgrading.
Contents: New features · Highlights · Security · Performance · Major fixes and improvements · Upgrade notes · Dependency updates
New features
Vector and full-text search
- Cypher 25
SEARCHclause (#10776, #10783).MATCH (d:Doc) SEARCH d IN (VECTOR INDEX idx FOR $q [WHERE p] LIMIT k) SCORE AS sruns the vector search first and bindsdto theknearest records; the innerWHEREis tested on each candidate during the search, which widens until it haskmatching rows. It used to be parsed and dropped, answering everyDoc. - Neo4j index DDL in openCypher (#10678, #10864, #10914, #10994, #10915, #10992).
CREATE VECTOR INDEXandCREATE FULLTEXT INDEXbuildLSM_VECTORand `FULL_T
- Transactions that behave like SQL - a statement that fails inside a transaction is now taken back on its own (statement-level savepoints) and the transaction goes on,
- 26.10.22026-10-15 · 2026-10-15 18:03 UTC
查看更新说明
ArcadeDB 26.10.2
Overview
682 issues and pull requests closed under the 26.10.2 milestone - 485 issues and 197 pull requests - out of 355 pull requests merged and about 1,360 commits since 26.10.1. 377 of the closed issues are bug fixes, 20 of them rated critical.
The headline work is in six places:
- Query control and speed - a JVM-wide query admission gate, list and terminate running queries over HTTP and every wire protocol, SQL and openCypher statements that differ only in their literals now share one parsed statement and one plan (a point lookup with the value in the text is 3 to 7 times faster), a parallel
GROUP BYthat evaluates each key once, and Customizable Contraction Hierarchies for shortest paths. - High availability (Raft) - schema and database-setting changes made outside a DDL statement now reach every node, vectors inserted on a follower no longer replace other vectors, an in-place Ratis restart no longer double-applies a commit, and a node removed from the Raft configuration is fenced. A follower's refusal of a write is a redirect on Bolt, MongoDB, Redis and gRPC, naming the leader.
- Time series and Prometheus - retention and compaction no longer corrupt or resurrect data in the sealed store, writes that used to be stored silently wrong are refused or reported, and PromQL follows Prometheus on a dozen edge cases.
- openCypher - temporal values (
time(),localtime(), zoneddatetime(),duration()) are stored natively,MERGEmatches exactly whatMATCHmatches, GQL constructs the engine used to ignore are refused, and thepath.*procedures answer as APOC does. - Security hardening - open wire-protocol and
/wssessions re-check the user on every request, SQL classifies a statement by everything nested inside it, lightweight edge types enforce create and delete grants, a type'sEXTERNALbucket follows the type's permissions, and Studio no longer runs HTML from an AI answer. - Silent wrong data - lost keys during a concurrent commit, a schema reload that issued the same RID twice, a schema change lost at close, LSM compaction resetting the null strategy, and WAL recovery re-issuing transaction ids.
Upgrading is recommended for every deployment, and in particular for every HA cluster and every time series workload. Behavior changes are collected in Upgrade notes.
Contents: New features · Highlights · Security · Major fixes and improvements · Upgrade notes · Dependency updates
New features
Server and operations
- Query admission gate (#9518). A FIFO queue in front of every remote protocol (HTTP, Postgres, Bolt, Redis, MongoDB, gRPC, MCP): when the server is busy, requests wait and start in arrival order instead of all starting at once and exhausting the heap. On by default (
arcadedb.queryMaxConcurrent, 2 x cores and at least 4,0disables it), bounded byarcadedb.queryQueueTimeoutandarcadedb.queryQueueMaxSize, and heap-aware througharcadedb.queryAdmissionHeapWatermark. A refused request is retryable on every protocol (HTTP 503, Postgres40001, RedisTRYAGAIN). - List and terminate running queries (#9680, #9689).
list queries [database <db>] [tag <t>],terminate query <id>,terminate queries tag <t>,list transactionsandterminate transaction <sessionId>overPOST /api/v1/server, with anX-ArcadeDB-Query-Tagheader to find your own statements and an acknowledgement that says whether the statement stopped. Bolt, gRPC (streaming loads included), MCP,
- Query control and speed - a JVM-wide query admission gate, list and terminate running queries over HTTP and every wire protocol, SQL and openCypher statements that differ only in their literals now share one parsed statement and one plan (a point lookup with the value in the text is 3 to 7 times faster), a parallel
- 26.10.12026-10-05 · 2026-10-05 20:05 UTC
查看更新说明
ArcadeDB 26.10.1
Overview
1,615 issues and pull requests closed under the 26.10.1 milestone - 1,244 issues and 371 pull requests - out of 846 pull requests merged and about 3,100 commits since 26.9.1. 984 of the closed issues are bug fixes, 75 of them rated critical.
The headline work is in six places:
- High availability (Raft) - snapshot install, follower catch-up, leadership hand-off, readiness gating and restart recovery were hardened end to end. Followers stuck at a stale term, divergence after a graceful restart and resyncs that reopened stale files are closed.
- Lost updates and silent wrong data - concurrent read-modify-write on growing and multi-page records, hash-index key changes applied twice,
MERGE ... ON MATCH SET n = n + 1losing an increment, and stale-read writes are now refused or merged correctly. - Query speed - parallel filtered scans, parallel
DISTINCTand Cypher aggregation,ORDER BY ... LIMITanswered from index order,LIKE 'prefix%'andmin()/max()served by the index, a striped database lock so concurrent RID lookups scale, and a LET subquery cache. - Equality and comparison now agree everywhere - index, SQL scan and Cypher gave different answers for
FLOAT/DOUBLE,DECIMAL,DATETIME,BOOLEAN, null and signed zero. They give the same answer now. - Wire protocols - the Postgres, MongoDB, Redis, Bolt, gRPC and Gremlin front ends got more than a hundred protocol-fidelity fixes, plus TLS for the Postgres wire protocol.
- Vector search - rebuild loops, compaction races, grouped search, empty filters and sparse-vector ranking.
Upgrading is recommended for every deployment, and in particular for every HA cluster. Behaviour changes are collected in Upgrade notes.
Contents: New features · Highlights · Security advisories · Major fixes and improvements · Upgrade notes · Dependency updates
New features
Server and operations
- TLS/SSL for the Postgres wire protocol (#8840).
- Opt-in OTLP log export, an OTLP/HTTP metrics endpoint fix, and
service.namein tracing (#7727, #7294, #7295). - Persistent instance id (
adb-<uuid>) shown in Studio, thearcadedb.support.idsetting, and Studio support requests that run a read-only query support asked for and send the result back (#8685, #8682, #8861). - A configurable config directory (#7415) and compact object headers enabled by
server.shwhen the JVM accepts them (#4537). HEADon/readyand/health(#8133); the HTTP server binds every local address the configured host resolves to (#8692).- Pool metrics for the per-server security executors (#7856).
- Read-your-writes bookmark (
X-ArcadeDB-Commit-Index) on streamed HTTP responses (#7351), and streaming ingestion with a temporary-id mapping returned chunk by chunk (#7353). - Startup
restore:publishes progress and waits out a conflicting operation ([#7440](https
- 26.9.12026-09-03 · 2026-09-03 19:29 UTC
查看更新说明
ArcadeDB 26.9.1
Overview
This is the largest release ArcadeDB has ever shipped: 992 issues and pull requests closed under the 26.9.1 milestone - 675 issues and 317 pull requests - out of 655 pull requests merged and 1,500 commits in total since 26.8.1.
The headline work is in five places:
- Backup and restore - a full backup is 27.6x faster, a restore runs in parallel, and neither freezes page flushing any more, so writers keep working while a backup runs.
- Storage integrity - the family of defects around records that outgrow a page is closed: silent lost updates, a record returned twice by a scan, false conflicts, and a 16% chunk-slot space leak that nothing ever reclaimed.
- Query correctness -
NOT INon an indexed property returned theINresult set,DISTINCT ... ORDER BY ... LIMITreturned too few rows, a multi-keyGROUP BYgrouped on the last key only, and an index range scan could return rows theWHEREclause excluded. All fixed, with regression tests. - Indexes are used where they were not - a literal
IN (...)list, a composite-index prefix withORDER BY,BETWEEN,@rid IN [...]and a Cypher label disjunction all take the index now instead of a full scan. - Vector search - opening a database is constant-time again regardless of index size, rebuilds are scheduled instead of blocking the first query, and recall stopped degrading past 10,000 vectors.
Upgrading is strongly recommended for every deployment. There are breaking changes and behaviour changes - they are collected in Breaking changes and upgrade notes and each is called out again where it belongs. No schema migration is required, and no existing database is rewritten.
Contents: Highlights · Security advisories · New features · Major fixes and improvements · Breaking changes and upgrade notes · Dependency updates
Highlights
Backups are 27.6x faster and no longer stall the database
A full backup ran single-threaded deflate at level 9, CPU-bound at 20-40 MB/s, and it suspended page flushing for the whole window: dirty pages piled up until
arcadedb.flushSuspendMaxDeferredRAMwas reached, committers were throttled, and LSM compaction was postponed. HA snapshot shipping and cluster verify did the same thing (#6072, #6075, #6086).Measured on a 1.25 GB database:
measurement before after full backup 18.88 s 0.68 s (27.6x) concurrent writer throughput during the backup 4.3% of baseline 77% of baseline restore 2.9 s 0.68 s archive size 323 MB 348 MB (+7.5%) - Parallel compression, tunable with
arcadedb.backup.compressionLevel(new default 1, was 9),arcadedb.backup.compressionThreadsandarcadedb.backup.maxMBPerSecond. The ZIP format is unchanged and archives written by older versions restore normally. - Parallel restore, largest entry first, behind a 256 KB buffered read instead of
ZipInputStream's unbuffered 512-byte reads (arcadedb.restore.threads). Even the sequential path went 5.16 s to 3.96 s. - A page-level copy-on-write snapshot replaces flush suspension:
arcadedb.pageSnapshotEnabled,arcadedb.pageSnapshotMaxRAM,arcadedb.pageSnapshotMaxSize,arcadedb.pageSnapshotSpillPath. Backups, HA snapshot shipping and the/checksumsendpoint now take a point-in-time view without ever stopping the flusher. - Two JVM-wide stalls are gone with it. The deferred-flush backpressure gate wa
- 26.8.12026-08-03 · 2026-08-03 21:15 UTC
查看更新说明
ArcadeDB 26.8.1
Overview
This is a major release: 381 issues and pull requests closed under the 26.8.1 milestone - 281 issues and 100 PRs - out of 298 pull requests merged and 669 commits in total since 26.7.2. It also carries everything shipped in the 26.7.3 hotfix.
The headline work is in four places:
- Security - 13 advisories closed, most of them on the wire protocols and the MCP endpoint.
- Concurrency - concurrent writes to unrelated records of the same page no longer conflict, which is what made ArcadeDB usable under real multi-writer load on types with few buckets.
- Graph integrity - a family of vertex/edge delete defects that could silently lose edges under concurrency is closed, and deleting a super-node vertex got 5x faster along the way.
- Storage and indexes - bloom filters on compacted LSM series, a schema dictionary that is no longer capped at one page, a geospatial index that costs one entry per point instead of eleven, and TimeSeries TAG columns that are dictionary-encoded.
Upgrading is strongly recommended for every deployment. There are breaking changes and behaviour changes - they are collected in Breaking changes and upgrade notes and each is called out again where it belongs. No schema migration is required, and no existing database is rewritten.
Contents: Highlights · Security advisories · New features · Major fixes and improvements · Breaking changes and upgrade notes · Dependency updates
Highlights
Concurrent writes to unrelated records of the same page no longer conflict
ArcadeDB detects write conflicts per page, so two transactions that touched the same bucket page raised a
ConcurrentModificationExceptioneven when they wrote completely unrelated records that merely happened to share it. On a type with few buckets and many concurrent writers this made a retry pointless: the retry ran straight into the same collision (#5279).All three halves of that are gone:
- Inserts into one page reserve their slot per in-flight transaction, so concurrent inserts get different positions (and different RIDs) instead of all being handed the same one.
- Updates are replayed by the commit-time disjoint-slot merge whenever they stayed inside the page, which now includes a record that grew - a longer string, one more property - and not only an overwrite of the same size or smaller. Growth is the normal update shape, so leaving it out kept concurrent updates conflicting.
- Deletes of a plain in-place record are replayed too (#5569). Such a delete only zeroes one slot-table entry, so it commutes with writes to every other slot.
Measured on the reported workload (one single bucket,
attempts=1, no retry):Scenario Before After Concurrent inserts ~1750 conflicts / 2000 0 Concurrent sub-graph creation (6 vertices + 5 edges per transaction) ~270 / 320 0 10 transactions updating 10 different records of one page 9 failed / 10 0 Sustained updates, 8 writers on their own records of one page ~2083 / 2880 0 8 deletes + 8 updates of 16 different records of one page 15 failed / 16 0 10 transactions deleting 10 different records of one page 9 failed / 10 0 A
ConcurrentModificationExceptionis still raised - by design - when two transactions really write the same record: a byte-for-byte pre-image check makes sure no concurrent write is ever silently overwritten. Nothing changes for single-writer workloads
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
ArcadeDB is a Multi-Model DBMS created by Luca Garulli, the same founder of OrientDB, after SAP's acquisition. Written from scratch with a brand-new engine made of Alien Technology, ArcadeDB is able to crunch millions of records per second on common hardware with minimal resource usage. ArcadeDB reuses OrientDB's SQL engine (heavily modified) and some utility classes. It's written in LLJ: Low Level Java - still Java21+ but only using low level APIs to leverage advanced mechanical sympathy techniques and reduce Garbage Collector pressure. Highly optimized for extreme performance, it runs from a Raspberry Pi to multiple servers on the cloud.
ArcadeDB is fully transactional DBMS with support for ACID transactions, structured and unstructured data, native graph engine (no joins but links between records), full-text indexing, geospatial querying, and advanced security.
ArcadeDB supports the following models:
- Graph Database (compatible with Neo4j Cypher, Apache Tinkerpop Gremlin and OrientDB SQL)
- Document Database (compatible with the MongoDB driver + MongoDB queries and OrientDB SQL)
- Key/Value (compatible with the Redis driver)
- Search Engine
- Time Series (with InfluxDB Line Protocol, Prometheus remote_write/read, and PromQL support)
- Vector Embedding
- Geospatial
ArcadeDB understands multiple languages:
- SQL (from OrientDB SQL)
- Neo4j Cypher (Open Cypher)
- Apache Gremlin (Apache Tinkerpop v3.7.x)
- GraphQL Language
- MongoDB Query Language
ArcadeDB key capabilities:
- 70+ Built-in Graph Algorithms — Pathfinding, centrality, community detection, link prediction, graph embeddings, and more — all available out of the box
- Parallel Query Execution — SQL queries leverage multiple CPU cores for faster execution on large datasets
- Materialized Views — Pre-computed query results stored and automatically maintained
- MCP Server — Built-in Model Context Protocol server for AI assistant and LLM integration
- AI Assistant — Integrated AI assistant in Studio (Beta) for query help and database management
- Geospatial Indexing — Native spatial queries and proximity searches with
geo.*SQL functions - TimeSeries — Columnar storage with Gorilla/Delta-of-Delta compression, InfluxDB/Prometheus ingestion, PromQL queries, Grafana integration
- Hash Indexes — Extendible hashing for faster exact-match lookups alongside LSM-Tree indexes
ArcadeDB can be used as:
- Embedded from any language on top of the Java Virtual Machine
- Embedded from Python via bindings: arcadedb-python-bindings
- Remotely by using HTTP/JSON
- Remotely by using a Postgres driver (ArcadeDB implements Postgres Wire protocol)
- Remotely by using a Redis driver (only a subset of the operations are implemented)
- Remotely by using a MongoDB driver (only a subset of the operations are implemented)
- By AI assistants via the built-in MCP Server (Model Context Protocol). For
Claude Code there is a ready-made plugin:
/plugin marketplace add ArcadeData/arcadedbthen/plugin install arcadedb@arcadedb
For more information, see the documentation.
Use Cases
Explore real-world examples in the arcadedb-usecases repository — self-contained projects with Docker Compose, SQL schemas, and runnable demos covering:
- Recommendation Engine — graph traversal + vector similarity + time-series
- Knowledge Graphs — co-authorship and citation networks with full-text search
- Graph RAG — retrieval-augmented generation with LangChain4j and Neo4j Bolt
- Fraud Detection — graph, vector, and time-series signals with Cypher
- Real-time Analytics — IoT and service monitoring with time-series
- Social Network Analytics — materialized view dashboards with polyglot queries
- Supply Chain — multi-tier visibility with PostgreSQL protocol and JavaScript
Getting started in 5 minutes
Start ArcadeDB Server with Docker:
docker run --rm -p 2480:2480 \
-v arcadedb-config:/home/arcadedb/config \
-v arcadedb-databases:/home/arcadedb/databases \
-e ARCADEDB_SETTINGS="-Darcadedb.server.rootPassword=playwithdata -Darcadedb.server.defaultDatabases=Imported[root]{import:https://github.com/ArcadeData/arcadedb-datasets/raw/main/orientdb/OpenBeer.gz}" \
arcadedata/arcadedb:latest
--rm deletes the container's anonymous volumes with it, so the two named volumes keep the imported OpenBeer database
(databases) and the users, groups and API tokens the server writes at runtime (config) across runs. For a fresh start, remove
them with docker volume rm arcadedb-config arcadedb-databases.
Pass database settings in ARCADEDB_SETTINGS and any extra JVM flags in JAVA_OPTS: Docker replaces
an environment variable rather than appending to it, so keeping the two apart leaves the image's own
garbage collector and heap sizing (ARCADEDB_OPTS_GC and ARCADEDB_OPTS_MEMORY) intact. The heap is
sized as a percentage of the container memory limit, so docker run -m 512m and a multi-GB
production container both work without further tuning.
The image runs on Java 25, where server.sh also enables compact object headers (-XX:+UseCompactObjectHeaders),
after checking that the JVM accepts the flag (a bare distribution on Java 25 or later does the same); set
ARCADEDB_OPTS_HEADERS to override it, or to an empty value to opt out.
Now open your browser on http://localhost:2480 and play with ArcadeDB Studio and the
imported OpenBeer database to find your favorite beer.

ArcadeDB is cloud-ready with Docker and Kubernetes support.
You can also download the latest release, unpack it on your local hard drive and
start the server with bin/server.sh or bin/server.bat for Windows.
Releases
There are four variants of (about monthly) releases:
full- this is the complete package including all modulesminimal- this package excludes thegremlin,redisw,mongodbw,graphqlmodulesheadless- this package excludes thegremlin,redisw,mongodbw,graphql,studiomodulesbase- core engine, server, and network only — excludes all optional modules (console,gremlin,studio,redisw,mongodbw,postgresw,grpcw,graphql,metrics)
The nightly builds of the repository head can be found here.
You can also build a custom distribution with only the modules you need using the Custom Package Builder:
curl -fsSL https://github.com/ArcadeData/arcadedb/releases/download/26.3.1/arcadedb-builder.sh | \
bash -s -- --version=26.3.1 --modules=gremlin,studio
Available optional modules: console, gremlin, studio, redisw, mongodbw, postgresw, grpcw, graphql, metrics. The
builder supports interactive mode, Docker image generation, and offline builds from local Maven repositories.
An experimental GraalVM native-image build (fast startup, low RAM, no JVM required) is also available - see docs/native-image.md for prerequisites, the build/target matrix, and Docker usage.
Java Versions
Starting from ArcadeDB 24.4.1 code is compatible with Java 21.
Java 21 packages are available on Maven central and docker images on Docker Hub.
We also support Java 17 on a separate branch java17 for those who cannot upgrade to Java 21 yet through GitHub packages.
To use Java 17 inside your project, add the repository to your pom.xml and reference dependencies as follows:
<repositories>
<repository>
<name>github</name>
<id>github</id>
<url>https://maven.pkg.github.com/ArcadeData/arcadedb</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.arcadedb</groupId>
<artifactId>arcadedb-engine</artifactId>
<version>26.3.1-java17</version>
</dependency>
</dependencies>
Docker images are available on ghcr.io too:
docker pull ghcr.io/arcadedata/arcadedb:26.3.1-java17
Embedding Gremlin alongside the engine
Always use the shaded classifier for gremlin when embedding it, whether alongside
arcadedb-engine or on its own. Its ANTLR runtime is relocated into a private package, so it
never collides with the engine's ANTLR 4.13.2 on a shared classpath.
The plain arcadedb-gremlin jar resolves ANTLR to the engine's 4.13.2 (pulled transitively via
arcadedb-engine), which the engine's SQL/Cypher parsers require. TinkerPop's Gremlin
string-query parser ships a precompiled ANTLR 4.9.1 parser that only deserializes against the
relocated runtime inside the shaded jar, so the plain jar alone will not run Gremlin string
queries - use the shaded classifier.
<dependency>
<groupId>com.arcadedb</groupId>
<artifactId>arcadedb-engine</artifactId>
<version>26.8.1</version>
</dependency>
<dependency>
<groupId>com.arcadedb</groupId>
<artifactId>arcadedb-gremlin</artifactId>
<version>26.8.1</version>
<classifier>shaded</classifier>
</dependency>
Building and Testing
Build the entire project (skipping tests):
mvn clean install -DskipTests
Build the Docker image (skipping tests):
mvn clean install -DskipTests -Pdocker
Running Unit Tests:
Run the full unit test suite:
mvn test
Some tests are tagged to indicate their cost:
slow- functional tests that take noticeably long (large batches, multi-second elapsed time, big payloads)benchmark- microbenchmarks not intended for regular CI runs; excluded by default (see below)
benchmark-tagged tests are excluded by default, so a plain mvn test already skips them. To also skip
slow tests and run only the fast ones:
mvn test -DexcludedGroups="slow,benchmark"
To run only a specific tag (e.g. benchmark tests in isolation), clear the default exclusion or it cancels out the selection and nothing runs:
mvn test -Dgroups="benchmark" -DexcludedGroups=
Running Integration Tests:
Run all the integration tests (requires Docker):
mvn verify -Pintegration
Run integration tests excluding the end-to-end, load, and HA tests:
mvn verify -Pintegration -pl !e2e,!load-tests,!e2e-ha
Running End-to-End Tests:
All end-to-end tests (requires Docker):
mvn verify -Pintegration -pl e2e,load-tests,e2e-ha
Test Suites at a Glance
The codebase is covered by several complementary test suites, each with a distinct scope. The "CI" column says when each one runs; the scheduled ones have a status badge at the top of this page.
| Suite | How it runs | CI | Scope |
|---|---|---|---|
| Unit tests | mvn test (*Test) | every PR | Fast, in-process tests of a single component in isolation: engine internals (storage, pages, WAL, indexes, serialization), query parsing and execution (SQL, Cypher, Gremlin, GraphQL), schema, graph traversals, and security. The bulk of coverage; no external services required. CI splits them into lanes by JUnit tag: slow (long functional tests) and vector (LSM vector-index rebuilds) run in their own lanes, benchmark is excluded by default. |
| Integration tests | mvn verify -Pintegration (*IT) | every PR | Tests spanning multiple components or a running server within the same JVM/module: HTTP/REST API, wire protocols (Postgres, MongoDB, Redis, Bolt, gRPC), and cross-module behavior. Some require Docker. |
HA integration (ha-raft) | mvn verify -Pintegration -pl ha-raft | daily | Raft high-availability clusters of several servers started inside one JVM: replication, leader election, schema and security propagation, snapshot install, and catch-up of lagging followers. Moved out of the PR pipeline because of its length. |
End-to-end (e2e) | mvn verify -Pintegration -pl e2e | every PR | Black-box tests against a real ArcadeDB server in a Docker container (Testcontainers), exercising it the way external clients do: JDBC/Postgres queries, the remote Java API, server-side JavaScript functions, and the Bolt and gRPC drivers. |
Load tests (load-tests) | mvn verify -Pintegration -pl load-tests | daily | Throughput and stability under sustained concurrent workloads against single-server and three-node clusters in containers, including high-volume document and time-series ingestion. Verifies no data loss or corruption under contention. |
HA end-to-end (e2e-ha) | mvn verify -Pintegration -pl e2e-ha | daily | Resilience and correctness of the Raft cluster under scripted failures: leader failover, rolling restarts, split-brain, network partitions/delay/packet loss, replication convergence, and cluster-wide operations (backup/restore, import, drop database, user management). Uses Testcontainers and fault injection (Toxiproxy). |
HA chaos (HaChaosIT) | mvn verify -Pintegration -pl e2e-ha -Dit.test=HaChaosIT -Dfailsafe.excludedGroups= | weekly | Long randomized run (60 minutes by default) against a containerized cluster: concurrent writers while a seeded scheduler injects faults (kill, stop, rolling restart, pause, isolate, split, latency, packet loss, and a follower frozen for more than 60 s that must recover without reformatting its Raft storage), and every acknowledged write is checked against all replicas after each step. Each run prints its seed so a failure can be replayed with -Dchaos.seed=...; tune with -Dchaos.nodes, -Dchaos.duration, -Dchaos.faults, -Dchaos.writers. Tagged chaos, so the plain e2e-ha run skips it. |
| Benchmarks | mvn verify -Dgroups=benchmark -DexcludedGroups= | weekly | Microbenchmarks and comparison runs (@Tag("benchmark")). They measure rather than assert, and are excluded from every other run. |
Python client (e2e-python) | cd e2e-python && pytest tests/ | every PR | Verifies the Postgres wire protocol against real Python clients (psycopg2, asyncpg) and the SQLAlchemy ORM, and the Bolt protocol against the official neo4j driver, running against a server in a Docker container (Testcontainers). |
JavaScript client (e2e-js) | cd e2e-js && npm install && npm test | every PR | Verifies Node.js client compatibility over the Bolt (neo4j-driver) and Postgres (pg) protocols, running against a server in a Docker container (Jest + Testcontainers). |
C# client (e2e-csharp) | cd e2e-csharp/ArcadeDB.E2ETests && dotnet test | every PR | Verifies the Postgres wire protocol (Npgsql) and the Bolt protocol (Neo4j.Driver, plain and TLS) from .NET, running against a server in a Docker container (xUnit + Testcontainers). |
Go client (e2e-go) | cd e2e-go && go test ./... | every PR | Bolt conformance with the official neo4j-go-driver, plain and TLS, against a server in a Docker container. Implements the shared scenario spec in bolt/conformance/spec.yaml, like the other client suites. |
| Bolt driver matrix | bolt-nightly.yml workflow | daily | Reruns the Bolt tests of the JavaScript, Python, C# and Go suites against several released versions of each official driver, and publishes the result in COMPATIBILITY.md. |
Studio (e2e-studio) | cd e2e-studio && npm install && npm test | every PR | Browser tests of the Studio web UI with Playwright: database creation, queries and charts, graph view (styling, context menu, export), table views, and vector search. |
Community
Join our growing community around the world, for ideas, discussions and help regarding ArcadeDB.
- Chat live with us on Discord
- Follow us on Twitter
- or on Bluesky
- Connect with us on LinkedIn
- or on Facebook
- Questions tagged
#arcadedbon Stack Overflow - View our official Blog
Security
For security issues kindly email us at [email protected] instead of posting a public issue on GitHub.
License and Attribution
ArcadeDB is Free for any usage and licensed under the liberal Open Source Apache 2 license. We are committed to remaining Open Source Forever — see our Governance for the structural guarantees that make this more than a promise. If you need commercial support, or you need to have an issue fixed ASAP, check our pricing page.
For third-party attributions and copyright notices, see:
- NOTICE - Required legal attributions
- ATTRIBUTIONS.md - Detailed third-party acknowledgments
- LICENSE - Full license text
- GOVERNANCE.md - License guarantee and project governance
Thanks To
for providing YourKit Profiler to our committers.
Contributing
We would love for you to get involved with ArcadeDB project. If you wish to help, you can learn more about how you can contribute to this project in the contribution guide.
Have fun with data!
The ArcadeDB Team
