Model or dataset
FalkorDB/FalkorDB avatar
FalkorDB/FalkorDB

FalkorDB: a sparse-matrix graph database for GraphRAG, tested against Neo4j expectations

A super fast Graph Database uses GraphBLAS under the hood for its sparse adjacency matrix graph representation. Our goal is to provide the best Knowledge Graph for LLM (GraphRAG).

6,354 stars474 forksRustNOASSERTION

At a glance

What is it?
FalkorDB stores graphs as sparse adjacency matrices and executes OpenCypher through GraphBLAS linear algebra. It is aimed at low-latency knowledge graphs for LLMs, and it ships as a Redis module, which shapes both how you install it and what you give up.
Who is it for?
Adopt FalkorDB if you want an OpenCypher graph that starts with one docker run command and you are comfortable living inside the Redis protocol, since that is the deployment model the README documents. Do not adopt it if you need a documented rollback path, a permissive OSI licence, or a query planner you can reason about from published internals; the README documents none of those.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly Rust, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What problem FalkorDB actually solves, and for whom

FalkorDB targets a narrow, real problem: graph queries that need to return fast enough to sit inside an LLM request path. The README states the goal directly, describing a "high-performance Knowledge Graph tailored for Large Language Models (LLMs), prioritizing exceptionally low latency." That framing matters because it tells you who the intended user is. This is not a general-purpose OLTP graph store for a bank's transaction network. It is built for retrieval layers behind generative AI, agent memory, cloud security graph traversal and fraud detection, all listed in the README as the workloads it powers.

The design bet is that a graph is a matrix. FalkorDB describes itself as "the first queryable Property Graph database to leverage sparse matrices" for the adjacency matrix, with querying done through linear algebra. That is a different execution model from the pointer-chasing traversal engines most graph databases use. If your queries are short, multi-hop lookups where latency dominates, the matrix formulation is a reasonable fit. If your queries are long analytical scans over billions of edges, the same formulation is a constraint rather than an advantage, and nothing in the README suggests otherwise.

Sparse matrices, GraphBLAS and where the Cypher goes

The mechanism is visible in the feature list rather than in a published architecture document. A property graph is stored with nodes and relationships carrying attributes, in line with the Property Graph Model. The adjacency structure between nodes is held as a sparse matrix, and queries are executed as linear algebra operations over that matrix, with GraphBLAS named as the underlying library in the project description. OpenCypher is the query surface, with what the README calls "proprietary extensions for advanced querying capabilities."

So the data flow for a query is: Cypher text arrives, it is translated into a sequence of matrix operations, GraphBLAS performs those operations on the sparse adjacency representation, and results come back as rows. The practical consequence is that a variable-length path match becomes a matrix multiplication rather than a recursive walk. Whether that is faster depends on sparsity and on how well the operation maps onto the library's kernels, which the README does not quantify.

The repository layout hints at a heavier internal structure than a single binary. The Cargo workspace lists three members: graph, fuzz and runtime-fuzz-target. There is a bench directory, a docs directory, and shell scripts named graphblas.sh and redisearch.sh, which suggests the build orchestrates external components rather than compiling one self-contained crate. A fuzzing target being a first-class workspace member is a good sign for a query engine that parses untrusted Cypher, though it says nothing about coverage.

Installing FalkorDB with Docker and running a first query

The README's get-started path is a single container, and it is the only install route the README documents. The image is falkordb/falkordb, and it publishes two ports: 6379 for the Redis protocol that FalkorDB speaks, and 3000 for a browser UI. The volume mount points at /var/lib/falkordb/data, so the graph survives a container restart only if you keep that mount.

bash
docker run -p 6379:6379 -p 3000:3000 -it --rm -v ./data:/var/lib/falkordb/data falkordb/falkordb

After the container starts, the README says to open a browser at http://localhost:3000 for the UI. For programmatic access, the Python client is the example the README gives. Install it from PyPI as falkordb, connect to localhost on port 6379, select a graph by name, and run Cypher through the query method.

python
from falkordb import FalkorDB

db = FalkorDB(host='localhost', port=6379)
g = db.select_graph('MotoGP')
g.query("""CREATE (:Rider {name:'Valentino Rossi'})-[:rides]->(:Team {name:'Yamaha'})""")
res = g.query("""MATCH (r:Rider)-[:rides]->(t:Team) WHERE t.name = 'Yamaha' RETURN r.name""")
for row in res.result_set:
    print(row[0])

That prints the rider name, Valentino Rossi in the README's fuller example. Because FalkorDB is a Redis module, you can also skip the client library entirely and send raw commands from any Redis client. The README shows the direct form with redis-cli, where GRAPH.QUERY takes the graph name followed by the Cypher string.

bash
redis-cli
127.0.0.1:6379> GRAPH.QUERY social "CREATE (:person {name: 'roi', age: 33, gender: 'male', status: 'married'})"

The README warns that the exact method for sending raw commands varies by client, which is worth taking literally: some Redis clients will not handle the nested reply shape that graph queries return without extra parsing.

A Redis module first, a graph database second

The most consequential fact about FalkorDB is buried in the install instructions rather than stated as a design principle. It runs on port 6379 and answers Redis commands, including GRAPH.QUERY. That means your operational surface is Redis: the same connection handling, the same client ecosystem, the same persistence and replication concepts that apply to a Redis deployment. If your team already runs Redis, the mental model transfers. If it does not, you have adopted a Redis deployment as a side effect of adopting a graph database, and the README does not walk through what that implies for memory sizing, eviction policy or failover.

The multi-tenant claim in the README's subtitle is consistent with this. Multiple named graphs live in one instance, selected by name at query time, which is how the Python example switches between the MotoGP and social graphs. That is convenient for isolating tenants without separate processes. It also means a single instance's memory is shared across all of them, and the README does not document per-graph quotas or isolation guarantees.

What the documentation does not cover

The README is a landing page, not an operations manual. It does not document rollback, backup and restore procedures, or upgrade steps between the 4.20.x releases. It does not state whether FalkorDB is in memory only, which is a question people search for by name, and the presence of a data volume mount is suggestive but not an answer. It does not publish latency or throughput numbers, and the claim of being "ultra-fast" is not backed by anything in the README you can check.

The licence situation deserves its own caution. The README badge says Server Side Public License, and the Cargo.toml declares license = "SSPL-1.0" for the falkordb-rs package, while the repository's licence field is reported as NOASSERTION. SSPL is not an OSI-approved licence, and its Section 13 obligations around offering the functionality as a service are the part that catches people. If you plan to expose FalkorDB as part of a hosted product, read the licence text itself rather than a summary, and get your own legal read. Nothing here is legal advice, and the discrepancy between the badge and the repository metadata is exactly the kind of thing to resolve before you build on it.

One more honest limitation: the Rust crate is versioned 99.99.99 in Cargo.toml, which is a placeholder rather than a release version. That is normal for an internal workspace crate that is not published, but it means the Rust package metadata is not a guide to what you are running. The version you are running is the release tag, and the most recent ones listed are v4.20.4, v4.20.3 and v4.20.2.

FalkorDB compared with Neo4j, Memgraph and Kuzu

The comparison people search for most is against Neo4j, and the difference is architectural rather than cosmetic. Neo4j is a standalone JVM database with its own storage engine, its own query planner, and a long documented history of clustering and backup tooling. FalkorDB is a Redis module that represents adjacency as a sparse matrix and executes through GraphBLAS. You get a much smaller deployment unit and a familiar protocol, and you give up the depth of operational documentation that comes with a decade-old standalone product. If your team's question is "can we run this without adding a new database tier to our infrastructure," FalkorDB's answer is stronger. If the question is "can we find a documented procedure for failover," Neo4j's answer is stronger.

Memgraph is the closer comparison on execution model, since it also emphasises in-memory graph processing and Cypher, and the two are frequently weighed against each other. The distinguishing detail in FalkorDB's case is the explicit sparse-matrix and linear-algebra formulation, which is a claim about how queries execute, not just where data lives. Kuzu takes a different route again, positioning itself as an embedded analytical graph database, which suits columnar analytical workloads rather than the low-latency lookup pattern FalkorDB targets. Comparing FalkorDB to ArangoDB, SurrealDB or Neptune mostly compares a graph-first engine to multi-model or managed-cloud systems, and those differ on dimensions the README does not address, such as multi-region replication and managed operations.

Client libraries, licence and upgrade cost

The README lists official clients for Java (jfalkordb, BSD), Python (falkordb-py, MIT), Node.js (falkordb-ts, MIT), Rust (falkordb-rs, MIT) and Go (falkordb-go, BSD), with Maven, PyPI, npm and crates.io as the distribution channels. Note the split: the client libraries are permissively licensed even though the server is SSPL. That is a common arrangement and it means your application code is not the thing carrying the SSPL obligation; the server you deploy is.

Upgrade cost is hard to assess from what is available. Three releases landed within a month in August 2026, at v4.20.2, v4.20.3 and v4.20.4, which suggests a steady patch cadence, but the README does not describe a compatibility policy, a migration tool, or what changed between those versions. The last push to the default branch was on 2026-09-10, so the repository is being touched, but a push is not a release and neither is a promise about upgrade safety. Plan to test upgrades against a copy of your data, because the documentation does not tell you what to expect.

Editorial conclusion

Adopt FalkorDB if you want an OpenCypher graph that starts with one docker run command and you are comfortable living inside the Redis protocol, since that is the deployment model the README documents. Do not adopt it if you need a documented rollback path, a permissive OSI licence, or a query planner you can reason about from published internals; the README documents none of those. Before committing, verify three things: the exact licence obligations for the version you pull, whether your client library of choice is listed among the official clients, and how the graph behaves under your own write-heavy workload rather than a read-heavy demo.

Frequently asked questions

Is FalkorDB free?

The README shows a free cloud signup link and a Docker image, so you can run it without paying. The server licence is SSPL-1.0, which is not an OSI-approved open source licence, so "free" here means free of charge rather than free of licence conditions.

Is FalkorDB open source?

The source is public on GitHub, but the server is licensed under SSPL-1.0, which the Open Source Initiative does not recognise as an open source licence. The client libraries are separately licensed MIT or BSD, so the answer differs depending on which part you mean.

How do I use FalkorDB from Python?

Install the falkordb package from PyPI, create a FalkorDB object pointing at host localhost and port 6379, call select_graph with a graph name, and run Cypher through the query method. Results come back in result_set.

Is FalkorDB in memory?

The README does not state whether FalkorDB is in memory only. The Docker example mounts a volume at /var/lib/falkordb/data, which implies data is persisted to disk, but the documentation does not describe the storage model in detail.

What is FalkorDB?

FalkorDB is a multi-tenant property graph database that stores the adjacency matrix as sparse matrices and executes OpenCypher queries using linear algebra, with GraphBLAS under the hood. The README positions it as a knowledge graph for LLMs and GraphRAG.

Official sources

  1. FalkorDB/FalkorDB on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/falkordb-falkordb.svg)](https://hysenlabs.com/projects/falkordb-falkordb)