FalkorDB Release Notes
10 release notes curated from 1 source by the Releasebot Team. Last updated: Oct 21, 2026
- Oct 20, 2026
- Date parsed from source:Oct 20, 2026
- First seen by Releasebot:Oct 21, 2026
v4.22.2
FalkorDB releases version 4.22.2 with fixes for crashes in reduce() queries that shadow bound variables and unique constraints on whitespace-trimmed strings, improving query and constraint reliability.
FalkorDB 4.22.2
Bug Fixes
reduce()crash when the iterator variable shadows a bound alias. A query likeMATCH (n) RETURN reduce(s = 0, n IN [1,2,3] | s + n)— where the reduce iterator reuses the name of an already-bound, live variable — gave the accumulator a record slot one past the end of the record, causing a heap overflow (SIGSEGV in release builds, assertion in debug). The slot index is now recomputed so the iterator correctly shadows the outer binding without corrupting the record. (#265, #3406)Crash when enforcing a unique constraint on whitespace-trimmed string values. RediSearch trims surrounding whitespace from TAG tokens, so a constrained string whose normalized form is empty (
""," ","\t") or differs from the raw value (leading/trailing whitespace, e.g." abc") doesn't round-trip through the index — the lookup returns nothing and a NULL dereference segfaulted in release builds. Such values are now treated as satisfying the constraint (consistent with the existing unindexable-type handling) instead of crashing.
- Oct 15, 2026
- Date parsed from source:Oct 15, 2026
- First seen by Releasebot:Oct 21, 2026
v4.22.1
FalkorDB improves graph restore and RDB loading by fixing crashes when replacing live graphs and safely rejecting truncated or malformed payloads, while preserving valid multi-key loads.
Fix crash when RESTORE … REPLACE targets a live graph (#3176, fixes #259 and #2506)
RESTORE decodes a payload before Redis evicts the value it replaces, so the old graph was still registered under its name. The decoder reused that live graph context instead of building a fresh one, which re-added the existing schema (crashing in Index_SetLanguage on an indexed graph — the #2506 signature) and handed the still-referenced graph back to Redis as the "new" value, double-freeing it on the background free thread (the #259 crash). The decoder now only continues into an existing graph while it is genuinely mid multi-key load; otherwise it builds a fresh graph. The legitimate multi-key RDB / replication load path is preserved.
Reject truncated RDB payloads gracefully (#3141)
A short read — a diskless-replication stream dropping mid-transfer, a truncated RESTORE/MIGRATE payload, or a corrupt dump.rdb — previously panicked the server, or in release builds silently built a corrupt graph. FalkorDB now declares REDISMODULE_OPTIONS_HANDLE_IO_ERRORS and checks for truncation at every count and loop in the decoders, so RESTORE replies with an error and an RDB load or diskless sync is refused, with no crash and no leaked graph.
Fail cleanly on malformed RDB payloads (#3329)
Builds on the short-read work with a centralized decode-failure path (the "long-jump" landing pad): every structural check — unknown type tags, out-of-range entity/schema/index/constraint fields, counts that overrun their buffers, GraphBLAS-rejected matrices/tensors — now aborts the decode with a single logged reason (Failed loading graph key '': ) instead of asserting (debug) or corrupting memory (release). v14 index decoding now also rejects vector fields it cannot represent.
Original source All of your release notes in one feed
Join Releasebot and get updates from FalkorDB and hundreds of other software products.
- Oct 8, 2026
- Date parsed from source:Oct 8, 2026
- First seen by Releasebot:Oct 21, 2026
v6.0.2
FalkorDB releases v6.0.2 with broad fixes for Cypher queries, range and vector indexes, temporal values, and graph commands, alongside improvements to ID handling, performance, Docker security, and build tooling.
FalkorDB v6.0.2
What's Changed
Bug fixes
- CALL {} subqueries that import no variables no longer read the outer query's variables (#2845)
- Variable-length and allShortestPaths patterns apply an inline property map on an already-bound endpoint; inline maps are planned once instead of twice (#2390)
- Range index scans include ±inf for an open bound and return undirected edges in both directions (#3081)
- Temporals are no longer matched by numeric range-index predicates (#3076)
- An exclusive string range with equal bounds selects nothing (#3072)
- A wrong-dimension vector no longer drops the entity from every index on its label (#3087)
- Vector KNN queries clamp k instead of allocating k entries (#3088)
- Validate index OPTIONS like 4.x: vector dimension/similarityFunction required, case-insensitive metric, unknown fulltext keys rejected (#3094)
- Parser: reject NOT NOT, SET [n), f(1,), MATCH MATCH, LOAD CSV WITH; accept IS NULL IN (#3060)
- Block comments end at */, and a lone / is no longer swallowed (#2908)
- Named paths created by CREATE are materialized (#2829)
- startNode() and endNode() accept null (#3132)
- Compact date and time strings with non-digits are rejected (#3125)
- toInteger of an integer string below i64::MIN returns null (#2989)
- sign() of a float returns an integer (#2907)
- coalesce() with zero arguments is rejected (#2990)
- list.remove with a huge count no longer overflows (#2952)
- Type-mismatch errors name types as Cypher does (#3127)
- UDF results keep -0.0, constructor-keyed maps and non-finite vecf32 (#3074)
- The graph global is defined when a UDF library is loaded (#3079)
- One flag parser for GRAPH.QUERY/RO_QUERY/PROFILE/EXPLAIN, matching 4.x (#3010)
- GRAPH.CONFIG validates values, arity and names like 4.x (#3021)
- GRAPH.MEMORY accepts SAMPLES 0; GRAPH.CONSTRAINT parses entity type and count like 4.x (#3053)
- RDBs keep every graph in GRAPH.LIST when loaded by 4.x (#3161)
- GRAPH.EFFECT refuses records that act on deleted or never-created entities (#3022)
- GRAPH.EFFECT refuses ids too large for any graph instead of crashing (#2911)
- Effects encoder refuses records its reader would reject (#2916)
- Decoded effect id lists keep their order when extended (#2920)
Improvements
- IdSpace is the single authority for node and relationship ids; writes run the same id check as replicas (#2846)
- CoW B+-tree: point lookups, memory accounting, tuple cursor, narrowable doc width (#2278)
Build & CI
- Docker: redis-server runs as the non-root falkordb user; set SKIP_DROP_PRIVS=1 to keep root (#3181)
- Docker: remove util-linux from the runtime image; add a Trivy image scan to CI (#3179)
- Replace graphblas.sh/redisearch.sh with a native-deps crate; GraphBLAS and LAGraph are now submodules (#2695)
- Move the toolchain to LLVM 23 (#3163)
- Fix the RediSearch build with libc++ 23 on macOS (#3170)
Dependencies
- rustls 0.23.41 → 0.23.45 (#3182)
- cargo-deps group, 9 updates (#3131)
- github-actions group, 6 updates (#2886)
- rltest >= 0.7.29 (#3130)
Tests
- Cover OPTIONAL MATCH cartesian product cardinality (#2469), fixed-length path multiplicity (#2471), crash-inducing range()/exists() arguments (#2487), nested reduce with shadowed names (#2488), and aggregating WITH * in allShortestPaths (#2489)
Thanks to @onlyysaurabh, @aniruddhaadak80 and @juliuskent11 for their contributions.
Full Changelog: v6.0.1...v6.0.2
Original source - Oct 1, 2026
- Date parsed from source:Oct 1, 2026
- First seen by Releasebot:Oct 21, 2026
v6.0.1
FalkorDB updates its build image with up-to-date dependencies in the v6.0.1 release.
What's Changed
- Build image with up do date dependencies #3153
Full Changelog: v6.0.0...v6.0.1
Original source - Sep 30, 2026
- Date parsed from source:Sep 30, 2026
- First seen by Releasebot:Oct 21, 2026
v4.22.0
FalkorDB adds advanced path-finding with A* and k-shortest paths, plus persistent, incrementally maintained CCH indexes. The release also fixes several crashes and improves replication and database persistence.
✨ New features
Advanced path-finding algorithms (#2630, #2720, #2656, #2732)
- A* search with an admissible haversine heuristic + optional heuristicScale so it stays optimal for non-distance weights like travel time (heuristicScale = 1/max_speed; 0 = Dijkstra). Fixes ~1.6× suboptimal routes on time-weighted road networks.
- Yen's k-shortest paths with goal-directed spur search.
- All-shortest-paths and k-shortest-paths procedures.
- Optimality/cost-model fixes: correct pathCost/hop-count accounting, cost-aware k-shortest selection, redundant destination-lookup skip in landmark mode.
CCH path index (#2680, #2721, #2865)
- DDL: CREATE CCH INDEX FOR ()-[e:A|B]->() ON (e.w) / DROP CCH INDEX …. Multi-reltype supported; hierarchy stays internal (no shortcut edges / rank props in your graph).
- Query: db.idx.cch.query — rank-pruned bidirectional Dijkstra.
- Incremental maintenance: commit-coalesced dirty tracking (CLEAN < RECUSTOMIZE < REBUILD); weight/edge changes recustomize scoped, topology changes rebuild.
- Persistence: full RDB serialization, restored on load.
🐛 Bug fixes
- Crash on MERGE preceded by an erroring clause (#3116).
- Crash when a clause errors mid plan-build (#3139).
- Replica SIGSEGV applying an UPDATE_EDGE/UPDATE_NODE effect naming a freed id (id divergence) (#2581).
🔄 Replication & persistence
- Remove full-sync requirement from the decoder; maintain transpose in Delta_set (#2584).
- Export Graph_EncodingVersion / Graph_GetDecoder (#2552).
- RDB encoding v19 → v20 (adds CCH serialization).
Similar to FalkorDB with recent updates:
- Smokeball release notes147 release notes · Latest Oct 2, 2026
- Cosmolex release notes20 release notes · Latest Jul 30, 2025
- PracticePanther release notes36 release notes · Latest Aug 11, 2026
- Salesforce release notes83 release notes · Latest Oct 1, 2026
- Microsoft release notes1046 release notes · Latest Oct 21, 2026
- Zoom release notes221 release notes · Latest Oct 19, 2026
- Sep 29, 2026
- Date parsed from source:Sep 29, 2026
- First seen by Releasebot:Oct 21, 2026
v6.0.0
FalkorDB releases version 6.0 with a new Rust engine that keeps existing Cypher queries and GRAPH commands while changing replication to apply write effects. It also upgrades full-text and vector search, improves bulk-loading memory safety, and updates available packages.
FalkorDB 6.0.0
FalkorDB 6.0 is the first release of the new FalkorDB engine, written in Rust. It replaces the C engine that shipped in every 4.x release.
For applications nothing changes: it is still a Redis module named graph, with the same GRAPH.* commands, the same Cypher, and the same client libraries. What changes is how replication works and which packages are published. Read Upgrading from 4.x before moving a production deployment.
Upgrading from 4.x
Replication
Don't mix 4.x and 6.0 in the same primary/replica set. 6.0 replicates writes only as effects in a new format, v3 (#2570, #2754), which 4.x can't read, and 6.0 can't apply the effects 4.x sends. Upgrade every node in a replication group together.
Configuration
EFFECTS_THRESHOLD is accepted but ignored: effects are now the only replication mechanism. GRAPH.CONFIG GET still returns the value you set, so existing config files keep working.
TIMEOUT stays deprecated, as in 4.x. Use TIMEOUT_DEFAULT and TIMEOUT_MAX.
Packages
Docker. falkordb/falkordb and falkordb/falkordb-server on Docker Hub and GHCR:
Tag Now points at 6.0.0, latest 6.0 (Rust engine), amd64 + arm64 edge the latest main build (Rust engine); edge-rs is a deprecated alias v4.x.y, edge-c the C engine, unchanged latest-alpine, *-alpine still the C engine (4.20.7). 6.0 has no Alpine images.The falkordb/falkordb image bundles FalkorDB Browser on port 3000, as before.
Module binaries attached to this release, with SHA256SUMS:
Asset Platform falkordb-x64.so Linux x86-64 falkordb-arm64v8.so Linux arm64 falkordb-rhel9-x64.so RHEL 9 x86-64 falkordb-amazonlinux2023-x64.so Amazon Linux 2023 x86-644.20 also published Alpine, RHEL 8, macOS and debug-* builds. 6.0 does not publish those yet.
What's different from 4.20.7
- New engine. The query engine is new code, written in Rust. Your queries and clients carry over: the GRAPH.* commands and Cypher are the same.
- Replicas apply changes, they don't re-run queries. 4.x sent some writes to replicas as the query text, and the replica ran the query again. 6.0 always sends the resulting changes, so a replica never re-executes a write. EFFECTS_THRESHOLD, which chose between the two, is now ignored.
- Newer search engine. Full-text and vector indexes run on RediSearch 8.6.1, up from 2.6.23. Full-text scoring still defaults to TFIDF, so scores match 4.x.
- GRAPH.BULK no longer reserves memory from the counts a client declares up front, so a wrong or malicious count can't exhaust the server's memory (#2444).
- Same Redis. 6.0 is built on Redis 8.10.2, as is 4.20.7.
Not in 6.0 yet
Algorithms. 6.0 has the same procedures as 4.20.7, and you lose nothing by upgrading. These algorithms were developed for the C engine after 4.20 and have not shipped in any release. They are being ported to the new engine:
- A* shortest paths (algo.AStar), guided by latitude/longitude, with a k-shortest-paths variant (#2947).
- Customizable Contraction Hierarchies (algo.CCH, algo.CCH.query), for fast repeated shortest-path queries (#2948).
- Leiden and Louvain community detection (algo.leiden, algo.louvain), still in development (#2949).
Packages. 6.0 publishes no Alpine images, and no Alpine, RHEL 8, macOS or debug-* module builds (see Packages). latest-alpine stays on 4.20.7.
Mixed-engine replication. A 4.x node and a 6.0 node can't replicate to each other (see Upgrading from 4.x).
If you ran the preview images (edge, edge-rs)
The new engine has been available as a preview since August. Changes since then:
- Faster queries, especially filters and label checks, multi-hop traversals, queries with many parameters, aggregations, and deleting nodes.
- Less memory on write-heavy workloads.
- Crash and hang fixes: very deeply nested expressions, nested index scans, pattern comprehensions, algo.SPpaths on large graphs, and shutdown under heavy telemetry.
- Wrong-result fixes around NULL (joins, CASE, composite UNIQUE constraints), a label removed and re-added in one query, and deleting an edge created earlier in the same query.
- Closer to 4.x behaviour: GRAPH.INFO output, NUL bytes in queries, and INFO no longer showing RediSearch's version as FalkorDB's (#2915).
- Docker image fixes: the bundled Browser starts, and redis-sentinel, redis-check-rdb and redis-check-aof are back.
The full list is in the pull requests merged into main since #2279.
Original source - Sep 24, 2026
- Date parsed from source:Sep 24, 2026
- First seen by Releasebot:Oct 21, 2026
v4.20.7
FalkorDB releases a security and bug-fix patch that updates Redis for a security vulnerability, prevents crashes from concurrent graph constraint creation, and improves ID-based query optimization and correctness.
Patch release on top of v4.20.6. Contains a security update, two bug fixes, and a CI change.
Full changelog: v4.20.6...v4.20.7
🔒 Security
Bump Redis to 8.10.2 for CVE-2026-85091. Updates the pinned Redis version across all Docker images (build + server) and the sanitizer/test paths. (#2850, fixes #2849)
🐛 Bug Fixes
Prevent crash from concurrent GRAPH.CONSTRAINT creation. A write query reserves node IDs under the read lock, then releases it to commit under the write lock; in that gap a failing async GRAPH.CONSTRAINT could roll back and zero the graph-global reserved_node_count, driving it negative on the write query's commit — an assert in debug and datablock corruption (later crash) in release. A read-locked pre-check now rejects the common benign failures (constraint already exists, missing supporting index, duplicate properties) without taking the write lock or rolling back. (#2875, fixes #2880; partially mitigates the underflow crash tracked in #238 — a TOCTOU residual remains)
Seek-by-id now optimizes compound expressions opposite ID(n). Filters like ID(a) = x + 1, ID(b) = ID(a) + 1, reversed operands, inequalities, and multi-bound ranges now reduce a scan+filter to a NodeByIdSeek (previously only bare operands qualified). Also fixes a correctness bug where a per-record bound resolving to an empty range (non-integer / out-of-range value) dropped all remaining records instead of skipping just that one — e.g. UNWIND [1.1, 2, 3.5, 4] AS x MATCH (n) WHERE ID(n) = x now returns nodes 2 and 4. (#2870, fixes #2871)
Original source - Sep 16, 2026
- Date parsed from source:Sep 16, 2026
- First seen by Releasebot:Oct 21, 2026
v4.20.6
FalkorDB fixes parallel-edge counting and index population issues, preventing skipped rows or hangs while reducing write stalls during large edge-index builds.
🐛 Bug fixes
count(*) under-counted parallel edges
MATCH (a)-[e]->(b) RETURN count() returned 1 instead of 3 for three parallel edges. Because count() references no entity, the edge alias was left unreferenced, the algebraic expression dropped the edge, and the traversal emitted a single record per (src, dest) pair — collapsing parallel edges and under-counting. The reference-map builder now detects a star aggregation and keeps the pattern's named entities referenced so their multiplicity is preserved (scoped to user aliases and * projections only; plan-cache safe).
PR: #2660
Index population could skip rows or hang on unsynced delta matrices
When a label or relation matrix held unsynced delta-plus entries, index population resumed batched scans at [last_row, MAX) while the iterators drained the main matrix before yielding delta-plus — permanently skipping delta-plus rows below the resume point (nodes), and spinning forever re-scanning the same range (edges, once a masking tautology was removed). Population now merges the main matrix and delta-plus in strict row-major order, making batch resume safe. Also releases the read lock between edge batches (~1.5s write stall on 1M edges → ~5ms).
PR: #2812
Fixes: #2811
Full Changelog: v4.20.4...v4.20.5
Original source - Sep 16, 2026
- Date parsed from source:Sep 16, 2026
- First seen by Releasebot:Oct 21, 2026
v4.20.5
FalkorDB fixes parallel-edge counting and index population issues, preserving rows during batched scans and reducing write stalls when indexing large edge sets.
🐛 Bug fixes
count(*) under-counted parallel edges
MATCH (a)-[e]->(b) RETURN count() returned 1 instead of 3 for three parallel edges. Because count() references no entity, the edge alias was left unreferenced, the algebraic expression dropped the edge, and the traversal emitted a single record per (src, dest) pair — collapsing parallel edges and under-counting. The reference-map builder now detects a star aggregation and keeps the pattern's named entities referenced so their multiplicity is preserved (scoped to user aliases and * projections only; plan-cache safe).
PR: #2660
Index population could skip rows or hang on unsynced delta matrices
When a label or relation matrix held unsynced delta-plus entries, index population resumed batched scans at [last_row, MAX) while the iterators drained the main matrix before yielding delta-plus — permanently skipping delta-plus rows below the resume point (nodes), and spinning forever re-scanning the same range (edges, once a masking tautology was removed). Population now merges the main matrix and delta-plus in strict row-major order, making batch resume safe. Also releases the read lock between edge batches (~1.5s write stall on 1M edges → ~5ms).
PR: #2812
Fixes: #2811
Full Changelog: v4.20.4...v4.20.5
Original source - Aug 24, 2026
- Date parsed from source:Aug 24, 2026
- First seen by Releasebot:Oct 21, 2026
v4.20.4
FalkorDB releases an update that prevents replica crashes by detecting graph divergence and triggering a full resync, speeds persisted graph loading with incremental matrix rebuilding, and adds public APIs for version-aware serialization.
What's Changed
Bug Fixes
- fix(effects): stop replica SIGSEGV on UPDATE_EDGE/UPDATE_NODE divergence - replicas no longer crash when an effect references a node or edge that no longer exists locally; the mismatch is now detected and triggers a full resync instead (#2581)
Performance
- remove full sync from decoder - transpose matrices are rebuilt incrementally as delta-matrix components are set during RDB decoding instead of forcing a full sync at the end, speeding up loading of persisted graphs (#2584)
Improvements
- serializers: export Graph_EncodingVersion and Graph_GetDecoder - new public APIs let external modules (e.g. graph-offloading) stamp dumps with their encoding version and select the matching decoder on load (#2552)
Full Changelog: v4.20.3...v4.20.4
Original source
This is the end. You've seen all the release notes in this feed!
Curated by the Releasebot team
Releasebot is an aggregator of official release notes from hundreds of software vendors and thousands of sources.
Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.