Memvid is a memory layer for AI agents that packages data, embeddings, search indices, and metadata into one portable .mv2 file. Instead of running a retrieval pipeline against a server-based vector database, an agent reads and searches the file directly, so the memory can be stored locally, on-premises, or in a cloud bucket and moved between them unchanged.
The storage model borrows from video encoding: memory is an append-only sequence of Smart Frames, each an immutable unit holding content plus timestamps, checksums, and metadata. Frames are grouped for compression, indexing, and parallel reads. This design gives append-only writes that never modify existing data, queries over past memory states, timeline-style inspection of how knowledge changes, and crash safety through committed frames.
The core is a Rust crate (Rust 1.85+) with a CLI, a Node.js SDK, and a Python SDK layered on top. You create a memory file, put documents with titles, URIs, and tags, commit, then issue search requests that return ranked hits with snippets. Hybrid retrieval combines BM25 lexical matching with vector similarity, and agents connect through MCP, the SDKs, or a direct API.
Capabilities are enabled through Cargo feature flags:
| Feature | What it adds |
|---|---|
| lex | Full-text search with BM25 ranking (Tantivy) |
| pdf_extract | Pure Rust PDF text extraction |
| vec | Vector similarity search (HNSW plus local ONNX text embeddings) |
| clip | CLIP visual embeddings for image search |
| whisper | Audio transcription with Whisper |
| api_embed | Cloud API embeddings (OpenAI) |
| temporal_track | Natural-language date parsing such as "last Tuesday" |
| parallel_segments | Multi-threaded ingestion |
| encryption | Password-based encrypted capsules (.mv2e) |
| symspell_cleanup | PDF text repair for broken word spacing |
Local text embeddings use ONNX models that you download separately: bge-small-en-v1.5 (384 dimensions, ~120 MB, the default), bge-base-en-v1.5 (768, ~420 MB), nomic-embed-text-v1.5 (768, ~530 MB), and gte-large (1024, ~1.3 GB). An index can be bound to a named embedding model so that later queries with a different model fail with a ModelMismatch error rather than returning mixed results.
Features
- Single-file architecture: data, embeddings, indices, and write-ahead log live in one .mv2 file with no database or server
- Smart Frames: append-only immutable frames with timestamps and checksums, grouped for compression and parallel reads
- Time-travel debugging: rewind, replay, or branch any earlier memory state
- Capsule context: self-contained, shareable memory capsules that carry rules and expiry
- Hybrid search: BM25 lexical ranking combined with HNSW vector similarity, with predictive caching on recall
- Multi-modal ingestion: PDF text extraction, CLIP image embeddings, and Whisper audio transcription behind feature flags
- Temporal queries: natural-language date expressions resolve against frame timestamps
- Encryption: password-protected .mv2e capsules
- Model binding: an index records its embedding model and rejects queries from a mismatched one
- Language bindings: Rust crate, CLI, Node.js SDK, and Python SDK, plus MCP access for agents
