Download Latest Version v3.12.0 source code.zip (12.5 MB)
Email in envelope

Get an email when there's a new version of Memgraph

Home / v3.12.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-07-13 8.8 kB
v3.12.0 source code.tar.gz 2026-07-13 8.9 MB
v3.12.0 source code.zip 2026-07-13 12.5 MB
Totals: 3 Items   21.4 MB 1

Memgraph v3.12.0 - July 15th, 2026

⚠️ Breaking changes

  • The deprecated high availability startup flags --instance-down-timeout-sec and --instance-health-check-frequency-sec have been removed after two release cycles. They were deprecated in 3.10 and ignored since then, but startup now fails if either flag is still set. Remove them from coordinator configs and use SET COORDINATOR SETTING 'instance_down_timeout_sec' TO '<value>' and SET COORDINATOR SETTING 'instance_health_check_frequency_sec' TO '<value>' instead. Values previously passed via the flags are not migrated automatically — re-apply any non-default settings after upgrade. #4310

✨ New features

  • Added property-based access control for nodes and relationships. GRANT, DENY, and REVOKE now accept a property list ({prop, ...} or {*} for all properties) alongside existing label and permission rules, so you can restrict which properties a user or role can read or write on matching nodes. #4156
  • Added opt-in lightweight edges via --storage-light-edge=true to cut roughly 24B of memory overhead per relationship when you need properties on edges. Edges are pool-allocated instead of stored in a dedicated skip list container, while traversals and pattern matching behave as before. Enable --storage-enable-edges-metadata=true if your workload resolves edges by internal ID. #4228
  • Added SUSPEND DATABASE and RESUME DATABASE for multi-tenant Enterprise deployments. Suspend tears down a tenant's in-memory storage to a durable COLD shell to free RAM while keeping its data on disk; resume rebuilds it HOT with all data intact. Operations replicate across the cluster like CREATE/DROP DATABASE. #4280
  • MAGE is now available as prebuilt RPM packages on CentOS 9 and CentOS 10, so you can install the graph algorithm library with your package manager instead of building from source. Install the matching memgraph package first, then the memgraph-mage RPM. #4289
  • Added text_search.fuzzy_phrase_search and text_search.fuzzy_phrase_search_edges for typo-tolerant phrase matching on a single property. Queries use data.<property>:<terms> with ordered, adjacent terms and prefix matching on the last term, so data.title:big bad wo can match big bad wolf or big bad world when fuzzy_distance allows a few edits across the phrase. #4304
  • Added a cluster-wide coordinator read-only setting synced across coordinators, so operators can enable global read-only mode from any coordinator in the cluster. #4330
  • Added the --storage-allow-recovery-failure flag (default false) so an in-memory database that fails durability recovery on startup comes up in a broken state instead of crashing the whole process. A broken database is empty, leaves its on-disk files untouched, and rejects data queries; healthy databases keep working. Health is reported via a new Health column in SHOW DATABASES and a health row in SHOW STORAGE INFO. Recover a broken database in place with RECOVER SNAPSHOT, restore the data directory from a backup, or drop it; on a cluster, a broken replica database self-heals from the main while a broken main stays main (no automatic failover). #4284

🛠️ Improvements

  • WAL files are now protected with CRC32 checksums. The WAL header and each transaction carry their own checksum, which is verified during recovery and on replicas before the data is applied, so silent on-disk corruption is detected instead of being recovered. WAL files written by older versions remain recoverable without verification. #4225
  • Text search and regex queries return results faster, especially regex searches with large match sets. Regex top-N queries now stop once the configured limit is reached instead of scanning every match, so broad patterns on large indexes complete much sooner. #4286
  • MATCH (n) WHERE id(n) IN <list> and label property IN <list> filters now use indexed scans when the list is a parameter or expression, instead of scanning the full graph. Bulk id lookups and parameterized membership filters run much faster on large databases. #4299
  • Label-property indexes for one or two properties now store entries inline instead of allocating a separate heap buffer per entry, reducing memory overhead for the most common index configurations. #4308
  • Reduced query overhead when property-based access control is enabled by caching the fine-grained auth checker per session and skipping property permission checks when no property-level restrictions apply. #4309
  • Production Docker images now ship with supply chain attestations and SPDX SBOMs, signed with cosign. You can verify image signatures and retrieve the SBOM for installed images to support security auditing and compliance workflows. #4337

🐞 Bug fixes

  • Fixed replace() causing an infinite loop and OOM when the search string is empty. Empty search now inserts the replacement at every character boundary with bounded allocation, so queries such as replace("abc", "", "-") return "-a-b-c-" instead of crashing the server. #4269
  • Fixed Bolt 4.4 clients receiving routing tables from data instances and incorrectly defaulting the target database. Data instances now reject routing requests, and database selection over Bolt 4.4 works as expected. #4270
  • Fixed user and role data being corrupted during rolling HA upgrades between Memgraph versions. Auth entities now carry a version field and are migrated on deserialize, so fine-grained access grants replicated from an older MAIN are preserved after failover to an upgraded REPLICA. #4301
  • Fixed duplicated coordinator entries in the routing table when re-adding a coordinator that was the current leader. #4311
  • Fixed negative replication lag values in the routing table that could produce invalid routing entries when re-adding a coordinator or during failover. #4312
  • Fixed MAIN instances hanging on shutdown while snapshot or WAL replication is still in progress. Shutdown now aborts the replication client so the instance stops immediately instead of waiting for replication to finish. #4314
  • Fixed replication failures during WAL recovery when file-bearing RPC messages were split across network reads. Consumed message data is now dropped from the buffer so files are not parsed twice. #4317
  • Fixed a rare server crash under heavy concurrent write load caused by a heap-use-after-free between transaction commit and storage garbage collection. Committed deltas are now registered before the commit is marked finished, so fast-discard and GC no longer free memory still referenced by in-flight transactions. #4323
  • Fixed edge property index scans scaling linearly with index size for bounded lookups. Scans now seek directly to the lower bound instead of walking from the head of the skiplist. #4326
  • Fixed several planner bugs that caused wrong or missing rows for edge id(e) IN [...], edge property IN lists with duplicates, ORDER BY over unwind-fed index scans, composite-index nullable ordering, and nested edge property filters. #4336
  • Fixed snapshot and WAL transfer files not being cleaned up when the final RPC response fails to send. Files are now moved to the .old directory regardless of send success, preventing orphaned durability files on replicas. #4347
  • Track memory reclamation when jemalloc's background dirty-page decay returns pages to the OS. This caused reported memory usage to exceed actual memory usage. #4396
Source: README.md, updated 2026-07-13