Ricord vs Graphiti: AI Memory Comparison (2026)
Graphiti is Zep's open-source bi-temporal knowledge-graph library — a building block, not a finished memory layer. Ricord ships the memory layer with conflict resolution, MCP, and a wiki view in the box. Honest side-by-side for teams choosing between building and buying.
Quick compare
| Feature | Ricord | Graphiti |
|---|---|---|
| Product shape | Hosted memory layer (API + MCP) | OSS Python library (you embed it) |
| License | Proprietary SaaS | Apache 2.0 |
| Starts at | $15/mo annual | $0 OSS / self-host + Neo4j + LLM costs |
| Setup time | Under 5 minutes (CLI + MCP install) | 1–3 hours (Neo4j + Python + extraction config) |
| Bi-temporal graph | Hosted equivalent | Native — its core feature |
| MCP server | 13 tools | |
| Auto-generated wiki pages | ||
| Conflict resolution at ingest | Temporal invalidation only | |
| REST API + TypeScript SDK | Python only (community REST wrappers exist) | |
| Hosted ops + backups | You run Neo4j | |
| Browsable wiki UI | ||
| Cross-client (Claude Desktop / Cursor / Codex) | ||
| Hard delete (GDPR) | You wire it |
What Graphiti actually is
Graphiti is an open-source Python library from the Zep team for building bi-temporal knowledge graphs. "Bi-temporal" means the graph tracks both when an event happenedand when we recorded it — useful for agents that need to reason about the historical truth of facts that change over time.
It's a building block, not a memory layer. You install it with pip, point it at a Neo4j (or FalkorDB) instance, wire your own extraction prompts, and call its Python API from your agent code. Everything between Graphiti and a user-facing memory feature — the SDK ergonomics, the hosted UI, the multi-client reach, the GDPR delete — you build yourself or you wire up alongside.
This is the same shape distinction as Cognee: a graph-extraction library, well-engineered for what it is, with a moat around bi-temporal reasoning. Different problem from a finished memory product.
Graphiti vs Zep, and why this matters
Zep open-sourced Graphiti while keeping Zep itself as a hosted product. That's a common pattern — the company keeps the integration layer, ops, hosted UI, and multi-tenant infrastructure as the paid offering; open-sources the core graph engine to attract OSS users who'll eventually pull in the hosted layer.
For you, the implication: if you adopt Graphiti as a library, you're signing up to build (or buy from Zep hosted) everything Graphiti deliberately doesn't include — extraction pipeline, REST API, per-user isolation, hard delete, multi-client SDKs, browsable UI. If you'd prefer to skip that, Ricord ships the complete shape, hosted, for $15/mo annual. Comparison with hosted Zep →
Where Ricord wins
- It's a finished product. Graphiti is code that runs in your process; Ricord is a service you call. The first one demands engineering time to integrate; the second is three commands and a restart.
- MCP-native install. Graphiti has no MCP server — to expose its memory to Claude Desktop or Cursor, you write an MCP wrapper around it. Ricord drops into 4 MCP-aware clients with a single config block.
- Conflict resolution beyond bi-temporal. Bi-temporal tracking is excellent for "when did this fact become true," but doesn't solve "the user said two contradicting things, which one do I recall." Ricord adds supersedence on top — when new facts contradict older ones, the older ones are marked superseded so recall returns one current answer, not both.
- Browsable wiki UI. Graphiti has no dashboard; you build any UI yourself or query Neo4j directly. Ricord ships auto-generated wiki pages per entity, backlinks, a 3D graph view.
- TypeScript-first SDK. Graphiti is Python-only with community REST wrappers; Ricord ships first-class TypeScript alongside REST + MCP. Matters if your agent stack is Node / Next / Cloudflare Workers.
- Hosted ops by default. No Neo4j to run, back up, monitor, upgrade, or shard. Ricord handles all of that.
Where Graphiti wins (honestly)
- Bi-temporal queries native and exposed. If your product needs to answer "what did we believe about X as of Y date," Graphiti was designed around this. Ricord supports temporal queries but doesn't lead with bi-temporal as the headline.
- Apache 2.0 license.Cleaner than Cognee's AGPL for commercial use, similar to Mem0's license flexibility. If "owns the code" is the requirement, Graphiti qualifies and Ricord doesn't.
- Deep customization of the graph schema. Graphiti exposes the entity / relationship model directly. If you have a domain-specific schema you want the graph to enforce, you write that schema as Python and Graphiti runs against it. Ricord uses an opinionated schema you don't configure.
- No vendor lock-in. Graphiti runs on your infra; the data lives in your Neo4j. Switching off Graphiti means changing imports, not exporting from a SaaS.
Production gotchas with Graphiti
- Neo4j operational burden. Production Neo4j requires real ops: backups, replication for HA, capacity planning. Teams underestimate this. The alternative graph stores Graphiti supports have their own learning curves.
- Extraction prompt is your problem. Graphiti calls an LLM to extract entities; the prompt and structured-output schema you provide are what determine recall quality. Production teams report 3–5x cost differences between extraction configurations.
- No multi-tenant out of the box. Graphiti assumes a single graph. Per-user isolation means namespacing every entity and walking the graph with user-scoped filters in every query. Manageable but easy to get wrong.
- Python-only ergonomics.If your service is TypeScript, you're calling Graphiti through a community REST wrapper or a sidecar Python service. Both work; both add a hop.
Using Graphiti and Ricord together
If you've invested in Graphiti and want hosted memory for the parts Graphiti doesn't cover, the two coexist cleanly. Graphiti for your custom bi-temporal graph queries; Ricord as the user-facing memory layer (MCP install, browsable wiki, per-user scoping). Pipe Graphiti's extracted entities into Ricord:
# After Graphiti extracts entities + relationships,
# mirror the high-value ones into Ricord for the
# end-user-facing wiki + MCP recall path.
for entity in graphiti_extract(turn_text):
requests.post(
"https://api.ricord.ai/v1/memories",
headers={"Authorization": f"Bearer {RICORD_KEY}"},
json={"user_id": user_id, "content": entity.as_sentence()},
)Conflict resolution still runs at Ricord's ingest, so contradicting facts get superseded as users update their preferences over time.
Why Ricord for most teams
Graphiti is the right pick if your product's differentiator is custom bi-temporal reasoning over a domain-specific schema, and you have an engineer who'll own Neo4j ops. Ricord is the right pick for the substantially larger group of teams who want memory to just-work — agent builders, dev tools, SaaS products where memory is the substrate, not the differentiator.
bun add -g ricord ricord login ricord install