This release includes 3 breaking changes for platform teams planning a safe upgrade.
✓ No known CVEs patched in this version
Topics
+9 more
Affected surfaces
ReleasePort's take
Light signalIn Memgraph v3.10.0 coordinators no longer accept --init-file or --init-data-file during HA joins, and the permission system now supports explicit DENY rules that override GRANTs.
Why it matters: Update any deployment scripts that rely on init‑file flags for coordinator startup; review ACL policies to account for new DENY semantics before upgrading.
Summary
AI summaryCoordinators reject init‑file flags, permission model adds DENY semantics, SHOW STORAGE INFO renames fields.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Breaking | Medium |
'SHOW STORAGE INFO' renames three fields and adds one new field; update tooling accordingly. 'SHOW STORAGE INFO' renames three fields and adds one new field; update tooling accordingly. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Breaking | Medium |
Coordinators ignore periodic storage snapshots and reject --init-file/--init-data-file on HA join. Coordinators ignore periodic storage snapshots and reject --init-file/--init-data-file on HA join. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Breaking | Medium |
Fine-grained permissions now support explicit DENY semantics, overriding GRANT. Fine-grained permissions now support explicit DENY semantics, overriding GRANT. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Coordinators accept read-only system queries like SHOW CONFIG, SET DATABASE SETTING, RELOAD SSL. Coordinators accept read-only system queries like SHOW CONFIG, SET DATABASE SETTING, RELOAD SSL. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Added SHOW QUERY CALLABLE MAPPINGS to list all query procedure and function aliases. Added SHOW QUERY CALLABLE MAPPINGS to list all query procedure and function aliases. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
WHERE clause support directly after YIELD in procedure calls for inline result filtering. WHERE clause support directly after YIELD in procedure calls for inline result filtering. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Added --data-dir-lock-acquisition-timeout-sec to retry acquiring data-directory lock. Added --data-dir-lock-acquisition-timeout-sec to retry acquiring data-directory lock. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Replication error messages now identify exact failing replica and reason. Replication error messages now identify exact failing replica and reason. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
RELOAD BOLT_SERVER TLS command reloads SSL/TLS certificates at runtime without restart. RELOAD BOLT_SERVER TLS command reloads SSL/TLS certificates at runtime without restart. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
instance_down_timeout_sec and instance_health_check_frequency_sec are Raft-replicated settings. instance_down_timeout_sec and instance_health_check_frequency_sec are Raft-replicated settings. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
HA coordinator cluster operations follow Raft-first pattern for reliability. HA coordinator cluster operations follow Raft-first pattern for reliability. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Server-side descriptions for labels, edge types, properties, and databases persisted via SHOW SCHEMA INFO. Server-side descriptions for labels, edge types, properties, and databases persisted via SHOW SCHEMA INFO. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
GNN import/export module to MAGE for PyTorch Geometric and TensorFlow GNN formats. GNN import/export module to MAGE for PyTorch Geometric and TensorFlow GNN formats. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Kerberos SSO authentication module using GSSAPI with LDAP role mapping. Kerberos SSO authentication module using GSSAPI with LDAP role mapping. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Neo4j-compatible CREATE INDEX/CONSTRAINT syntax alongside existing Memgraph syntax accepted. Neo4j-compatible CREATE INDEX/CONSTRAINT syntax alongside existing Memgraph syntax accepted. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Warns or errors on unexpected positional arguments after startup flag parsing. Warns or errors on unexpected positional arguments after startup flag parsing. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
WITH CONFIG maps now accept query parameters as values in vector index creation. WITH CONFIG maps now accept query parameters as values in vector index creation. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Point2D, Point3D, and Enum types fully supported in MGP C/C++/Python APIs. Point2D, Point3D, and Enum types fully supported in MGP C/C++/Python APIs. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
schema.node_type_properties and schema.rel_type_properties added for Neo4j compatibility. schema.node_type_properties and schema.rel_type_properties added for Neo4j compatibility. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Vector edge indexes now use single-store pattern, matching vertex vector indexes. Vector edge indexes now use single-store pattern, matching vertex vector indexes. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Descending (DESC) label-property index support for ORDER BY DESC optimization. Descending (DESC) label-property index support for ORDER BY DESC optimization. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
CALL (<variable-list>) { <subquery> } syntax for variable-scoped subqueries. CALL (<variable-list>) { <subquery> } syntax for variable-scoped subqueries. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Per-database memory tracking and Tenant Profiles with named memory limits. Per-database memory tracking and Tenant Profiles with named memory limits. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Built-in admin, readonly, readwrite roles created automatically on first enterprise user. Built-in admin, readonly, readwrite roles created automatically on first enterprise user. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Compatibility for Apache Spark Neo4j Connector 5.4.0 via additional query procedure aliases. Compatibility for Apache Spark Neo4j Connector 5.4.0 via additional query procedure aliases. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Embeddings module can now compute text embeddings via remote APIs (OpenAI, Cohere). Embeddings module can now compute text embeddings via remote APIs (OpenAI, Cohere). Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Performance | Medium |
Text index search performance significantly improved; GIDs returned directly from Rust layer and Tantivy searchers pinned per transaction. Text index search performance significantly improved; GIDs returned directly from Rust layer and Tantivy searchers pinned per transaction. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Performance | Medium |
Upgraded Tantivy to 0.25, yielding ~30% faster imports and ~20% better search throughput under contention. Upgraded Tantivy to 0.25, yielding ~30% faster imports and ~20% better search throughput under contention. Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Performance | Medium |
Added AI_PLATFORM license type limiting memory to graph storage only. Added AI_PLATFORM license type limiting memory to graph storage only. Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Performance | Medium |
ORDER BY eliminated when index scan already provides required ascending order, reducing unnecessary sorting. ORDER BY eliminated when index scan already provides required ascending order, reducing unnecessary sorting. Source: llm_adapter@2026-05-21 Confidence: low |
— |
Full changelog
Memgraph v3.10.0 - May 13th, 2026
⚠️ Breaking changes
- Coordinators ignore periodic storage snapshots (no user data to snapshot), and
--init-file/--init-data-fileare rejected on coordinators and on data instances that join an HA cluster (--management-portset). Remove those flags from coordinator and HA data-instance configs before upgrading, and run any bootstrap Cypher against the MAIN after the cluster is formed instead of relying on startup init files. #4035 - Fine-grained label and edge-type permissions now support explicit
DENYsemantics (includingDENY ALL/*) which take precedence overGRANT. TheUPDATEpermission is split into granular capabilities:SET LABEL,REMOVE LABEL,SET PROPERTY,CREATE EDGE,DELETE EDGE. Existing grants that relied onGRANT NOTHING/REVOKE NOTHINGmust be migrated toDENY. #3789 SHOW STORAGE INFOoutput renames three fields and adds one new field:disk_usage→global_disk_usage,memory_tracked→global_memory_tracked,allocation_limit→global_runtime_allocation_limit, and addsglobal_license_allocation_limit. Update any tooling or scripts that parse these field names. #3999
✨ New features
- Coordinators now accept read-only system queries (
SHOW CONFIG,SHOW LICENSE INFO,SHOW BUILD INFO,SHOW STORAGE INFO) plusSET DATABASE SETTINGandRELOAD SSL, so you can inspect configuration or reload TLS from a coordinator without opening a session to a data instance. #4035 - Added
SHOW QUERY CALLABLE MAPPINGSto list all query procedure and function aliases with their original source names and types (procedure/function), so you can audit callable mappings without digging through configuration. #4014 - Added
WHEREclause support directly afterYIELDin procedure calls:CALL mg.procedures() YIELD * WHERE name = 'mg.procedures' RETURN name. This lets you filter procedure results inline instead of wrapping the call in aWITH … WHEREsubquery. #4010 - Memgraph now warns (or errors with
--strict-flag-check) when unexpected positional arguments appear after startup flag parsing, catching common mistakes like--flag false(which silently ignoresfalseand sets the flag totrue). Default behavior is strict in development builds; release builds emit a warning. #4009 - Added
--data-dir-lock-acquisition-timeout-secto retry acquiring the data-directory file lock for a configurable duration before giving up. This prevents spurious startup failures when a pod is force-killed and the old lock has not been released yet (e.g. on CephFS or other distributed storage with propagation delay). #4021 - Replication error messages now identify exactly which REPLICA failed and why (replica name, replication mode, failure reason) instead of generic "at least one SYNC/STRICT_SYNC replica has not confirmed" messages, making it faster to pinpoint replication issues. #3985
- Added
RELOAD BOLT_SERVER TLSCypher command to reload SSL/TLS certificates at runtime without restarting Memgraph. Existing connections keep the old certificate; new connections use the reloaded one. Useful for Let's Encrypt renewals and compliance certificate rotations. #3962 WITH CONFIGmaps (e.g.CREATE VECTOR INDEX … WITH CONFIG {…}) now accept query parameters as values, so you can pass{dimension: $dim, capacity: $cap}instead of hard-coding values in the config literal. #3959instance_down_timeout_secandinstance_health_check_frequency_secare now Raft-replicated coordinator runtime settings changeable viaSET COORDINATOR SETTINGwithout restarting the cluster. The old--instance-down-timeout-secand--instance-health-check-frequency-secflags are deprecated and ignored. #3949- HA coordinator cluster operations (register, unregister, promote, demote) now follow a Raft-first pattern: the state is committed to the Raft log and acknowledged by a majority before returning success. RPCs to data instances are retried automatically by the reconciliation loop, so transient network issues no longer require manual intervention. #3942 #3922
- Point2D, Point3D, and Enum types are now fully supported in the MGP C, C++, and Python query module APIs. Query modules can create, copy, compare, and inspect these types as
mgp_value, fixing crashes inschema.node_type_properties()on graphs that use spatial or enum properties. #3980 - Added
schema.node_type_propertiesandschema.rel_type_propertiesconfig argument to match the Neo4j specification, improving compatibility with the Neo4j ODBC BI Connector. Also adds theapoc.versionmapping. #4000 - Added server-side descriptions: annotate labels, edge types, properties, and databases with human-readable strings that are persisted and visible in
SHOW SCHEMA INFO. Useful for documenting your graph schema directly in the database. #3894 - Vector edge indexes now use the single-store pattern (storing only a
VectorIndexIdin edge properties rather than duplicating vector data), matching vertex vector indexes. Snapshot serialization is backward-compatible. #3929 - Added GNN import/export module to MAGE: export the graph to PyTorch Geometric (PyG) or TensorFlow GNN (TF-GNN) JSON format, run your GNN pipeline externally, then write predictions back with
pyg_import/tf_import. #3803 - Added Kerberos SSO authentication module: clients can authenticate using Kerberos service tickets via GSSAPI, with role mapping through LDAP group membership or static principal-to-role configuration. #3916
- Added descending (DESC) label-property index support.
ORDER BY … DESCqueries can now be served directly by a DESC index, eliminating the sort. Create withCREATE INDEX ON :Label(prop) WITH CONFIG {"order": "DESC"}. #3996 - Added
CALL (<variable-list>) { <subquery> }syntax for variable-scoped subqueries, letting you explicitly control which outer-scope variables are accessible inside aCALLsubquery block. #4073 - Added Neo4j-compatible
CREATE INDEX [name] FOR … ON …andCREATE CONSTRAINT [name] FOR … REQUIRE …syntax for creating indexes and constraints, alongside the existing MemgraphON :Label(prop)/ASSERTsyntax. Both syntaxes are now accepted. Named indexes and constraints emit a warning, as names are not yet stored. #4043 - Added per-database memory tracking and Tenant Profiles. Every allocation is now attributed to its database across three categories — graph storage, vector index embeddings, and query execution — visible via
SHOW STORAGE INFO ON DATABASE <name>andSHOW MEMORY INFO. Create named memory-limit profiles withCREATE TENANT PROFILE "<name>" WITH MEMORY LIMIT <size>, attach them to databases withSET TENANT PROFILE, and manage them withALTER,DROP,REMOVE TENANT PROFILE FROM DATABASE, andSHOW TENANT PROFILES. Profiles are persisted across restarts and replicated to replicas. #3952 - Three built-in roles (
admin,readonly,readwrite) are now created automatically on first enterprise user creation, with the first user assigned theadminrole. Roles can be granted and revoked incrementally usingGRANT ROLE[S] <roles> TO <user>andREVOKE ROLE[S] <roles> FROM <user>. #3889 - Added compatibility for the Apache Spark Neo4j Connector 5.4.0 by aliasing additional query procedures, so PySpark workloads that rely on the connector work out of the box. #4091
- The embeddings query module can now compute text embeddings via remote APIs (OpenAI, Cohere, and other providers supported by
litellm). Export the relevant API key when launching the MAGE container and setmodel_nameto"{provider}/{model-name}"to use a remote model instead of a local one. #4064
🛠️ Improvements
- Text index search performance is significantly improved: GIDs are now returned directly from the Rust layer instead of full JSON documents, and Tantivy searchers are pinned per transaction for snapshot-consistent reads. #3963
- Upgraded Tantivy to 0.25, bringing ~30% faster text index imports and ~20% better search throughput under contention. #3927
ORDER BYis now eliminated when an index scan already provides the required ascending order, avoiding an unnecessary sort. WithLIMIT, this means the planner stops after N rows instead of sorting the entire result set first. #3950- Added
AI_PLATFORMlicense type that enforces memory limits only on graph memory, leaving vector index memory unconstrained up to the system--memory-limit. Useful when running large vector workloads alongside graph data without hitting the overall allocation cap. #3999 - Most third-party build dependencies are now managed through Conan 2 packages, making builds more reproducible and the contributor setup easier. See the updated build-from-source guide for changes to the build workflow. #4002
- Additional third-party libraries (gflags, NuRaft, Pulsar client, RocksDB, usearch) are now managed as Conan recipes, removing the
initscript and thelibs/directory from the build process. #4023 SHOW INDEX INFO,SHOW CONSTRAINT INFO,SHOW NODE LABELS, andSHOW EDGE TYPESno longer open a storage transaction, reducing lock contention and improving responsiveness on busy instances. #4006- Reduced garbage collector contention under high-concurrency supernode workloads by moving delta processing to a local copy under a short lock, preventing queries from waiting on garbage collection to complete. #4119
- Improved garbage collector performance after concurrent import of datasets with a significant number of edges on one or more supernodes by avoiding an O(n) delta chain walk when unlinking non-sequential deltas. #4126
🐞 Bug fixes
- Fixed a potential OOM crash when dropping a large vector index: the internal transfer from indexed format back to property store now manages peak memory usage so the operation completes cleanly even under tight memory limits. #4001
RELOAD BOLT_SERVER TLSis now supported on coordinator instances, so you can rotate TLS certificates cluster-wide without opening a session to each data instance separately. #4003- Fixed
refactor.merge_nodesdiscarding relationship properties: all properties on merged relationships are now correctly copied to the new relationship. #3948 - Fixed
ORDER BYfailing for list values; Cypher list ordering semantics (lexicographic / dictionary order) are now applied correctly. #3877 - Fixed the
link_predictionMAGE module returning incorrect ROC-AUC scores when all labels belong to a single class (returns a neutral 0.5 AUC instead of erroring or producing inconsistent results). #3845 - Fixed a use-after-free crash on replicas receiving a snapshot:
Clear()now also discards pending GC deltas, preventing stale pointers from being dereferenced on the next transaction commit. #4013 - Fixed a crash in HA coordinators caused by a dangling pointer in
ReplicationInstanceConnector; concurrent coordinator operations are now safe and cluster membership changes complete without instability. #3922 - Fixed a bug where
std::thread::hardware_concurrency()returning 0 on some machines caused RPC and communication servers to be created with zero worker threads, leading to silent failures. A safe fallback of 2 is now used. #3982 - Fixed replication network channels not being cleanly destroyed during shutdown, which could block shutdown or leave sockets open. #4005
- Fixed a crash that could occur when calling
SetValueForceon storage failures during a scheduled license revalidation. #4004 - Fixed a TCP segmentation bug in SLK multi-file stream processing: when a file transition arrives in a fragmented TCP segment,
CheckStreamStatusnow validates metadata completeness before signallingNEW_FILE, preventing incorrect stream state. #3925 - Fixed a crash if the telemetry server fails to initialize: the exception is now caught, logged, and the instance shuts down gracefully instead of terminating abruptly. #4026
- Transient disk failures when opening WAL or snapshot output files are now handled without crashing; failed snapshots are skipped and retried at the next scheduled interval (WAL failures remain fatal). #4025
- Fixed log rotation being skipped after instance restarts: spdlog in-memory rotation state is now re-initialized on startup so daily log files are rotated correctly even after frequent restarts. #4019
- Fixed a crash when calling
std::abortwhile using an async logger: removing thespdlog::shutdown()call before abort eliminates a window where the logger could segfault, making core dumps more useful for diagnosis. #4034 - Fixed a network descriptor leak in the epoll listener and a potential crash if
epoll_create1fails; the latter now throws an exception instead of crashing the database. #4032 - Fixed fine-grained access control roles leaking across databases: permission checks now evaluate only the roles that apply to the currently active database, preventing unintended privilege escalation for users with per-database roles. #4042
- Fixed a replication lag counter overflow that could occur when a REPLICA temporarily had more committed transactions than the new MAIN. REPLICAs in this transient state are now excluded from the routing table until they converge. #4040
- Fixed the MAGE DEB package post-install script installing Python packages for the wrong architecture on ARM machines. #4093
- Fixed index and constraint CREATE/DROP operations not being reverted on abort, which could leave ghost entries blocking subsequent retries. This was possible only when using STRICT_SYNC replication. #4074
FREE MEMORYnow reclaims significantly more memory after heavy update/delete workloads. Also fixed stale label-property index entries accumulating inIN_MEMORY_ANALYTICALmode when repeatedly setting indexed properties. #4071- Fixed a hang or crash when using
LIMITon both sides of aUNIONorUNION ALLquery. #4065 - Fixed rare crashes that could occur during shutdown or under heavy load after concurrent edge imports. #4020
- Fixed a crash or broken memory state caused by jemalloc's lazy thread-local storage initialization: if a thread's first allocation triggered an allocation-limit check before TLS was ready, jemalloc entered an unrecoverable state. Each thread now forces an initial allocation to guarantee TLS is set up before limits are enforced. #4095
- Hardened the embedded Python runtime against crashes and resource contention when running Python query procedures that use libraries like NumPy, PyTorch, or DGL. Shutdowns are now more reliable (no more sporadic fatal errors on exit) and the dependency scanner no longer pollutes the interpreter's main namespace. #4038
- Fixed misclassified task priorities that caused
BEGIN,COMMIT, andABORTqueries to run on reserved high-priority worker threads. Under heavy parallel commit/abort load this could starve workers and make the database appear blocked to users. #4122
Breaking Changes
- Rejected `--init-file` / `--init-data-file` flags on coordinators and HA data instances; remove them from configs before upgrading.
- Fine‑grained label/edge‑type permissions now support explicit `DENY` semantics (including `DENY ALL`) which take precedence over `GRANT`. Existing grants using `GRANT NOTHING` / `REVOKE NOTHING` must be migrated to `DENY`.
- SHOW STORAGE INFO field renames: `disk_usage` → `global_disk_usage`, `memory_tracked` → `global_memory_tracked`, `allocation_limit` → `global_runtime_allocation_limit`; a new field `global_license_allocation_limit` is added. Update any parsing tooling.
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 memgraph
High-performance open-source in-memory graph database for GraphRAG, AI memory, agentic AI, and real-time graph analytics. Cypher-compatible, built in C++.
Related context
Beta — feedback welcome: [email protected]