92.2% LoCoMo Benchmark

AI Memory API Comparison

Smara is the only open-source memory API that scores above 90% on the LoCoMo benchmark. MIT licensed, self-hostable, and free.

Feature-by-feature breakdown

Click a tab to see how Smara compares head-to-head with each competitor.

Smara vs Mem0

FeatureSmaraMem0
LicenseMIT (open source)Proprietary
PriceFree (self-host or hosted)$249/mo (Pro)
LoCoMo benchmark92.2%Not published
Semantic searchYes (Voyage AI)Yes (OpenAI)
Hybrid search (BM25)YesNo
Memory decay (Ebbinghaus)YesNo
Contradiction detectionYes (cosine-based)Partial (LLM-based)
Knowledge graphYes (PostgreSQL CTEs)Yes (Neo4j)
Graph traversal APIYes (5-hop recursive)No
MCP serverYes (npm package)No
Multi-agent scopingYesYes
Team memory (RBAC)YesOrg-level only
Self-hostableYes (Docker, no Neo4j)Yes (requires Neo4j)
DatabasePostgreSQL onlyPostgreSQL + Neo4j
Smara is open source. Mem0 Pro costs $249/mo. Star on GitHub

Smara vs Zep

FeatureSmaraZep
LicenseMIT (open source)Proprietary
PriceFree$475/mo (Flex+)
LoCoMo benchmark92.2%Not published
Semantic searchYesYes
Hybrid search (BM25)YesNo
Memory decay (Ebbinghaus)YesNo
Contradiction detectionYesNo
Knowledge graphYesPartial
MCP nativeYesNo
Multi-agent supportYesSession-based
Team memoryYes (RBAC)Yes
Self-hostableYes (Docker)No (cloud only)
Smara is open source. Zep Flex+ costs $475/mo. Star on GitHub

Smara vs Letta

FeatureSmaraLetta
LicenseMITApache 2.0 (partial)
Price (hosted)Free$200/mo (Max)
LoCoMo benchmark92.2%Not published
FocusMemory APIAgent framework
Semantic searchYesYes
Hybrid search (BM25)YesNo
Memory decayYes (Ebbinghaus)No
Contradiction detectionYesNo
Knowledge graphYesNo
MCP nativeYesNo
Self-hostableYesYes
Vendor lock-inNone (REST API)High (framework)
Smara is a standalone memory API. Letta is a full agent framework. Star on GitHub

Smara vs agentmemory

FeatureSmaraagentmemory
LicenseMITMIT
Hosted serviceYes (free)No (library only)
LoCoMo benchmark92.2%Not published
Semantic searchYes (1024-dim Voyage)Yes (local)
Hybrid search (BM25)YesNo
Memory decayYesNo
Knowledge graphYesNo
MCP nativeYesNo
Multi-agentYesNo
REST APIYesNo (Python only)
Auth / API keysYesNo
Production-readyYesNo
Both are open source. Smara adds production features, hosted API, and MCP. Star on GitHub

92.2% on the LoCoMo benchmark

1,420 out of 1,540 questions correct across 10 long conversations. The only open-source memory API to publish benchmark results.

Single-hop
90.4%
direct fact recall
Multi-hop
92.8%
cross-reference reasoning
Temporal
78.1%
time-based queries
Open-domain
94.2%
general knowledge

Score progression across 9 versions

Each jump came from a specific architectural insight.

v2
Vector search only
62.3%
v6
+ Hybrid BM25
78.6%
v7
+ Retrieval tuning
81.0%
v9
+ Query decomposition
92.2%

Migrate in 5 minutes

Drop-in replacement. Swap the client, keep your logic.

Migrate from Mem0

Before (Mem0)
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"
)
After (Smara)
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()

Migrate from Zep

Before (Zep)
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"
)
After (Smara)
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()

Ready to try Smara?

Open source, MIT licensed. Self-host with Docker or use the free hosted API.