Privacy-first memory layer for AI applications β Remember across sessions without compromising your data.
Mimir provides developers and end-users with a privacy-first memory layer that lets any LLM application remember across sessions without handing raw data to third parties.
- Design Principles
- Quick Start
- Usage Examples
- Architecture
- Security & Privacy
- Development
- Roadmap
- License
- Community
- Acknowledgments
- Screenshots / Demo
- Contact / Support
- π Local-first β Runs entirely on user hardware; offline by default
- π Zero-knowledge cloud β Optional encrypted sync; server cannot decrypt
- β Fine-grained consent β Users classify memories and control app access
- π Open-source & audited β Apache-2.0 core; public CI and security reviews
# macOS
brew install mimir/tap/mimir
# Linux/Windows (cargo required)
cargo install mimir
# From source
git clone https://github.com/your-org/mimir
cd mimir
cargo build --release# Initialize vault
mimir init
# Start daemon
mimir start &
# Check status
mimir statuscurl -X POST http://localhost:8100/memories \
-H "Content-Type: application/json" \
-d '{"content": "Meeting with Alice at 3pm", "class": "work"}'βββββββββ Chat / Agent βββββββ JSON-RPC/MCP ββββββββββββββββ
β Any LLM client βββββββββββββββββββββββΊβ mimir β
ββββββββββββββββββββββββββββββ β (Rust) β
β² retrieve context ββββββ¬ββββββββββ€
β β β β
βΌ write turns policy vault β
IPC / gRPC β β
βΌ βΌ
SQLCipher + HNSW + KV
| Component | Description | Key Technologies |
|---|---|---|
| mimir | MCP server daemon | axum, tokio, JSON-RPC |
| Vector Store | HNSW similarity search | hnswlib-rs, 768-D embeddings |
| Database | Encrypted SQLite | SQLCipher, metadata + graph |
| Guardrails | PII detection & classification | TinyBERT-ONNX, presidio-rs |
| Compression | Memory summarization | llama_cpp_rs, token limits |
| SDK | Language bindings | PyO3, napi-rs, wasm-bindgen |
| Tray UI | Desktop management | Tauri, permission controls |
| Threat | Mitigation |
|---|---|
| Data breach | Client-side XChaCha20; server never sees keys |
| Rogue app access | ACL filters + per-class encryption |
| Model inversion | PII redaction before LLM processing |
| Data retention | TTL jobs delete/summarize aged memories |
Memories are automatically classified and encrypted per-class:
- personal β Personal conversations, preferences
- work β Professional context, meetings
- health β Medical information, allergies
- financial β Payment info, financial context
- custom β User-defined categories
Access control is enforced at retrieval time based on app permissions.
- Rust 1.75+ with cargo
- SQLCipher development libraries
- ONNX Runtime (for guardrails)
# Full workspace build
cargo build --workspace
# Individual components
cargo build -p mimir
cargo build -p mimir-cli
# Release build
cargo build --release --workspace# Unit tests
cargo test --workspace
# Integration tests
cargo test --test integration
# Benchmarks
cargo benchWe welcome contributions! Please see CONTRIBUTING.md for guidelines.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
- v0.1.0 - Core daemon with basic MCP server (Current)
- v0.2.0 - Vector store and embedding pipeline
- v0.3.0 - Guardrails and PII detection
- v0.4.0 - Tray UI and access control
- v0.5.0 - Language bindings (Python, Node, WASM)
- v1.0.0 - Production release with encryption
See ROADMAP.md for detailed timeline.
- Core components (daemon, SDK, guardrails): Apache License 2.0
- UI components (tray widget): AGPL-3.0 to keep derivative UIs open-source
graph TD
A["User Conversations"] --> B["Ingest Text Tool"]
B --> C["Text Preprocessing"]
C --> D["Gemma3 1B
Content Extractor"]
D --> E["Raw Memory Candidates"]
E --> F["Gemma3 1B
Summarizer"]
F --> G["Summarized Memories"]
G --> H["Similarity Check
(Vector Store)"]
H --> I{"Duplicate
Detection"}
I -->|"New"| J["Direct Storage"]
I -->|"Similar"| K["Gemma3 1B
Conflict Resolver"]
K --> L{"Resolution
Decision"}
L -->|"Merge"| M["Update Existing"]
L -->|"Replace"| N["Replace Existing"]
L -->|"Keep Both"| O["Store as New"]
P["Add Memories Tool<br/>(Deliberate)"] --> Q["Manual Memory Input"]
Q --> F
J --> R["Final Storage<br/>(Database + Vector)"]
M --> R
N --> R
O --> R
R --> S["Memory Vault"]
style D fill:#e1f5fe
style F fill:#e1f5fe
style K fill:#e1f5fe
style S fill:#c8e6c9W
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Security: See SECURITY.md for reporting vulnerabilities
"The best way to predict the future is to invent it, but the best way to remember it is to own it."
- For help, questions, or feedback, please open an issue or join the discussions.
- For security concerns, see SECURITY.md.
