Agent frameworks#RAG#Agent memory

Graphiti: temporal knowledge graphs for AI agents

Graphiti is Zep's open-source temporal knowledge graph: facts carry validity windows and auto-invalidate, so agents recall by meaning, relation and time.

Project facts

GitHub Ecosystem
Repositorygithub.com/getzep/graphiti
License
Apache-2.0
Language
Python
Stars
31,303
Data checked
2026-09-29

Snapshot figures reflect the check date and may change over time.

Most agent memory lives in a vector store that only knows “nearest by similarity” — it can’t tell what still holds. A user liked Adidas last month and switched to Nike this month; plain RAG retrieves both. Graphiti (getzep/graphiti) stores differently: facts, relations and their validity windows go into a real-time knowledge graph, where changed information invalidates old facts instead of deleting them. You can query what’s true now, or what was true on any past date. It’s the open-source core of Zep’s commercial context infrastructure, backed by the paper arXiv:2501.13956. Checked September 29: 31,303 stars.

How Graphiti works: entities and relations form a graph, one fact edge highlighted, an invalidated edge with a clock icon, and a timeline marking a fact’s validity window

Core features

  • Facts with validity windows: every fact (an entity–relation–entity triplet) carries an effective period; when information changes, the old fact is marked invalid but kept, so any point-in-time state is queryable.
  • Incremental, no batch recomputation: new data joins the graph immediately — no re-embedding sweeps like traditional RAG pipelines, which is what makes it fit for fast-changing business data.
  • Hybrid three-way retrieval: semantic embeddings, keyword (BM25) and graph traversal combined, low-latency results with no LLM summarization at query time.
  • Episodes and provenance: every entity and relationship traces back to the raw episodes that produced it — full lineage from derived fact to source.
  • Ontology you control: entity and edge types can be prescribed upfront with Pydantic models or left to emerge from the data.
  • MCP server and REST service: the repo ships mcp_server/ (episode and entity management plus hybrid search, deployed with Docker and Neo4j) and a FastAPI service, so assistants can read and write the graph over MCP.

Against GraphRAG

The README puts up a direct comparison table: GraphRAG targets static document summarization, distilling entity clusters and community summaries through sequential LLM calls; Graphiti targets dynamic data, tracking bi-temporal metadata (event time versus ingestion time) and resolving contradictions by invalidating old facts while keeping the full history, retrieved by hybrid search instead of summarization. Short version: document Q&A stays with GraphRAG; customer profiles and project states that change with the business belong in Graphiti.

Quick start

You need Python 3.10+, a graph backend — Neo4j 5.26, FalkorDB 1.1.2 or Amazon Neptune (Kuzu is deprecated) — and by default an OpenAI key for LLM inference and embeddings; the README warns that models without structured output can break ingestion:

pip install graphiti-core

To skip running a graph database entirely, use the embedded FalkorDB build pip install graphiti-core[falkordblite] (Python 3.12+). Feed conversations or business events in as episodes and the graph grows — and stays queryable — as you go.

Summary

Backend developers building customer context, long-term memory, or any system where facts change should look closely; for plain Q&A over static documents, a GraphRAG-style pipeline is less work. Apache-2.0-licensed Python, created August 2024, 31,303 stars checked September 29, maintained by the Zep team with pushes as recently as yesterday — maturity is not a concern. The honest catches: it defaults to OpenAI and is picky about structured output, so alternative models need your own validation; and you must run a graph database alongside it, which weighs more operationally than a bare vector store. Where OpenMausBot keeps memory inside each bot, Graphiti externalizes it as a standalone layer — especially useful when several agents share one session history.