Compare

RushDB vs Mem0: a database vs a memory-management layer.

Mem0 is a memory layer/SDK that orchestrates an LLM, an embedder, and a vector store — it is not itself a database. RushDB is a database: Records, typed properties, relationships, and semantic search live in one backend you can query directly, without also operating (or renting) a separate vector store underneath.

3 → 1

Dependencies to operate

Mem0 orchestrates an LLM, an embedder, and a vector store; RushDB is one backend with managed embeddings built in.

0

LLM calls per memory write

Writes are deterministic records — nothing is summarized away or silently dropped by an extraction pass.

ACID

Transactional memory writes

Memory records can participate in transactions, so multi-step agent state commits or rolls back as one unit.

Side by side

The same task in both: store a memory, recall it by meaning for one user.

Both snippets persist conversational memory and retrieve it semantically, scoped to one user. The difference is what sits underneath the call — and who decides what gets stored.

Mem0 (Python SDK)
from mem0 import Memory

# Requires a configured LLM + embedder + vector store
# underneath (defaults: OpenAI + Qdrant)
m = Memory()

# An LLM extraction pass decides what gets stored
m.add(messages, user_id='alice')

results = m.search(
    query='What did we decide about the Pro launch?',
    filters={'user_id': 'alice'},
)

Compact API, but three moving dependencies under it — and an LLM decides which parts of a conversation survive as memory.

RushDB (Python SDK)
from rushdb import RushDB

db = RushDB('RUSHDB_API_KEY')

db.ai.indexes.create({'label': 'MEMORY', 'propertyName': 'output'})

# Your application decides exactly what is stored
db.records.create(label='MEMORY', data={
    'user_id': 'alice',
    'kind': 'decision',
    'output': 'Ship the Pro launch after the pricing review.',
})

results = db.ai.search({
    'labels': ['MEMORY'],
    'propertyName': 'output',
    'query': 'What did we decide about the Pro launch?',
    'where': {'user_id': 'alice'},
})

One database, deterministic writes — the fields you store are the fields you can filter, relate, and aggregate later.

Switching

Moving from Mem0: own the memory layer instead of renting the glue.

You keep your agent framework — the migration is re-pointing memory calls, not rebuilding the agent. Mem0 scopes (user_id, agent_id, run_id) map directly to record properties, extracted memories become records you control verbatim, and the graph memory Mem0 simulates inside a vector store becomes real, traversable relationships.

01

Export memories as records

Each Mem0 memory becomes a MEMORY record: the text as an indexed property, the user/agent/run scopes as typed fields.

02

Re-point add and search

Replace m.add() with records.create() and m.search() with ai.search() — scope filters move into the where clause unchanged.

03

Add what an SDK layer can’t

Connect memories to accounts, entities, and decisions as relationships, run exact filters and aggregations, and inspect it all through live schema.

Who this is for

Pick the right tool for the job.

Choose RushDB if

  • You want to store and query structured records directly, with exact filters, relationships, and analytics, not just LLM-extracted "facts."
  • You want one backend for records and semantic search, not a memory SDK sitting on top of a separately-run vector store.
  • You want a self-hosting path where the graph and API are one system, not several pluggable components (LLM + embedder + vector store) to wire up yourself.

Choose Mem0 if

  • You want the fastest possible bolt-on for an existing agent framework (LangGraph, LlamaIndex, CrewAI, AutoGen) with first-party integration guides.
  • You want an LLM to automatically decide what from a conversation is worth remembering, rather than writing structured records yourself.
  • You are fine defaulting to (or bringing your own) external LLM, embedder, and vector store rather than owning a single data layer.

Mem0 is built to bolt onto an existing agent framework with minimal setup, using LLM-based extraction to decide what’s worth remembering. RushDB is built for teams that want to own the data layer directly — write structured records, query them with exact filters and relationships, and choose to also index them for semantic recall, without an LLM call deciding what gets stored.

Comparison table

Storage model, extraction, and deployment

The core difference is architectural: Mem0 decides what to remember via an LLM call and stores it across pluggable external systems. RushDB stores whatever records you write, indexed for retrieval the way you configure it.

Topic
RushDB
Mem0
What it is

A graph + vector database: Records, relationships, and semantic search in one backend you query directly.

A memory-management layer/SDK that orchestrates an LLM (default gpt-5-mini), an embedder (default text-embedding-3-small), and a vector store (default Qdrant) — available as a library, self-hosted server, or managed Cloud Platform.

Source· checked 2026-07-01
How memories are created

You write structured records directly (JSON in, typed properties out); nothing is silently summarized or dropped.

LLM-based extraction (single-pass, ADD-only) with entity extraction/linking; memory is scoped as Conversation, Session, User, or Organizational.

Source· checked 2026-07-01
Graph memory

Relationships are first-class: nested JSON creates parent-child links automatically; flat-source relationships are suggested and require approval before they change graph meaning.

Built-in graph memory (as of the current version) stores entities in a parallel collection inside the existing vector store — no separate graph database required. This replaced an earlier architecture that did require bringing your own Neo4j/Memgraph/Neptune instance.

Source· checked 2026-07-01
Retrieval

Semantic search (ai.search) combined with exact where-filters and relationship traversal in one SearchQuery.

Fuses vector similarity, BM25 keyword matching, and entity matching; supports structured JSON-logic filters (user_id, agent_id, date ranges).

Source· checked 2026-07-01
Deployment

Managed cloud, BYOC on your own Neo4j/Aura instance, or full self-hosting with Docker Compose — one API surface across all three.

Fully managed Cloud Platform, or open-source library/self-hosted server where you configure your own LLM and vector store (20+ supported options).

Source· checked 2026-07-01
Free tier

Free plan includes 100K Knowledge Units per month, no credit card required.

Free tier: 10,000 add / 1,000 retrieval requests, 1 project. Cheapest paid tier (Starter) is $19/month.

Source· checked 2026-07-01

Mem0 facts sourced from mem0.ai, docs.mem0.ai, and github.com/mem0ai/mem0 as of the dates shown above; the Mem0 snippet follows its documented quickstart shape. Mem0’s graph-memory architecture changed recently — verify against current docs before relying on this row. RushDB facts are drawn from RushDB’s own docs and feature pages linked throughout this site. Report a stale claim to hi@rushdb.com.

Implementation example

Write and recall a structured memory record

RushDB stores exactly what you write, then lets you recall it by meaning within an exact filter scope.

from rushdb import RushDB

db = RushDB("RUSHDB_API_KEY")

db.ai.indexes.create({
    "label": "MEMORY",
    "propertyName": "output",
})

db.records.create(
    label="MEMORY",
    data={
        "agent_id": "agent-42",
        "kind": "decision",
        "output": "Keep the free plan, but increase Pro onboarding limits after launch feedback.",
        "status": "approved",
    },
)

recall = db.ai.search({
    "labels": ["MEMORY"],
    "propertyName": "output",
    "query": "What did we decide about Pro onboarding?",
    "where": {"agent_id": "agent-42", "status": "approved"},
    "limit": 5,
})

print(recall.data)

Questions developers ask.

Next step

See it against your own data.

Start free