Graphiti
Track how facts change over time, maintain provenance to source data, and support both prescribed and learned ontology. Every derived fact traces back to its episode, and every edge carries valid_at and invalid_at.
Graphiti, from Zep, is a framework for temporal knowledge graphs on a database you bring. Its strongest feature is one Okto Neuron does not have: facts with validity windows you can query at a point in time. Okto Neuron's is one Graphiti does not have: every claim points at a byte range and a content hash in a Markdown file you own. This page keeps both true.
Graphiti ingests episodes (messages, JSON, text), extracts entities and facts with an LLM, and stores them with time bounds in Neo4j, FalkorDB or Neptune. Okto Neuron ingests Markdown blocks, mints claims, and stores them in an embedded graph that is derived from the vault and can be thrown away and rebuilt.
Track how facts change over time, maintain provenance to source data, and support both prescribed and learned ontology. Every derived fact traces back to its episode, and every edge carries valid_at and invalid_at.
The vault is the trust root; the graph is derived from it. ask returns text with a synthesis_status, and with include_sources=true, the vault-relative path, byte range and content hash of every source block.
Competitor cells paraphrase the Graphiti README, MCP README, edges.py, help docs and the Zep pricing page. Okto Neuron cells were checked against the v0.1.0 source, when the project was still called Marginalia; the licence, benchmark and maturity rows reflect 0.3.0.
| Dimension | Graphiti | Okto Neuron |
|---|---|---|
| Where data lives | Your graph database, self-hosted. Zep is the fully managed or in-your-cloud version with a proprietary engine | Markdown vault on your disk. The vault is the trust root; nothing is hosted |
| Storage | Bring your own: Neo4j 5.26, FalkorDB 1.1.2, or Amazon Neptune with OpenSearch Serverless. The MCP server defaults to FalkorDB | Okto Grafx by default (embedded), Ladybug legacy, Neo4j optional. The graph is derived and rebuildable |
| Agent access | Python library plus an MCP server described as an experimental implementation, 13 tools (add_memory, add_triplet, search_nodes, search_memory_facts, and more). Clients listed: Claude Desktop (via mcp-remote), Cursor, VS Code with Copilot | MCP with five tools over a bearer-authenticated port; REST and UI on loopback. The installer wires Claude Code |
| Provenance unit | The episode. Edges carry episodes, fact and reference_time; entities get MENTIONS edges. No byte range or content hash found | A block: vault-relative path, byte_start, byte_end and a sha256 content_hash, returned with include_sources=true on ask |
| Temporal model | Bi-temporal edges: created_at, valid_at, invalid_at, expired_at. Old facts are invalidated, not deleted. Query what is true now or at any point in time | Ingest-time supersession bounded to the document being edited: valid_until on the old claim, a supersedes edge from the new one. No point-in-time query. No vault-wide contradiction detection |
| Extraction | LLM, OpenAI by default; Anthropic, Gemini, Groq, and OpenAI-compatible local servers (Ollama, vLLM, llama.cpp, LM Studio). Works best with structured output; small models can fail extraction | LLM curation at ingest against an OpenAI-compatible endpoint, loopback runtimes probed first. Synthesis on ask reports synthesis_status |
| Licence | Apache 2.0 | Elastic License 2.0 from 0.3.0 (source-available). Releases up to 0.2.0 stay Apache 2.0 |
| Hosted option | Zep: free tier with 10,000 credits per month, Flex at $125/month, Flex Plus at $375/month, Enterprise custom. SOC 2, HIPAA, BYOC | None |
| Telemetry | Anonymous, on by default, opt out with GRAPHITI_TELEMETRY_ENABLED=false; never collects content | No analytics or telemetry dependency in the shipped package |
| Benchmarks | LoCoMo 94.7% and LongMemEval 90.2% claimed, with latency figures | LoCoMo categories 1-4 from our own harness and judge, on the benchmarks page. Left out of this table on purpose: a different judge, scope and harness mean the numbers do not compare with self-reported figures |
| Maturity | Established framework with a commercial managed service behind it | Prerelease 0.3.0 for macOS and Linux; so far rehearsed on Linux only |
The first card is the important one. It is a design difference Okto Neuron has not closed and does not claim to.
Graphiti edges carry created_at, valid_at, invalid_at and expired_at. When information changes, old facts are invalidated, not deleted, and you can ask what was true at any point in time. Okto Neuron only dates a superseded claim with valid_until at ingest, inside the document being edited, and has no point-in-time query.
Zep runs Graphiti as a fully managed service or in your cloud, with SOC 2, HIPAA and BYOC. Okto Neuron has no hosted option.
Graphiti publishes LoCoMo and LongMemEval scores with latency. Okto Neuron publishes LoCoMo only, from its own harness and judge, with no latency figures and no speed claims. The two sets of numbers were produced differently, so this page does not put them side by side.
Neo4j, FalkorDB or Neptune, and a Python library alongside the MCP server. Okto Neuron's MCP server is wired to Claude Code by the installer; other clients are unverified.
Graphiti traces a fact to the episode it came from. Okto Neuron traces a claim to a block with byte_start, byte_end and a sha256 content_hash in a file you can open. If the bytes changed, the hash says so.
In Graphiti the graph database is the store. In Okto Neuron the Markdown vault is the trust root and the graph is derived from it and can always be rebuilt. Nothing lives only in the database.
Every ask stamps retrieval.synthesis_status: ok, empty, provider_error, truncated or abnormal_stop. An unreachable model returns empty text and a reason, never a paragraph that looks finished.
Okto Grafx is embedded by default. There is no Neo4j or FalkorDB to stand up, and the MCP port is bearer-authenticated while REST and UI stay on loopback. Neo4j is optional if you want it.
You need to ask what was true at a date, not just what is true now.
Your sources are conversations and events, not a folder of Markdown.
You already run Neo4j, FalkorDB or Neptune, or you want Zep to run it for you.
You want a Python library to build on, or you need LongMemEval results or latency figures.
Your knowledge already lives in Markdown and must stay there as the source of truth.
Each claim in an answer has to be checkable against the exact bytes of the exact file.
You want nothing hosted and no database to operate, and you are fine with a prerelease.
You want a failed synthesis to say so in the payload.
Every competitor statement on this page comes from one of these pages, read on 2026-09-19. If a source has changed since, the page is wrong and we would like to know.
| Claim area | Primary source |
|---|---|
| Positioning, storage backends, benchmarks | https://raw.githubusercontent.com/getzep/graphiti/main/README.md |
| MCP server, tools, clients, FalkorDB default | https://raw.githubusercontent.com/getzep/graphiti/main/mcp_server/README.md |
| Edge fields: created_at, valid_at, invalid_at, expired_at | https://raw.githubusercontent.com/getzep/graphiti/main/graphiti_core/edges.py |
| Overview and self-hosted vs Zep | https://help.getzep.com/graphiti/getting-started/overview |
| Episodes as provenance | https://help.getzep.com/graphiti/core-concepts/adding-episodes |
| Search | https://help.getzep.com/graphiti/working-with-data/searching |
| LLM configuration and structured-output caveat | https://help.getzep.com/graphiti/configuration/llm-configuration |
| MCP server setup | https://help.getzep.com/graphiti/getting-started/mcp-server |
| Telemetry | https://help.getzep.com/graphiti/other/telemetry |
| Zep pricing | https://www.getzep.com/pricing |
Prerelease 0.3.0. Free to run locally. No account required.