Skip to content
Contextely
Reviews8 min readBy The Contextely Team

Mem0 vs Letta: Which Agent Memory Tool to Pick

Mem0 vs Letta compared: architecture, pricing, and which one actually fits building a memory api versus a full stateful agent.

Abstract blue and purple digital network mesh, representing the memory api layer that mem0 and the stateful agent runtime that letta each build in different shapes

Photo: Shubham Dhage on Unsplash

Key takeaways

Anyone comparing mem0 vs letta is usually trying to answer one practical question: does my agent need a memory API bolted on, or does it need a memory-native runtime built around it from the start. Those are different jobs, and the two tools were built to do them, which is why a head-to-head on features alone tends to miss the point. This piece looks at what each one actually is, what each one costs, and which shape of tool fits which kind of build.

What Mem0 actually is

Mem0 is a memory extraction layer you call from inside your own agent code. Its GitHub repository describes a single-pass extraction model: one call pulls durable facts out of a conversation turn, and those facts accumulate in a store scoped to a user, a session, or an agent, rather than being overwritten each time. Retrieval mixes semantic search, keyword matching, and entity linking, and Mem0's own README reports benchmark scores on LoCoMo and LongMemEval that improved substantially in its most recent releases, with the caveat that the highest scores reflect the managed platform's proprietary optimisations rather than the open source SDK alone.

The shape of the integration matters more than the benchmark numbers. Mem0 does not run your agent. You keep whatever framework, orchestration, and tool-calling logic you already have, and Mem0 sits beside it as an add and search API. That makes it a natural fit for teams retrofitting memory onto something that already works.

What Letta actually is

Letta, formerly MemGPT, takes the opposite starting position: it is the runtime, not an add-on to one. Its lineage traces to a 2023 UC Berkeley paper that framed the whole problem in operating-system terms.

"We propose virtual context management, a technique drawing inspiration from hierarchical memory systems in traditional operating systems that provide the appearance of large memory resources through data movement between fast and slow memory."
MemGPT: Towards LLMs as Operating Systems, Packer et al., UC Berkeley, 2023

That paging idea, moving facts between a fast in-context tier and a slower persistent one, became Letta's product. An agent built on Letta owns its memory blocks directly: it can read and edit its own context, decide what to keep in the fast tier versus push to storage, and carry that state across sessions as part of how it runs, rather than as a side call to another service. Letta's own site frames this in terms of identity: "Context is selfhood" is the wording on its product page, and whatever you make of the phrase, it captures that memory is structural to the agent rather than attached to it.

Mem0 vs Letta: the actual architectural difference

The clearest way to see the split is to ask where the memory decision gets made. In Mem0, your application code decides when to call add and when to call search; the memory system answers a question you ask it. In Letta, the agent's own loop decides, turn by turn, what belongs in its immediate context and what should move to archival storage, because that decision is part of the agent's own execution, not a step your surrounding code has to orchestrate.

Neither approach is more sophisticated than the other in the abstract. They solve different placement problems. An application that already has a well-defined agent loop, built in LangGraph or a custom framework, gains little from handing that loop over to a different runtime just to get memory; Mem0's API-shaped integration fits there directly. An agent being built from first principles, where memory management is meant to be a core capability the agent reasons about rather than infrastructure it calls out to, is closer to what Letta was designed around.

Mem0 vs Letta pricing, side by side

Pricing tells a similar story about audience. Mem0's tiers assume growth in call volume against a mostly fixed data model. Letta's tiers assume growth in the number of agents and how much they run.

Dimension Mem0 Letta
Free tier Hobby: 10,000 memory adds, 1,000 retrievals/month, 1 project Free: limited agents, bring your own API keys
Cheapest paid tier Starter, $19/month: 50,000 adds, 5,000 retrievals/month Pro, $20/month: weekly and monthly usage quota, up to 20 stateful agents
Top self-serve tier Pro, $249/month: 500,000 adds, 50,000 retrievals, graph memory, unlimited projects API plan: $20/month base plus $0.10 per active agent/month and metered tool execution
Enterprise Custom: unlimited requests, SSO, audit logs, on-premises Custom: role-based access control, SAML/OIDC SSO, dedicated support
Self-hosting Free, Apache 2.0, documented in the GitHub repo Free, Apache 2.0, documented self-hosting via bring-your-own-machine or cloud sandboxes
License Apache 2.0 Apache 2.0

Table 1: Mem0 and Letta hosted pricing and licensing as published on mem0.ai and docs.letta.com in September 2026. Both vendors reserve the right to change tiers; verify current figures before budgeting.

Mem0's own pricing history is worth flagging as a genuine data point rather than a footnote: reporting on its 2026 pricing update notes the mid tier between Starter and Pro was retired, which turns what used to be a $19-to-$79 step into a $19-to-$249 one for anyone who needs the graph memory or unlimited-project features gated at Pro. That is the kind of tier gap worth checking directly against Mem0's own pricing page before committing, since aggregator figures can lag a vendor's actual current state.

Is Letta better than Mem0 for stateful agents specifically?

If "stateful agents" is the exact phrase driving the search, Letta is the more literal answer, because persistent, evolving state across a session is what its runtime is organised around from the ground up, not a feature added to an otherwise stateless loop. Mem0 can absolutely make an agent stateful in the sense that matters to most products, remembering what a user told it, but the state lives in an external store your code queries, not in the agent's own execution model.

The distinction shows up clearest in a small, concrete case. Say you are building a customer support agent that needs to remember a customer's shipping preference across three separate conversations spread over a month. With Mem0, your application adds that fact once, and on each new session your code calls search before drafting a reply. It costs you one API integration point, and the agent framework underneath can be anything. With Letta, the same fact would live in the agent's own core memory block, something the agent itself decides is worth keeping in fast-access context on every subsequent run, and the agent's own reasoning about what to keep and what to archive is part of what you are debugging when the memory misbehaves. The Mem0 path is simpler to reason about when something goes wrong, because the memory system is a service you can test in isolation. The Letta path gives the agent more autonomy over its own state, which is more powerful and also a larger surface to get wrong.

Which one actually fits a memory api use case?

If what you are searching for is closer to "memory api" than "agent runtime," that alone points toward Mem0. It was built to be called, not adopted, and that is a real design distinction, not a marketing one. A team that wants to keep its existing orchestration and just needs a place to durably store and retrieve per-user facts should weight this heavily; switching runtimes to gain a memory feature is a much bigger commitment than adding an API call.

What neither tool solves

Both Mem0 and Letta are built around a single asker or a single agent's own state. Neither has a first-class model for a shared pool of company facts queried by many different people, or pieces of software acting on their behalf, each with different permissions on the same underlying data. Mem0's namespace is per-user or per-agent; Letta's memory belongs to the agent that owns it. That is a deliberate, reasonable scope for both, and it is worth being honest about rather than treating as a missing feature waiting to be shipped.

A related but distinct piece of infrastructure, entitlement-aware retrieval over a company's actual systems of record with per-asker permission checked before an answer is drafted, is a separate design problem from either conversational memory or single-agent state. Contextely was built specifically for that gap, and its retrieval scoring runs a lexical ranking by default with no external dependency, only using semantic ranking if an operator explicitly configures an embedding model. If your actual requirement turns out to be that shared, permission-checked layer rather than either tool's core job, the Mem0 vs Contextely comparison and the dedicated Letta review each cover that adjacent case in more depth, and the Mem0 comparison page and Letta comparison page lay out the same distinction in a shorter format.

Common pitfalls when choosing between them

The honest bottom line

Mem0 vs Letta is not really a competition between two versions of the same product. Mem0 is a memory API you integrate into an agent you already control. Letta is a runtime you build the agent inside of, with memory as a structural part of how it operates. Pick based on whether you have an existing agent loop to extend or a new one to design, not on which tool has the higher benchmark score or the lower headline price. Whichever you pick, both are genuinely open, self-hostable, and actively maintained, which is more than can be said for a lot of the category. If neither turns out to match what you actually need, which is company-wide answers checked against who is asking rather than either conversational or single-agent memory, pricing shows what a retrieval-time entitlement layer costs to try against your own systems instead.

Frequently asked questions

Mem0 vs Letta for AI agents: which should I start with?

Start with Mem0 if you already have an agent, written in whatever framework you chose, and want to add persistent memory to it without restructuring how the agent runs. Start with Letta if you are building the agent itself from scratch and want the memory model, the tool-calling loop, and the runtime bundled as one system rather than assembled from parts.

Is Letta better than Mem0?

Neither is better in general. Letta is a better fit when the agent's execution loop and its memory need to be designed together, because that is what Letta's runtime is built around. Mem0 is a better fit when the agent already exists and memory is the one piece missing, because it is a call you add rather than a runtime you adopt.

Mem0 vs Letta pricing: which is cheaper?

At the entry level Letta's hosted Pro plan is $20 a month flat for an individual developer. Mem0's Hobby tier is free with 10,000 memory writes and 1,000 retrievals a month, and its cheapest paid tier, Starter, is $19 a month. Both are free to self-host, which is what most teams evaluating either tool for anything beyond a prototype end up doing anyway.

Do Mem0 or Letta support stateful agents with permission-aware access?

Not out of the box. Letta's memory belongs to the agent it is attached to, and Mem0's memory belongs to a user or agent namespace, but neither models a shared pool of facts that many different askers query under different entitlement. Building that on top of either tool is additional work you take on separately.

Can I self-host both mem0 and letta for free?

Yes. Mem0's core is Apache 2.0 licensed and its GitHub repository documents self-hosting directly. Letta's agent runtime is also open source under Apache 2.0, with self-hosting covered in its own docs. Licensing cost is not what differentiates the two; what each one is built to do is.

Free for 500 retrievals a month, and self-hostable with no limits.