Smara is the only open-source memory API that scores above 90% on the LoCoMo benchmark. MIT licensed, self-hostable, and free.
Click a tab to see how Smara compares head-to-head with each competitor.
| Feature | Smara | Mem0 |
|---|---|---|
| License | MIT (open source) | Proprietary |
| Price | Free (self-host or hosted) | $249/mo (Pro) |
| LoCoMo benchmark | 92.2% | Not published |
| Semantic search | Yes (Voyage AI) | Yes (OpenAI) |
| Hybrid search (BM25) | Yes | No |
| Memory decay (Ebbinghaus) | Yes | No |
| Contradiction detection | Yes (cosine-based) | Partial (LLM-based) |
| Knowledge graph | Yes (PostgreSQL CTEs) | Yes (Neo4j) |
| Graph traversal API | Yes (5-hop recursive) | No |
| MCP server | Yes (npm package) | No |
| Multi-agent scoping | Yes | Yes |
| Team memory (RBAC) | Yes | Org-level only |
| Self-hostable | Yes (Docker, no Neo4j) | Yes (requires Neo4j) |
| Database | PostgreSQL only | PostgreSQL + Neo4j |
| Feature | Smara | Zep |
|---|---|---|
| License | MIT (open source) | Proprietary |
| Price | Free | $475/mo (Flex+) |
| LoCoMo benchmark | 92.2% | Not published |
| Semantic search | Yes | Yes |
| Hybrid search (BM25) | Yes | No |
| Memory decay (Ebbinghaus) | Yes | No |
| Contradiction detection | Yes | No |
| Knowledge graph | Yes | Partial |
| MCP native | Yes | No |
| Multi-agent support | Yes | Session-based |
| Team memory | Yes (RBAC) | Yes |
| Self-hostable | Yes (Docker) | No (cloud only) |
| Feature | Smara | Letta |
|---|---|---|
| License | MIT | Apache 2.0 (partial) |
| Price (hosted) | Free | $200/mo (Max) |
| LoCoMo benchmark | 92.2% | Not published |
| Focus | Memory API | Agent framework |
| Semantic search | Yes | Yes |
| Hybrid search (BM25) | Yes | No |
| Memory decay | Yes (Ebbinghaus) | No |
| Contradiction detection | Yes | No |
| Knowledge graph | Yes | No |
| MCP native | Yes | No |
| Self-hostable | Yes | Yes |
| Vendor lock-in | None (REST API) | High (framework) |
| Feature | Smara | agentmemory |
|---|---|---|
| License | MIT | MIT |
| Hosted service | Yes (free) | No (library only) |
| LoCoMo benchmark | 92.2% | Not published |
| Semantic search | Yes (1024-dim Voyage) | Yes (local) |
| Hybrid search (BM25) | Yes | No |
| Memory decay | Yes | No |
| Knowledge graph | Yes | No |
| MCP native | Yes | No |
| Multi-agent | Yes | No |
| REST API | Yes | No (Python only) |
| Auth / API keys | Yes | No |
| Production-ready | Yes | No |
1,420 out of 1,540 questions correct across 10 long conversations. The only open-source memory API to publish benchmark results.
Each jump came from a specific architectural insight.
Drop-in replacement. Swap the client, keep your logic.
from mem0 import Memory
m = Memory()
# Store
m.add(
"User prefers dark mode",
user_id="alice",
metadata={"source": "chat"}
)
# Search
results = m.search(
"What does the user prefer?",
user_id="alice"
)
import requests
API = "https://api.smara.io/v1"
H = {"Authorization": "Bearer smara_..."}
# Store
requests.post(f"{API}/memories", json={
"user_id": "alice",
"fact": "User prefers dark mode",
"source": "chat"
}, headers=H)
# Search
r = requests.get(f"{API}/memories/search",
params={"user_id": "alice",
"q": "What does the user prefer?"},
headers=H).json()
from zep_cloud.client import Zep
client = Zep(api_key="z_...")
# Add memory
client.memory.add(
session_id="session-123",
messages=[{
"role": "user",
"content": "I love hiking"
}]
)
# Search
results = client.memory.search(
session_id="session-123",
text="outdoor activities"
)
import requests
API = "https://api.smara.io/v1"
H = {"Authorization": "Bearer smara_..."}
# Store
requests.post(f"{API}/memories", json={
"user_id": "session-123",
"fact": "User loves hiking",
"namespace": "preferences"
}, headers=H)
# Search
r = requests.get(f"{API}/memories/search",
params={"user_id": "session-123",
"q": "outdoor activities",
"namespace": "preferences"},
headers=H).json()