This release includes 4 security fixes for security teams reviewing exposed deployments.
Topics
+10 more
Affected surfaces
Summary
AI summaryBroad release touches Client, HTTP & Studio, New Features, Major Highlights, and High Availability.
Full changelog
ArcadeDB 26.7.1 Release Notes
Overview
ArcadeDB 26.7.1 is a large stability, resilience and security release with over 420 commits, 238 resolved issues and 32 merged pull requests. The headline theme is a deep High Availability / Raft hardening wave that makes clustered deployments far more robust under leader churn, node restarts, snapshot transfers and Kubernetes scale events. On top of that come a security hardening pass (polyglot scripting lockdown, gRPC and cluster-management authorization, DoS bounding), a new OpenTelemetry distributed-tracing module plus structured JSON logging, native BM25 full-text scoring, continued ISO GQL compliance and vector engine work, and a long list of gRPC, MongoDB wire-protocol, SQL, OpenCypher, time-series and Studio fixes.
New Features
- OpenTelemetry distributed tracing - an optional module for end-to-end request tracing, with opt-in OTLP export. (#4467, #4465)
- Structured JSON logging with per-request correlation IDs. (#4466)
- Native BM25 full-text scoring - field boosts, caret syntax and
EXPLAIN/PROFILEsupport. (#4687) - ISO GQL compliance - strict numeric types (schema round-trip), session management (
SESSION SET/RESET/CLOSE) and transaction control (START TRANSACTION/COMMIT/ROLLBACK). (#4141) - New vector formats and helpers - MATLAB / MATLAB_COLUMN, JULIA and NUMPY formats,
asVector(),asSparse(), RRF array input andvectorDequantizeBinary. (#3099) - MongoDB wire protocol -
update,deleteandcreateIndexescommands plus SASL PLAIN authentication. (#4750, #4751, #4746) - HA auto-acquire of unseen databases - a joining node bootstraps databases it has never seen. (#4727)
- Kubernetes health probes - liveness/readiness/startup endpoints for orchestrated deployments. (#4464)
- Paginated remote fetching of edges and vertices across the remote API.
- Studio - cluster HA alerts and Restore / Delete row actions on the backup list. (#4737)
Major Highlights
High Availability & Raft resilience
The bulk of this release goes into making the Raft-based HA cluster survive real-world failure modes without data loss or node self-halt:
- No more node-wide halt on apply errors. Apply-time failures are now quarantined per-database instead of taking the whole node down, transient
NeedRetryExceptions are retried in Raft apply, and unexpected throwables no longer kill the process. (#4797, #4659) - Divergence self-recovery. A follower stuck on a divergent Raft log now performs follower-side reformat-and-rejoin instead of spinning on
INCONSISTENCY, and a WAL-version-gap / phase-2 commit failure no longer causes a node to self-halt. (#4741, #4740) - Snapshot integrity. Snapshot extraction, markers and the final swap are now fsynced before the backup is deleted, transfer completeness is verified with a manifest,
takeSnapshot()persists a real snapshot marker so a log purge can no longer orphan applied state, and the database-registry lock is held across snapshot close -> swap -> reopen. (#4830, #4831, #4829, #4832) - Membership & quorum safety. Raft membership now uses atomic deltas instead of last-write-wins
setConfiguration,removePeer/leaveClusterare guarded against dropping below quorum, andstepDownselects the highest-priority non-lagging peer while skipping priority-0 witnesses. (#4795, #4796, #4808) - Per-database applied-index tracking, so mixed-database clusters track progress correctly. (#4824)
- Silent write loss eliminated when replication times out after dispatch: the leader no longer acknowledges a write it failed to replicate. (#4790)
- Accurate lag diagnosis. New heartbeat-lag metrics, byte-bounded replication backpressure, resync logging (leader flood suppression + follower resync visibility), and a slow-but-progressing follower is now treated as catching up rather than stale.
ClusterMonitorper-replica lag state is reset on each new leadership term to prevent falseSTALLEDreports. (#4812, #4810, #4840, #4841) - Auto-acquire of unseen databases so a joining node bootstraps databases it has never seen, with a single deterministic bootstrap source instead of abandoning databases on first transfer. (#4727, #4807)
Kubernetes operations
- StatefulSet scale-up beyond
HA_SERVER_LISTno longer crash-loops: a local Raft peer is synthesized and auto-joins when the pod ordinal exceeds the static list. (#4836) - Raft storage is persisted by default under Kubernetes, so a pod restart no longer wipes the PVC-backed Raft log. (#4835)
- Kubernetes health/liveness/readiness probes and a graceful cluster-leave path owned solely by
RaftHAServer.stop(). (#4464, #4837)
Security hardening
- Polyglot scripting now requires admin privileges and the GraalVM sandbox has been hardened (reflection deny-list), closing an advisory (GHSA-48qw-824m-86pr) where a reader-role user could read host files via JavaScript on
/api/v1/command. - gRPC authorization is enforced centrally instead of being blanket-skipped:
getDatabaserejects path-traversal names and enforces auth, admin operations require admin auth, and cross-database access is covered by regression tests. (#4793, #4792, #4794) - Cluster-management HTTP endpoints now require root. (#4791)
- DoS bounding on gRPC: result materialization and worker busy-wait are bounded, abandoned gRPC transactions are reaped to stop an executor/transaction leak, and in-band command failures are correctly counted as errors. (#4803, #4802, #4804)
- Hardened
FileUtilspath-traversal guard.
Observability
- Optional OpenTelemetry distributed-tracing module for end-to-end request tracing. (#4467)
- Structured JSON logging with per-request correlation IDs. (#4466)
- Metrics depth (Pillar 1): RED timers, engine gauges and opt-in OTLP export, plus gRPC metrics published into the shared server registry with method/status tags and executor-pool gauges. (#4465, #4826)
Native BM25 full-text scoring
Full-text search gains native BM25 scoring with field boosts, caret syntax and EXPLAIN / PROFILE support, along with fixes so SEARCH_INDEX no longer leaks internal posting-RID strings into @rid, multi-property and rebuilt FULL_TEXT indexes no longer crash, and multi-dot SEARCH_INDEX queries are parsed correctly. (#4687, #4731, #4732, #4733, #4734)
ISO GQL compliance
Continued work toward the ISO GQL standard (#4141): strict numeric types on the write side (schema round-trip), session management (SESSION SET / RESET / CLOSE) and transaction control (START TRANSACTION / COMMIT / ROLLBACK).
Vector engine (Epic #3099)
- Quantization ergonomics,
asSparse(),asVector()(inverse ofasString), RRF array input andvectorDequantizeBinary. - New MATLAB / MATLAB_COLUMN, JULIA and NUMPY vector formats.
- Correctness fixes across the vector SQL functions, consistent
cosineSimilarityon zero vectors, and a consistentordinalToVectorIdsnapshot during brute-force scans. (#4583, #4581)
MongoDB wire protocol
The mongodbw plugin now supports update, delete and createIndexes commands, adds SASL PLAIN authentication, and returns correct data on find. (#4750, #4751, #4746, #4745)
Major Fixes
gRPC
InsertStreamis stopped after a mid-stream commit failure (and the error is no longer mis-indexed), the transaction is no longer begun/committed on different pool threads, andCONFLICT_UPDATEupsert now merges non-key columns. (#4806, #4656)- Streaming terminal calls are serialized on a thread-safe
StreamObserver. (#4801) DATETIME_MICROS/DATETIME_NANOSprecision is preserved on the write path, null-valued projected columns surviveExecuteQuery, and the configured compression codec is honored. (#4805, #4692, #4827)- Time-series
INSERTover gRPC no longer throws on empty@type/@rid. (#4688)
High Availability (additional)
TRUNCATE TYPE/TRUNCATE BUCKETare now HA-safe, using small batches and failing loud instead of silently truncating incompletely. (#4817)- Follower match/next indices are correlated by peer-id stability rather than array position, fixing mis-zipped follower states. (#4842)
- The Raft gRPC allowlist fails open only up to quorum, not the full peer set, and the state machine is rewired to
RaftHAServeron a HealthMonitor-driven Ratis restart. (#4828, #4839) AppendEntrieselement limit is configurable (default 64),RATIS-2523matchIndex rewind is atomic and fail-loud, and a replica stuckSTALLEDatmatchIndex=-1auto-recovers. (#4752, #4833, #4728)- LINEARIZABLE follower reads no longer serve stale state, and read-only statements honor the requested read consistency.
- Snapshot write watchdog now detects stalls rather than total elapsed time, proactive peer allowlist refresh + hardened DNS caching, and
GraphBatchbulk load survives a transient leader re-election. (#4729, #4696, #4724)
SQL
UPDATE SET map = map.remove(key)now persists map/collection key removal. (#4730)SELECT FROM <non-existent RID>returns an empty result set instead of HTTP 500.- Planner prefers a full-key index over a partial-key scan on a longer composite index. (#4600)
IN/NOT INthree-valued logic for NULL operands,GROUP BYon mixed-type numeric keys no longer splits equal groups, andmin()/max()over mixed numeric collections no longer throwsClassCastException. (#4591, #4592)DISTINCTresult can be used as a function argument / method base, backticks are stripped from quoted projection aliases, andalgo.allSimplePathssupportsskipVertexTypes. (#4691)- Assorted math/collection function fixes:
SplitFunctionon null delimiter,AbstractMathFunction.asDouble(null),TailFunctionsublist view,date.convertoverflow and ISO-8601 week-of-year at year boundaries. (#4704, #4556, #4558, #4555, #4554)
OpenCypher
- Ghost (dangling) edges are tolerated in OpenCypher queries instead of crashing. (#4657)
MATCH (u:User) RETURN uno longer throwsNoSuchElementException, and[:RX|RY]disjunction returns rows when one type is undeclared with a property anchor. (#4689)shortestPathwithedge:trueno longer throwsClassCastExceptionor returns the wrong vertex in theBOTHdirection. (#4645)
Storage, indexing & recovery
- Schema is recovered from
schema.prev.jsonwhenschema.jsonis corrupt after a crash mid-save. (#1249) - Corrupt hash-index metadata is detected and recovered, dangling UNIQUE index entries no longer block writes, and
REBUILD INDEXvalidates entries under bucket-selection strategies. BasePage.equals/hashCodekey onpageIdonly, replicated pages are written under the per-page I/O lock, andPaginatedComponentFilechannel-reopen retries clear/restore the thread interrupt flag. (#4722, #4712)- Time-series fixes: negative-timestamp bucket alignment, skip-NaN consistency across MIN/MAX paths, NaN for empty MIN/MAX buckets, and
aggregate()anchoring to the caller-suppliedfromTs. (#4595, #4596, #4597)
Client, HTTP & Studio
- Remote client hydrates
LIST/MAP ofTypenested values to the declared primitive type, and paginated remote fetching of edges/vertices is covered across the remote API. (#4735) DATEvalues are encoded as epoch days on the JSON wire, and temporal types are handled in array serialization. (#4601, #4654)- Studio gains cluster HA alerts and Restore / Delete row actions on the backup list. (#4737)
- The reserved internal
.raftdatabase is hidden from cluster status. (ops#379)
Dependencies
Notable upgrades in this release include:
- Netty 4.2.15.Final
- Undertow 2.4.2.Final
- Lucene 10.5.0
- Protobuf (Java) 4.35.1
- Jackson Databind 2.22.0
- Micrometer 1.17.0
- OpenTelemetry BOM 1.63.0
- JLine 4.2.1
- Logback 1.5.37
- JUnit Jupiter 6.1.1
- Neo4j Java Driver 6.2.0
- JVector 4.0.0-rc.8-hf1
- Swagger 2.2.52 / Swagger Parser 2.1.45
Plus the usual round of Studio frontend updates (SwaggerUI, ApexCharts, FontAwesome and the webpack/build toolchain), e2e test-harness bumps (Playwright, TestContainers, psycopg, pytest), CI / GitHub Actions updates and pre-commit hook refreshes.
Security Fixes
- Polyglot scripting now requires admin privileges; GHSA-48qw-824m-86pr hardens GraalVM sandbox to prevent file‑read via JavaScript on `/api/v1/command`
- gRPC authorization enforced centrally; `getDatabase` rejects path traversal, admin ops require admin auth
- Cluster‑management HTTP endpoints now require root privilege
- DoS bounding added for gRPC result materialization and abandoned transactions
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About ArcadeData/arcadedb
Built-in MCP server for ArcadeDB, a multi-model database (graph, document, key-value, time-series, vector) with SQL, Cypher, Gremlin, and MongoDB QL support.
Related context
Related tools
Beta — feedback welcome: [email protected]