memvid: A portable AI memory system that packages data, embeddings, search structure, and metadata into a single file.
What problem it solves
AI agents often need persistent memory while avoiding the operational complexity of database-backed retrieval systems and multi-component RAG pipelines. Memvid addresses this by combining stored content, indexes, and metadata in a portable file that can be searched directly.
Key features
Single-file portable memory — Data, embeddings, search structures, and metadata are packaged into one `.mv2` file, without separate WAL, lock, shared-memory, or sidecar files.
Source: README, MV2_SPEC.md
Versioned Smart Frames — Memory is organized as an append-only sequence of immutable Smart Frames containing content, timestamps, checksums, and metadata. This supports timeline inspection, historical queries, and rewindable memory states.
Source: README
Built-in retrieval options — The Rust library can provide full-text search, vector similarity search, PDF extraction, visual embeddings, and audio transcription through selectable feature flags.
Source: README
Portable search indexes — The `.mv2` format includes compressed data segments and lexical, vector, and time indexes for searching and chronological inspection from the same file.
Source: README
Multiple language interfaces — Memvid provides a CLI and SDKs for Node.js, Python, and Rust, allowing different application stacks to use the same file-based memory layer.
Source: README
Quick start
Copied verbatim from the project's README.
[dependencies]
memvid-core = "2.0"use memvid_core::{Memvid, PutOptions, SearchRequest};
fn main() -> memvid_core::Result<()> {
// Create a new memory file
let mut mem = Memvid::create("knowledge.mv2")?;
// Add documents with metadata
let opts = PutOptions::builder()
.title("Meeting Notes")
.uri("mv2://meetings/2024-01-15")
.tag("project", "alpha")
.build();
mem.put_bytes_with_options(b"Q4 planning discussion...", opts)?;
mem.commit()?;
// Search
let response = mem.search(SearchRequest {
query: "planning".into(),
top_k: 10,
snippet_chars: 200,
..Default::default()
})?;
for hit in response.hits {
println!("{}: {}", hit.title.unwrap_or_default(), hit.text);
}
Ok(())
}Who it may suit
Inference: may suit developers building long-running agents, offline-first systems, enterprise knowledge bases, or applications that require portable and auditable memory files.
Topics to discuss
How should developers version and migrate `.mv2` files across long-lived agent deployments?
Which workflow best combines lexical, vector, and temporal retrieval in production use cases?
How can Smart Frame lifecycle and capsule expiry policies be improved for collaborative applications?
Written by ReadmeX AI from the project's README, source and public GitHub data; it may contain mistakes.
Read the original README https://github.com/memvid/memvid#readme
ReadmeX opened this community for a trending project; it is not run by the project. Maintainers can claim it from the community page.
Comments
…