| Name | Modified | Size | Downloads / 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-secand--instance-health-check-frequency-sechave 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 useSET COORDINATOR SETTING 'instance_down_timeout_sec' TO '<value>'andSET 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, andREVOKEnow 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=trueto 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=trueif your workload resolves edges by internal ID. #4228 - Added
SUSPEND DATABASEandRESUME DATABASEfor 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 likeCREATE/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
memgraphpackage first, then thememgraph-mageRPM. #4289 - Added
text_search.fuzzy_phrase_searchandtext_search.fuzzy_phrase_search_edgesfor typo-tolerant phrase matching on a single property. Queries usedata.<property>:<terms>with ordered, adjacent terms and prefix matching on the last term, sodata.title:big bad wocan matchbig bad wolforbig bad worldwhenfuzzy_distanceallows 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-failureflag (defaultfalse) so an in-memory database that fails durability recovery on startup comes up in abrokenstate 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 newHealthcolumn inSHOW DATABASESand ahealthrow inSHOW STORAGE INFO. Recover a broken database in place withRECOVER 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 propertyIN <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 asreplace("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 propertyINlists with duplicates,ORDER BYover 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
.olddirectory 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