| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-06-16 | 17.5 kB | |
| v3.11.0 source code.tar.gz | 2026-06-16 | 8.6 MB | |
| v3.11.0 source code.zip | 2026-06-16 | 12.0 MB | |
| Totals: 3 Items | 20.6 MB | 2 | |
Memgraph v3.11.0 - June 17th, 2026
⚠️ Breaking changes
--query-modules-directoryis now ignored on coordinator instances and query modules are no longer loaded there. The embedded Python runtime is also skipped on coordinators, so any Python-based modules that previously loaded (but were unusable) will no longer be initialized. The flag itself is still accepted so packaged defaults do not need to be overridden when starting a coordinator. Additionally,storage.snapshot.intervalis no longer registered as a runtime setting on coordinators —SHOW DATABASE SETTING 'storage.snapshot.interval'andSET DATABASE SETTING 'storage.snapshot.interval'now returnUnknown setting nameinstead ofCoordinators don't support snapshots. Update any tooling that pattern-matched on the previous error message. #4066schema.node_type_properties()andschema.rel_type_properties()return additional columns and changed types.propertyTypesis nowList<String>(was untyped), and both procedures includepropertyObservationsandtotalObservationscounts.rel_type_properties()now partitions results by endpoint labels (sourceNodeLabels,targetNodeLabels), so the same edge type connecting different label sets produces separate rows. Clients that destructure results by column index or expect the previous column set must be updated. #4153schema.node_type_properties()andschema.rel_type_properties()renamed severalpropertyTypesstrings (Bool→Boolean,Double→Float,ZonedDateTime→DateTime,Point2d/Point3d→Point), andmandatorynow reflects declared existence constraints instead of sample coverage (alwaysfalsefor relationships). Update consumers that pattern-matched the old type names or treated sampling-basedmandatoryas ground truth. #4186- The JSON metrics endpoint histogram buckets have changed, so p50, p90, and p99 latency values may report slightly different numbers compared to 3.10.
SHOW METRICS INFOnow returns consistent per-database metrics for the currently active database rather than mixing per-database vertex/edge counts with aggregate metrics for everything else. Update any alerting thresholds that rely on exact histogram values. #3911 - The
cross_databasemodule (andmigratealiases) now usesgraph.start_timestampinternally instead ofgraph.transaction_id. Thetransaction_idparameter has been removed from the procedure call API. If you wrote custom procedures that relied on thetransaction_idparameter passed by thecross_databasemodule, switch tograph.start_timestamp. #4167 RELOAD BOLT_SERVER TLSand the newRELOAD INTRA_CLUSTER TLScommand now require theRELOAD_TLSprivilege. If you use authorization, grantRELOAD_TLSto the users or roles that rotate certificates (GRANT RELOAD_TLS TO user;), otherwise the reload will be rejected. #4154- Session trace no longer writes per-session files under
--query-log-directory. The flag is removed and startup fails if it is still set.SET SESSION TRACE ONnow emits tagged events into the main Memgraph log at INFO (when--log-levelisinfoor lower) instead of a dedicated{uuid}.logfile per session. Remove--query-log-directoryfrom configs and update tooling that parsed per-session log files to filter the main log by[session=<uuid>]. #4149 - Bare
SHOW STORAGE INFOnow returns only instance-level metrics. Per-database fields such asvertex_count,edge_count, andstorage_modemoved toSHOW STORAGE INFO ON CURRENT DATABASEorSHOW STORAGE INFO ON DATABASE <name>. Several global columns were renamed (global_memory_tracked→memory_tracked,global_runtime_allocation_limit→memory_limit,global_license_allocation_limit→license_memory_limit,global_disk_usage→disk_usage,storage_mode→global_storage_mode), andglobal_isolation_level/global_storage_modenow report startup defaults rather than the active database's runtime values. Update scripts and dashboards that parsed the bare query to use the per-database variant where needed. #4155 text_search.search,search_all,search_edges, andsearch_all_edgesno longer acceptlimitas a positional argument. Pass{limit: N}in the new optionalconfigmap instead (default remains1000). Update any queries that passed a third positional limit argument. #4191IS NULL,IS NOT NULL,IN,STARTS WITH,ENDS WITH,CONTAINS, and=~now bind looser than arithmetic (*,/,+,-) and tighter than comparisons, matching standard Cypher precedence. Previously these predicates bound tighter than arithmetic — for example(null + 1) * 1 IS NULLparsed as(null + 1) * (1 IS NULL)instead of((null + 1) * 1) IS NULL. Add parentheses if your queries relied on the old binding. #4240toBooleanList,toFloatList, andtoIntegerListnow returnnullfor non-convertible elements instead of failing the whole query. Update queries that relied on a bad element aborting the conversion. #4230
✨ New features
- Added the
cross_databasemodule, replacing the deprecatedmigratemodule. Query other databases (Memgraph, Neo4j, PostgreSQL, MySQL, Oracle, SQL Server, S3, Arrow Flight, DuckDB, ServiceNow) directly from Cypher and stream rows into your graph. The oldmigrate.*procedure names continue to work as aliases. #3832 - Added the
derive(path, options)aggregate function to build an in-query virtual graph over matched paths, so graph algorithms can run on derived relationships without creating real edges. Supports custom virtual edge types, undirected patterns, and property or label overlays on endpoints. #3923 - Improved
derive()so syntheticsourceNodeandtargetNodeendpoints inherit all labels and properties from the original path nodes when those options are omitted, making derived graphs easier to build without explicit endpoint config. #4214 - Added native OpenMetrics/Prometheus metrics export with per-database granularity. Set
--metrics-format=OpenMetricsto serve metrics at/metricsin Prometheus scrape format. Each database gets its own query counters, latency histograms, and storage gauges labeled by database name. The JSON format remains the default but is deprecated. #3911 - DEB and RPM packages now ship a stripped production binary plus a separate debug-symbol sidecar package instead of distinct
ReleaseandRelWithDebInfovariants. Install both when you need debug symbols (equivalent to the previousRelWithDebInfoinstall). Docker builds expose the same split viaprodanddebugflavours. #4079 - Vector indexes now support multi-label and wildcard filters. Create indexes on any combination of labels with
:L1|L2(prop)(match any),:L1&L2(prop)(match all), or(prop)(wildcard — every entity with the property). Applies to both vertex and edge vector indexes. #3981 schema.node_type_properties()andschema.rel_type_properties()now return richer output includingpropertyObservationsandtotalObservationscounts, andpropertyTypesis a properList<String>.rel_type_properties()additionally partitions results by endpoint labels, so different label-set combinations for the same edge type are reported separately. #4153- Added intra-cluster TLS for high availability deployments. New flags
--cluster-cert-file,--cluster-key-file, and--cluster-ca-filesecure communication on the management, replication, and coordinator servers. Bolt TLS remains independently configured. #4140 - Added the
RELOAD INTRA_CLUSTER TLSCypher query to rotate intra-cluster TLS certificates at runtime without restarting the cluster. #4154 - MAIN instances now expose metrics for WAL and snapshot transfer speed, including how long REPLICAs take to load durability files, so you can monitor replication throughput and spot slowdowns during catch-up or after enabling TLS. #4183
SHOW TRANSACTIONSnow includesstart_time(UTC timestamp) andelapsed_mscolumns, making it easier to identify long-running transactions without calculating elapsed time manually. #4136SHOW TRANSACTIONSnow includes a syntheticgcrow while storage garbage collection is running, withphase,trigger,exclusive_lock, anddb_namemetadata, so you can spot a slow or blocking GC directly instead of inferring it from latency alone. #4229- Added
SHOW STORAGE INFO ON CURRENT DATABASEfor per-database storage and memory metrics without naming the database explicitly.SHOW STORAGE INFO ON DATABASE <name>(andON CURRENT DATABASE) now work on Community Edition for the default database; only non-default databases still require Memgraph Enterprise.SHOW LICENSE INFOnow includes amemory_limit_policyrow that explains how memory limits apply for your license tier. #4155 - The OEM license tier is now split into
OEM(enterprise-equivalent) andOEM_COMMUNITY(community-tier tracking). Existing OEM license keys continue to work and map to the enterprise-equivalent tier on upgrade. #4158 - Snapshot creation now logs per-phase progress (edges, vertices, each index type, constraints, finalize), the trigger reason, thread count, and final statistics. Stalled snapshots can now be diagnosed from the log without guessing which phase they are stuck in. #4164
- Added fuzzy matching to
text_search.search,search_all,search_edges, andsearch_all_edgesvia an optionalconfigmap (fuzzy_distance0–2,fuzzy_prefix,fuzzy_transpositions), so typo-tolerant and prefix searches work without regex. Exact-match behavior is unchanged when fuzzy options are omitted. #4191 - Session trace events now interleave into the main Memgraph log with
[session=],[user=], and[tx=]tags, so you can follow multiple Bolt sessions in one stream without separate log files per session. #4149 - Added slow-query and failed-query logging to the main log with
[slow-query]and[failed-query]tags. Configure globally with--log_min_duration_ms,--log_failed_queries, and--log_query_plan, or override per session viaSET SESSION SETTINGfor those keys (optional EXPLAIN plan on slow queries). #4211 - Added
toBooleanOrNull,toFloatOrNull,toIntegerOrNull, andtoStringListconversion functions for safer casting when input may be missing or invalid.toStringandtoStringOrNullnow also stringify spatial points. #4230 - Added the
elementId()function, which returns a node or relationship ID as a string for integrations that expect string element IDs (for example Spring Data Neo4j). Useid()when you need an integer ID and fast point lookups. #4265 - The JSON metrics endpoint now has a formally defined contract validated in CI, ensuring backward compatibility of metric names and structure across releases. #4143
🐞 Bug fixes
- Fixed a bug where
MERGEfollowed byCREATEin the same query could produce unbounded node creation and out-of-memory errors. The underlying scan iterator now correctly scopes itself to nodes that existed when the scan started. #4080 - Fixed
cross_database(andmigrate) procedures failing with aKeyErrorwhen used withUSING PERIODIC COMMIT. The procedures now use a stable per-query identifier that does not rotate between batches. #4167 - Fixed Memgraph hanging on shutdown when telemetry or license update requests were still in flight. Those requests are now aborted during shutdown, and the shutdown sequence itself times out after 10 seconds. #4152
- Fixed a bug where switching to
IN_MEMORY_ANALYTICALstorage mode could deadlock when async index creation (for example fromENABLE TTL) was still running. The async indexer now completes before the storage mode lock is taken. #4169 - Fixed HA data instances reporting incorrect vertex and storage metrics for the default database after joining a cluster. The metrics collector now rebinds the default database UUID on join, so per-database counts use the cluster-assigned identity. #4172
- Fixed a bug where queries with leading whitespace before
EXPLAINorPROFILEcould crash or fail to parse. Leading whitespace is now trimmed before the keyword is stripped. #4181 - Fixed NuRaft coordination logs ignoring
--log-retention-days. HA coordinator log files now rotate and expire using the same retention setting as the main Memgraph log, so disk use stays predictable when you tune log retention. #4185 - Fixed
schema.node_type_properties()andschema.rel_type_properties()reporting property types the Simba BI connector (Power BI, Tableau) could not map, which forced columns to VARCHAR. Type strings now match what the connector expects so properties surface as Boolean, Float, DateTime, and Point where appropriate. #4186 - Fixed edge metadata recovery after WAL replay. Edges restored from the WAL are now indexed consistently with snapshot-loaded edges, so deletions and id lookups with
--storage-enable-edges-metadatano longer crash or return wrong results. #4189 - Fixed HA data instances incorrectly allowing
IN_MEMORY_ANALYTICALstorage mode, which replication does not support. Such instances now fail at startup if analytical mode is configured, and runtimeSTORAGE MODE IN_MEMORY_ANALYTICALreturns a clear error instead of entering an unsupported state. #4206 - Fixed incorrect operator precedence where null checks and string/list predicates bound tighter than arithmetic, so mixed expressions such as
(null + 1) * 1 IS NULLcould evaluate differently than standard Cypher expects. #4240 - Fixed startup crashes when the process user does not own the storage directory or the configured log file is not writable. Memgraph now exits cleanly with an actionable error message — including which user owns the path and how to fix it — instead of terminating with a segmentation fault. #4227
- Fixed a bug where queries that match nodes with a long chain of OR-ed indexed labels (for example
MATCH (n) WHERE n:LabelA OR n:LabelB OR n:LabelC ...) could crash the entire Memgraph process. Planning now stays within the memory limit and aborts the query instead of OOM-killing the server. #4246 - Fixed a crash that could occur when dropping a database, especially on multi-database instances with text indexes. #4188
- Fixed a crash when
SHOW STORAGE INFOcomputed disk usage while WAL files were being rotated or removed. The directory scan now tolerates files disappearing mid-scan instead of terminating the server. #4247 - Fixed
mgps.await_indexesadding a one-second delay on every Spark connector call. The procedure now returns immediately because index creation is synchronous; it remains available for compatibility. #4264 - Fixed concurrent
MERGEingestion into indexed labels and edge types being dramatically slower than equivalentCREATEworkloads. Parallel upserts now run at near-CREATEspeed instead of degrading when many workers merge against the same property index concurrently. #4273