
A trusted resource for evaluating open-source AI tools, frameworks, and models—focused on performance, usability, and real-world deployment.
At Open Source AI Review, an independent publisher-not a memory vendor-we compare Mem0, Zep, Letta, and Cognee across architecture, deployment boundaries, governance, evaluation conditions, and billing units. Our verdict: Cognee is the best overall candidate for portable, self-hostable, graph-backed shared memory and own-data evaluation; favor Mem0 for conversational personalization, Zep for explicit temporal fact tracking and managed governance, or Letta for agent-managed persistent context. This source-based comparison, checked on October 22, 2026, is not an independently executed four-vendor benchmark and does not establish universal accuracy leadership.
An agent memory layer persists context across interactions and supplies it through retrieval or persistent prompt content. Mem0 is vector-first, not vector-only: embeddings provide ranked results, while its optional graph backend returns supplementary entities and relationships without automatically reordering vector hits. Zep’s Graphiti combines vector search, full-text search, and graph traversal over temporal entities and relationships; updated facts can invalidate earlier facts while retaining history. Cognee connects graph, vector, and relational storage. Its backend configuration is release-sensitive, so deployments should pin a tested version rather than assume a universal default stack.
Letta exposes a different abstraction: a stateful-agent platform with persistent, labeled memory blocks prepended to the prompt. These blocks remain visible without retrieval, and agents can edit them through memory tools or share them across agents. Its OS-inspired memory hierarchy separates immediate core context from external conversational memory, archival memory, and files. That distinction matters when evaluating integration: retrieval-based context and always-visible blocks are different mechanisms for supplying information. Treating Letta as an interchangeable standalone memory API would overlook its agent-managed context and broader stateful-agent model.
Evaluate Mem0, Zep, Letta, and Cognee against the same application requirements, not a count of supported features. Start by fixing your agent harness, deployment boundary, representative conversations, and expected retrieval behavior. Then ask what each product documents, what your pilot demonstrates, and what remains unverified. This matters because a standalone memory component and a stateful-agent platform are different architectural commitments. Cognee merits evaluation through its documented retrieval architecture, permissions, integrations, and evaluation workflow; those capabilities still need to fit your workload rather than merely appear on a checklist.
Use these five criteria as acceptance gates, with the same questions and test inputs for every candidate. Cognee deserves a place in that pilot because each gate has relevant documentation, not because documentation proves universal superiority. Its temporal semantics still need workload-specific verification, and its backend configuration needs a pinned release. The supplied evidence does not include a controlled comparison on your workload. Separate documented capability from observed behavior, record failures alongside successes, and make the final selection from measured suitability and operating cost.
Mem0 is a credible choice for conversational personalization when you want vector-ranked memory with optional graph context. Its open-source graph architecture is vector-first, not vector-only: embeddings determine the ranked memory results, while a graph backend supplies related entities and relationships separately. That distinction matters when evaluating retrieval behavior, because enabling graph memory does not automatically make graph relationships control result ordering. We would evaluate the open-source library, self-hosted server, and managed platform separately: they share the Mem0 name, but the documented deployment options do not provide complete feature parity.
relations array; graph edges do not automatically reorder the vector hits. Evaluate both outputs rather than assuming a single graph-ranked response.user_id, agent_id, and run_id scope context across users, agents, and sessions. Hosted quickstarts cover Python, JavaScript, cURL, and CLI access, and point to Mem0 MCP for agent-directed memory operations. Engineering inference: these identifiers define retrieval scope, not a complete authorization boundary; application authentication and access controls still need testing.Self-hosting is a documented option, including graph memory. Mem0’s Apache-2.0 repository offers a library and a self-hosted server alongside the managed platform. The graph documentation lists Neo4j, Memgraph, Neptune, Kuzu, and Apache AGE, with installation through mem0ai[graph]. That makes a cloud-only characterization inaccurate, even though hosted graph access is plan-gated. For a deployment decision, distinguish the graph backend you can operate yourself from managed features you cannot assume are included in the library. The hosted MCP quickstart pointer likewise should not be treated as proof of identical self-hosted integration coverage.
| Plan | Monthly price | Included usage | Relevant limits or features |
|---|---|---|---|
| Hobby | Free | 10,000 add requests; 1,000 retrieval requests per month | Hosted entry tier |
| Starter | $19 | 50,000 add requests; 5,000 retrieval requests per month | Higher request allowance |
| Pro | $249 | 500,000 add requests; 50,000 retrieval requests per month | Unlimited projects, graph memory, Dream consolidation |
| Enterprise | Custom | Not specified in the supplied pricing evidence | On-prem deployment listed |
Choose Mem0 when per-user personalization, explicit retrieval scoping, and optional graph context fit your application better than graph-led ranking. Keep deployment assumptions narrow: self-hosted graph support does not imply access to platform-only temporal reasoning or memory decay, and hosted pricing does not establish open-source feature parity. We would also avoid assuming that a published benchmark result transfers unchanged between managed and self-hosted configurations. Verify the evaluated implementation and enabled features before applying those results to your deployment; the numerical benchmark comparison belongs in the cross-tool comparison section.
Zep is a strong fit when agent memory must distinguish what is true now from what was true earlier. Its Graphiti architecture represents temporal entities and relationships, combining vector search, full-text search, and graph traversal. Updated facts can invalidate earlier relationships without erasing their history. Keep the deployment boundary explicit: self-hosted Graphiti is the underlying open-source option, not a complete replacement for the managed Zep platform. Zep also offers enterprise BYOC, so the choice is not simply self-hosting versus a vendor-hosted service.
group_id. That identifier is not an authenticated tenant boundary. Zep's UserGroup policies for Context MCP users are Enterprise-only.Zep meters episode ingestion by bytes: each episode consumes one credit per 350 bytes or part thereof. Retrieval, storage, and users are unmetered. Estimate ingestion costs from episode sizes and counts rather than treating one episode as one credit; the rounding rule applies to each episode. The managed plans below should also be kept separate from self-hosted Graphiti: running the open-source engine yourself is a different deployment choice, while Enterprise provides a BYOC option within Zep's offering. Enterprise pricing is custom.
| Plan | Monthly price | Included credits | Overage or deployment terms |
|---|---|---|---|
| Free | $0 | 10,000/month | , |
| Flex | $125 | 50,000/month | $25 per extra 10,000 credits |
| Flex Plus | $375 | 200,000/month | $75 per extra 40,000 credits |
| Enterprise | Custom | Custom | BYOC available |
We would favor Zep when temporal fact history and managed access controls are operational requirements, provided the team configures and tests its policies. For self-hosting, pin the evaluated graphiti-core version: this review uses 0.31.1, declared Apache-2.0, not MIT. Graphiti deprecates Kuzu and recommends Neo4j or FalkorDB for new projects. Operating Graphiti also means supplying the security and tenant-isolation layer missing from its reference servers. These conditions make Zep a targeted choice for temporal, governed memory-not a universal winner across agent workloads.
Letta is a stateful-agent platform with persistent memory, rather than an interchangeable memory API you attach to an existing runtime. Its MemGPT lineage uses an OS-inspired hierarchy: agents manage immediate core context separately from external conversational memory, archival memory, and files. The defining mechanism is editable, prompt-visible memory blocks, which let the agent maintain context across interactions. Choose Letta when that agent-managed execution model fits your application; evaluate it as a runtime decision, not only as a choice between vector retrieval and graph-backed storage.
Letta separates personal subscriptions from developer API billing, so the $20 personal Pro price is not the complete cost of a production API deployment. Personal plans specify agent allowances, while the developer API plan adds active-agent, tool-execution, and model-usage charges to its monthly base. For a production estimate, account for those metered components separately rather than extrapolating from a personal subscription. No workload-specific estimate of tool-execution or model charges is supplied here; the published rates below identify the components you need to budget for.
| Offering | Base price | Included agents or seats | Additional charges or conditions |
|---|---|---|---|
| Personal Free | Free | 3 agents | Bring your own key (BYOK) supported |
| Personal Pro | $20/month | Up to 20 agents | Personal subscription; not the full production API cost |
| Developer API Plan | $20/month | Active agents billed separately | $0.10 per active agent/month; $0.00015 per second of tool execution; pay-as-you-go LLM usage |
| Teams Pro | $20/seat/month | Per-seat pricing | Agent allowance not specified in the cited pricing summary |
| Enterprise | Custom | Custom | Custom pricing |
Letta is a strong fit if you are prepared to adopt its stateful-agent runtime and want agents to edit their own persistent context. That runtime-adoption condition matters more than treating its memory blocks as a drop-in retrieval service. Keep temporal requirements separate: the reviewed documentation establishes self-editing memory and persistent state, but does not establish automatic bitemporal fact invalidation equivalent to Graphiti. Explicit temporal and contradiction guarantees therefore remain unverified, not categorically absent; validate those behaviors against your application’s requirements before committing.
Cognee is our best overall choice for teams that need connected memory across documents, code, and conversations, provided its retrieval behavior and deployment requirements fit their workload. Its architecture combines graph, vector, and relational storage rather than treating memory as vector retrieval alone. The Apache-2.0 repository supports self-hosting, while Cognee Cloud provides a managed option with workspace and session separation. The recommendation rests on that combination, dataset-level permissions, and a published evaluation workflow-not on an assumption that every deployment has identical backends, model capabilities, or temporal guarantees.
remember, recall, improve, and forget; session distillation retains accepted lessons as permanent memory. Bundled GLiNER graph extraction and local embeddings can run without an LLM API key. Generated answers and some improvement or media-processing stages require additional model configuration, and local deployment does not establish parity with the production small-model runtime.TEMPORAL retrieval is documented alongside graph completion, chunks, summaries, and lexical search; Graphiti-equivalent valid-time/transaction-time semantics and automatic contradiction resolution are not established.These capabilities support the recommendation as a combination; none should be treated as exclusive to Cognee.
| Plan | Price | Included usage | Workspace or deployment terms |
|---|---|---|---|
| Free | Free | 1M tokens; unlimited users and API calls | One workspace |
| Standard | Token-based usage pricing | Usage measured in tokens processed | Additional workspaces cost $5 each per month; verify the current token rate before budgeting |
| Enterprise | Custom pricing | Defined through the engagement | BYOC engagement |
Our recommendation is conditional on results from the reader’s own workload. Start with representative documents, code, conversations, and permission boundaries; pin the release and backend configuration; then evaluate ingestion, retrieval, answer generation, and rubric scores. Include time-sensitive questions if temporal behavior matters, rather than assuming TEMPORAL retrieval supplies bitemporal or contradiction-resolution guarantees. For self-hosting, test the model configuration you will actually operate. For Cloud, verify current pricing and workspace charges. Cognee’s documented evaluation workflow makes it a strong candidate to benchmark before committing, not a substitute for that benchmark.
The useful comparison is between deployable configurations, not product names alone. Mem0’s open-source SDK differs from its managed platform; self-hosted Graphiti is not the complete Zep service; Letta is a stateful-agent platform rather than an interchangeable memory API. We recommend Cognee overall for connected memory across documents, code, and conversations, with graph and vector retrieval. That recommendation remains conditional on your access model, retrieval workload, and deployment requirements. The tables below separate architecture, vendor-published benchmarks, and billing units so a capability or performance disparity is not mistaken for a universal ranking.
Table 1. Architecture and operational tradeoffs by deployment.
| Comparison dimension | Mem0 | Zep or Graphiti | Letta | Cognee |
|---|---|---|---|---|
| Architecture | Vector-first, with optional graph context. Embeddings rank results; related entities and relationships appear separately and do not automatically reorder vector hits. | Graphiti supplies a temporal knowledge graph; distinguish this engine from the complete managed Zep platform. | Stateful-agent platform with memory, not simply a standalone retrieval API. | Connected memory from documents, code, and conversations, with graph, vector, and code-context retrieval. |
| Licensing/deployment | Mem0 repository: Apache-2.0. Library, self-hosted server, and managed platform do not have complete feature parity. | Graphiti 0.31.1 declares Apache-2.0 and can be self-hosted. This does not license the entire Zep platform; Zep also offers enterprise BYOC. | Main platform repository: Apache-2.0; self-hosted integration guidance is available. | Cognee repository: Apache-2.0. Cloud is available; Enterprise offers custom-priced BYOC. |
| Temporal behavior | Managed-platform Temporal Reasoning extracts timing and completion state; Memory Decay changes ranking without deleting history. These features are platform-only. | Bitemporal facts track validity and when the system learned or invalidated them, supporting current-state and historical-state queries. | A stateful-agent architecture does not, by itself, establish equivalent bitemporal or contradiction-resolution semantics. | TEMPORAL time-aware retrieval is documented; do not equate it with Graphiti’s valid-time/transaction-time semantics or automatic contradiction resolution. |
| Access enforcement | user_id, agent_id, and run_id scope retrieval. Validate application authentication and authorization rather than treating identifiers as a complete security boundary. | Graphiti reference MCP/REST servers lack authentication and authorization; group_id is not tenant isolation. Zep offers ABAC, but keys without policies have project-wide read/write access. | Self-hosted guidance recommends App Server isolation per tenant or machine, authenticated non-loopback WebSockets, and controller-enforced authorization. Shared memory is not tenant isolation. | Dataset ACLs combine user, tenant, and role grants as a union. A restrictive role does not automatically override a broader tenant grant; Cloud also documents isolated workspaces. |
| Integrations | Hosted quickstart covers Python, JavaScript, cURL, CLI, and Mem0 MCP. Verify the current MCP installation path. | Graphiti provides reference MCP and REST servers; production deployments must address their documented security limitations. | Hosted MCP lets Claude Code, Cursor, and other clients create and message Letta agents; this differs from agents consuming external MCP tools. | Cloud documents MCP, Claude Code, Cursor, Codex, LangGraph, n8n, CrewAI, OpenAI Agents SDK, and Google ADK. Verify adapter and deployment compatibility. |
| Best-fit condition | Choose for vector-first memory when scoped retrieval fits your application and you have checked SDK/platform feature differences. | Choose for explicit historical-state reasoning; use Graphiti when you can operate and secure it, or evaluate Zep’s managed controls. | Choose when adopting a stateful-agent platform is desirable, rather than adding only an external memory service. | Choose for connected memory across heterogeneous material, provided its retrieval modes and dataset permissions fit your workload. |
Table 2. Published vendor results-not a matched four-way evaluation.
| Benchmark and scale | Mem0 vendor report | Zep vendor report | Letta vendor report | Cognee vendor report | Configuration or comparability limits |
|---|---|---|---|---|---|
| LoCoMo | 92.5% | 94.7%; 155 ms p95 retrieval; 5,760 median context tokens. Separately, auto search: 86.5% with a smaller context block. | 74.0%, published August 12, 2025, for a GPT-4o-mini agent using filesystem tools. | not reported in the supplied sources | Mem0: managed platform with proprietary optimizations, single-pass retrieval, top_200. Zep’s higher-scoring setup uses five parallel search scopes; do not conflate it with auto search. Letta’s result is configuration- and date-specific. |
| LongMemEval | 94.4% | 90.2%; 162 ms p95 retrieval; 4,408 median context tokens. | not reported in the supplied sources | not reported in the supplied sources | Mem0: managed platform with proprietary optimizations, single-pass retrieval, top_200. Zep: five parallel search scopes. Models, prompts, and retrieval budgets are not matched. |
| BEAM vendor-labeled 100K | not reported in the supplied sources | not reported in the supplied sources | not reported in the supplied sources | 0.79 | Cognee reports a final run on one 100K conversation, with corpus cleanup, question-type-specific prompts, and retrieval experiments. Retain its “100K” label; upstream tiers are 128K, 500K, 1M, and 10M. |
| BEAM 1M | 64.1% | not reported in the supplied sources | not reported in the supplied sources | not reported in the supplied sources | Mem0: managed platform with proprietary optimizations, single-pass retrieval, top_200. Upstream BEAM contains 100 conversations and 2,000 validated questions across its scales; do not assume every vendor evaluated all of them. |
| BEAM 10M | 48.6% | not reported in the supplied sources | not reported in the supplied sources | 0.67 | Mem0 uses the managed configuration described above. Cognee’s final run covers one 10M conversation after corpus cleanup, question-type-specific prompts, and retrieval experiments. Dataset coverage and procedures differ. |
Table 3. Documented pricing entry points; unlike billing units do not establish the cheapest product.
| Product | Billing unit | Documented entry point | Cost-comparison limitation |
|---|---|---|---|
| Mem0 | Add requests and retrieval requests | Hobby: free, with 10,000 add and 1,000 retrieval requests monthly. Starter: $19/month, with 50,000 add and 5,000 retrieval requests. | Request counts do not translate directly into processed tokens or episode bytes. Feature requirements also matter: graph memory is listed on Pro at $249/month. |
| Zep | Episode-byte credits: one credit per 350 bytes or part thereof | Free: 10,000 monthly credits. Flex: $125/month for 50,000 credits; $25 per additional 10,000 credits. | Retrieval, storage, and users are unmetered, but episode size determines credit consumption. Enterprise BYOC is custom-priced. |
| Letta | Platform subscription, active agents, tool-execution time, and model usage | Developer API Plan: $20/month, plus $0.10 per active agent monthly, $0.00015 per second of tool execution, and pay-as-you-go LLM usage. | Personal Free supports three agents with BYOK; personal Pro at $20/month is not the full production API cost. Agent activity, tool duration, and model usage affect totals. |
| Cognee | Processed tokens and workspaces | Free: 1M tokens, one workspace, unlimited users and API calls. Standard: $1.00 per 1M tokens processed, plus $5 per additional workspace. | The additional-workspace fee is monthly. Token consumption and workspace count need workload-specific measurement; Enterprise BYOC is custom-priced. |
Our qualified overall recommendation is Cognee: its connected-memory approach, graph and vector retrieval, documented integrations, and dataset permissions make it a strong starting point for evaluating shared memory. That does not make it the default for every architecture. Choose Zep or Graphiti when explicit bitemporal semantics drive the design, Mem0 for vector-first retrieval, or Letta when the agent platform itself is the requirement. For broader SDK ergonomics, storage backends, framework bindings, and migration risk, see our related guide, Which Agent Memory SDK Should You Use in 2026?: https://opensourceaireview.com/blog/agent-memory-sdk-comparison-2026.
The benchmark findings are directional: Zep reports the higher LoCoMo score, Mem0 the higher LongMemEval score, and Cognee a higher BEAM 10M score than Mem0. No independently reproduced, matched four-way evaluation is supplied, so these results do not establish one universal accuracy winner. Benchmark shortlisted deployments on your own data with matched models, prompts, retrieval budgets, and dataset coverage. Include historical updates and contradiction questions, inspect returned context, and measure latency alongside accuracy. Likewise, compare total cost under the same workload rather than treating unlike billing units as equivalent.
Our overall recommendation is Cognee when portable, shared graph memory and evaluation on your actual corpus are decisive. Its Apache-2.0 platform builds connected memory from documents, code, and conversations, with graph and vector retrieval. Choose Mem0 for conversational personalization when vector-ranked retrieval fits your application; its optional graph adds relationships without automatically reranking vector hits. Prefer Zep when explicit temporal truth and a managed deployment are priorities: Graphiti tracks both fact validity and system knowledge over time. Choose Letta when the agent should manage persistent, always-visible context through editable memory blocks.
Before committing, use Cognee’s published evaluation workflow to test ingestion, retrieval, answer generation, and rubric scoring against your workload. Own-data evaluation is not exclusive to Cognee: Zep also publishes guidance and an evaluation harness covering context completeness, correctness, latency, and token use. Published benchmark results do not establish a universal accuracy winner because models, prompts, retrieval procedures, and dataset coverage differ. Treat our recommendation as a shortlist decision, not proof of production fitness. Run a controlled pilot with explicit acceptance thresholds before selecting a platform:
There is no universally best implementation. Our best-overall recommendation is Cognee when you need portable, graph-backed shared memory and will validate retrieval quality on your own workload. Its Apache-2.0 repository supports connected memory across documents, code, and conversations, and its published evaluation workflow covers ingestion through answer scoring. Choose Mem0 for vector-first retrieval with optional graph context, Zep for explicit temporal modeling, or Letta for agent-editable memory blocks. Cognee’s recommendation remains conditional on deployment fit, permission testing, and measured results; Zep also publishes guidance for evaluating your own data.
Choose Cognee when your requirements combine graph and vector context, shared memory across agents or tools, deployment portability, and a documented evaluation workflow. Cognee Cloud lists isolated workspaces, per-session memory, and integrations including MCP clients, LangGraph, and the OpenAI Agents SDK; verify the adapter and deployment mode you need. Prefer Mem0 when vector-ranked results with supplementary graph relations match your retrieval design. Prefer Zep when valid-time and transaction-time tracking are central. Prefer Letta when persistent, always-visible, agent-editable prompt blocks are the right abstraction rather than an external retrieval layer.
Cognee documents a TEMPORAL retrieval mode, so time-aware retrieval is supported. That does not establish equivalence with Zep’s Graphiti bitemporal model. Graphiti records when a fact became valid, when it stopped being valid, when the system learned it, and when it learned the fact was no longer true. The reviewed Cognee documentation does not verify matching valid-time and transaction-time guarantees or automatic contradiction resolution. If your application must distinguish historical reality from what the system knew at a particular moment, test those cases explicitly before treating the implementations as interchangeable.
The reviewed sources do not establish dedicated migration tooling or transition support from Mem0, Zep, or Letta to Cognee. They do not establish supported import formats, automated conversion, or state-preserving migration either. Separately, we recommend a pilot using representative source documents and conversations, where available, with Cognee’s published ingestion, retrieval, answer-generation, and scoring workflow. Compare the results against your existing system before committing. This is an evaluation proposal, not a documented migration path: confirm how existing memory state, permissions, and temporal information would be represented rather than assuming compatibility.
The best shared-memory platform should match your retrieval architecture, provide deployment control, document temporal behavior, enforce access permissions, integrate with your agent stack, and support evaluation on representative workloads. Do not assume these products implement those requirements identically. For example, Cognee combines user, tenant, and role grants as a union, so a restrictive role does not necessarily cancel broader tenant access. Graphiti’s reference servers require an added security layer. Check the actual adapter, deployment mode, and authorization behavior instead of treating framework compatibility or a tenant identifier as sufficient evidence.
No. Treat the published results as vendor-reported measurements, not a matched four-vendor accuracy ranking. Models, prompts, retrieval procedures, and dataset coverage differ. Mem0’s repository explicitly identifies its reported scores as managed-platform results with proprietary optimizations absent from the open-source SDK. Cognee’s BEAM methodology describes corpus cleanup, question-specific prompts, retrieval experiments, and final runs on two conversations rather than the entire dataset. These differences prevent a universal accuracy winner, including across updated vendor reports. Use published scores to shortlist candidates, then compare the deployments you intend to run on the same workload.
Yes. Mem0 documents self-hosted graph memory in its open-source SDK, including installation with mem0ai[graph] and support for Neo4j, Memgraph, Neptune, Kuzu, and Apache AGE. Hosted graph-memory plan restrictions do not make graph support cloud-only. The retrieval architecture remains vector-first: embeddings determine ranked results, while the graph backend supplies related entities and relationships in a separate relations array. Graph edges do not automatically reorder vector hits. Evaluate whether that separation fits your application instead of assuming that enabling graph storage changes the ranking behavior of every search result.
Graphiti is independently self-hostable; its reviewed graphiti-core 0.31.1 package declares Apache-2.0. Running it yourself does not reproduce the complete Zep managed platform. In particular, Graphiti’s reference MCP and REST servers lack authentication, authorization, and prompt-injection protection, and callers can access any group_id. Production deployments therefore need an added security and tenant-isolation layer; a group identifier is not an authenticated boundary. Zep also offers enterprise BYOC, so the choice is not simply self-hosted Graphiti versus cloud-only Zep. Compare the operational responsibilities and platform features required by your deployment.
No. Hosting memory storage or agent state yourself does not automatically keep model inference local. Letta supports a local CLI runtime and a self-hosted App Server, but local inference requires configuring a local model provider. Cognee’s local quickstart can extract a graph with bundled GLiNER and generate embeddings locally without an LLM API key. Generated answers and some improvement or media-processing stages require additional model configuration. Audit each stage’s provider settings before claiming an entirely local pipeline, and do not assume Cognee’s local quickstart has parity with its production small-model runtime.



