Graphiti v0.29.3 keeps current and historical facts together
Graphiti v0.29.3 models knowledge as entities, relationships, source episodes, and optional custom types. A relationship can have a validity window, so a newer episode can invalidate an old fact while preserving the earlier state and its source. That is more useful than a flat chunk store when an agent must distinguish a former job, address, preference, or policy from the current one.
The repository at commit 8b61fce contained 359 files, about 61,771 source lines, and 22.4 MB before dependencies. The core can ingest text or structured JSON, extract entities and edges, and search with semantic, keyword, and graph methods. Pydantic models let an application prescribe entity and edge types. Learned structure is also supported, though the model provider still decides whether extraction follows the requested schema.
Version 0.29.3 still requires a database and model stack
Graphiti v0.29.3 does not include its own production graph engine. The README supports Neo4j, FalkorDB, and Amazon Neptune, with OpenSearch Serverless also required for Neptune full-text search. OpenAI is the default for language and embedding calls. Anthropic, Gemini, Groq, Azure OpenAI, Voyage, and compatible local endpoints add choices, but each combination brings credentials, model names, dimensions, and structured-output behavior to test.
Our installed Python environment used 5,322 MB for 236 packages before any graph database image or local model weights. The README's Compose files can start Neo4j or FalkorDB, but application owners still handle backups, upgrades, network access, and database credentials. Zep's managed product includes user and conversation services; Graphiti's comparison table says open-source users build those themselves. That distinction should drive the buy-versus-build decision.
What happened when we ran it
Our sandbox installed Graphiti in 111 seconds, adding 236 packages in a Python 3.12 Debian container with 3 CPUs and 8 GB of RAM. The build completed in 6 seconds. Pip-audit reported 0 known vulnerabilities. The 359-file repository included 12 CI workflow files, a Dockerfile, a Compose file, and a tests directory, which gives contributors visible paths for automation and local services.
The test command did not finish within 900 seconds. Its last output showed progress at 14%, 28%, and 43%, followed by groups of E and F markers. The run ended before pytest printed a final pass, error, failure, or skip count, so those totals are unknown. The log establishes a timeout with errors and failures in our no-secret environment; it does not identify their causes.
The 900-second timeout blocks a clean test verdict
A passing 6-second build confirms that the package could be assembled in the measured environment. It does not compensate for a test run that reached 43% and never completed. Some Graphiti tests may depend on databases, providers, or other services, but the supplied tail does not map each marker to a missing dependency. A contributor should reproduce the suite with the project's expected service matrix and retain the first complete trace.
The checkout consumed 5,322 MB after a 111-second installation, unusually high for 22.4 MB of source. That result makes cache strategy and image layering worth checking before CI fan-out. It also sets the right expectation for a local trial: uv sync is only the package step. A realistic evaluation adds a graph backend, model access, sample episodes, index creation, retrieval checks, and verification that an updated fact gets the intended validity window.
FalkorDB group routing has open isolation reports
Open issue 1331 reports that concurrent add_episode calls for separate FalkorDB groups mutate a shared driver, allowing writes to land in the wrong graph. Issue 1651 describes MCP episode retrieval and deletion using whichever graph that driver currently targets. Both reports concern group routing, not a generic database complaint. Teams using group IDs for tenant separation should treat them as application data boundaries only after an adversarial concurrency test proves isolation.
Our 900-second suite was run without secrets and does not confirm or refute either report. Another open report, issue 1756, says a clean graphiti-core[falkordb] install can resolve an incompatible Redis version and fail while constructing the driver. The latest v0.29.3 release includes several FalkorDB routing and search fixes, which shows maintainer attention, but the open group contamination reports were updated after that release.
The MCP server exposes the graph, including its backend choices
Graphiti includes an MCP server for adding, retrieving, deleting, and searching episodes and entities. That makes temporal memory available to an assistant without writing a custom protocol adapter. It does not separate the assistant from the graph's security model. Database credentials, model keys, group routing, tool authorization, and deletion policy remain server concerns, while issue 1651 specifically places two wrong-graph behaviors in MCP handlers.
The measured repository has 12 CI workflows plus Docker and Compose files, yet the MCP path still needs a live acceptance test. Add data to 2 groups, query each group, delete one episode, restart the container, and query again. That sequence checks the failure class described in current issues more directly than a single successful search. For sensitive memories, also set GRAPHITI_TELEMETRY_ENABLED=false before initialization if the documented anonymous collection conflicts with policy.
A September 2026 push and 279 open issues show active repair
GitHub recorded the last push on September 1, 2026, along with 30,471 stars. Search found 279 open issues, while repository metadata counted 483 issues and pull requests together. Releases v0.29.0 through v0.29.3 arrived between April 27 and July 27, 2026. The queue is large, but recent releases and late-August issue discussion show that maintainers and users are still working through backend behavior.
Activity does not shrink a 5,322 MB environment or turn the timed-out suite into a pass. Graphiti is most defensible when the application needs time-aware facts with episode provenance and the team can test extraction, isolation, and retrieval against its exact models and graph backend. A simpler memory layer is easier to own when historical graph queries are only a possibility rather than a requirement.

