TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻译准备中
Privacy-first native app that builds a searchable, visual timeline of how your thinking evolved. Tauri 2.0 + Rust + React.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A searchable, visual timeline of how your thinking evolved.
MemryLab is a privacy-first native desktop application that ingests your entire digital footprint -- journal entries, chat exports, social media archives, notes, emails -- and constructs a searchable, visual timeline of how your thinking, interests, and emotional patterns have evolved over time. It supports 30+ import sources with automatic format detection, runs an 8-stage AI analysis pipeline, and provides keyword, semantic, and hybrid search alongside a RAG-powered chat interface.查看完整 README ↗MemryLab is a privacy-first native desktop application that ingests your entire digital footprint -- journal entries, chat exports, social media archives, notes, emails -- and constructs a searchable, visual timeline of how your thinking, interests, and emotional patterns have evolved over time. It supports 30+ import sources with automatic format detection, runs an 8-stage AI analysis pipeline, and provides keyword, semantic, and hybrid search alongside a RAG-powered chat interface. Everything runs locally in a single SQLite database with zero telemetry, zero cloud dependency, and a 4.3 MB installer.
| Stage | What It Does |
|---|---|
| Theme Extraction | Monthly time-window topic modeling via LLM |
| Sentiment Tracking | Per-chunk emotional classification across time |
| Belief Extraction | Surfaces beliefs, preferences, and self-descriptions |
| Entity Extraction | Identifies people, places, concepts, and organizations |
| Insight Generation | Synthesizes surprising observations about personal evolution |
| Contradiction Detection | Finds conflicts between current and past beliefs |
| Evolution Diffing | Tracks how topics and opinions shift over time |
| Narrative Generation | Produces written summaries of personal growth arcs |
Download the latest release from the Releases page.
| Platform | Installer | Size |
|---|---|---|
| Windows | .exe (NSIS) | ~4.3 MB |
| macOS | .dmg | Coming soon |
| Linux | .AppImage / .deb | Coming soon |
Prerequisites: Rust 1.70+, Node.js 18+, Ollama (optional, for local LLM)
git clone https://github.com/laadtushar/MemryLab.git
cd MemPalace
npm install
# (Optional) Pull local models — see Recommended Models table above
ollama pull nomic-embed-text
ollama pull qwen2.5:14b-instruct-q5_K_M # or llama3.1:8b for less VRAM
# Development
cargo tauri dev
# Production build
cargo tauri build
Pick models based on your hardware. Embedding model is required for search; LLM is required for analysis.
| VRAM | LLM Model | Embedding Model | Speed |
|---|---|---|---|
| 4 GB | llama3.2:3b | nomic-embed-text | ~40 tok/s |
| 8 GB | llama3.1:8b | nomic-embed-text | ~35 tok/s |
| 12 GB | qwen2.5:14b-instruct-q5_K_M | nomic-embed-text | ~25 tok/s |
| 16 GB+ | qwen2.5:32b-instruct-q4_K_M | nomic-embed-text | ~15 tok/s |
| CPU only | llama3.2:3b | nomic-embed-text | ~5 tok/s |
# Example for 12 GB VRAM (e.g., RTX 4070/5070 Ti)
ollama pull nomic-embed-text
ollama pull qwen2.5:14b-instruct-q5_K_M
Tip: Larger models produce better belief extraction and contradiction detection. If you have the VRAM, use the biggest model that fits. For cloud alternatives with no hardware requirements, configure Gemini Flash (nearly free) or Groq (free tier) in Settings.
| Source | Format | What's Extracted |
|---|---|---|
| Obsidian | Vault folder (.md) | Text, frontmatter dates, tags, wikilinks |
| Markdown / Text | Folder (.md, .txt) | Text, file modification dates |
| Day One | JSON export | Entries, timestamps, weather, location, tags |
| Notion | ZIP (Markdown/CSV) | Pages, databases, timestamps |
| Evernote | .enex XML export | Notes, tags, creation dates |
| Apple Notes | Export folder | Note text, dates |
| Source | Format | Takeout Link |
|---|---|---|
| JSON ZIP | Posts, messages, comments | |
| JSON ZIP | Posts, messages, stories | |
| Twitter / X | ZIP archive | Tweets, DMs, likes |
| GDPR CSV | Posts, comments, saved | |
| TikTok | JSON export | Videos, comments, messages |
| Snapchat | JSON export | Messages, memories, stories |
| CSV export | Posts, messages, connections | |
| ZIP export | Pins, boards | |
| Tumblr | ZIP export | Posts, messages |
| Threads | JSON export | Posts, replies |
| Mastodon | JSON export | Toots, follows |
| Bluesky | JSON export | Posts, follows |
| Substack | Export files | Posts, newsletters |
| Medium | Export ZIP | Articles, responses |
| Source | Format | Takeout Link |
|---|---|---|
| TXT/ZIP export | Messages, timestamps, participants | |
| Telegram | JSON export | Messages, channels, groups |
| Discord | Data package | Messages, servers, DMs |
| Slack | ZIP export | Messages, channels, threads |
| Signal | Backup export | Messages, conversations |
| Source | Format | What's Extracted |
|---|---|---|
| YouTube | Google Takeout | Watch history, comments, playlists |
| Spotify | Data export | Listening history, playlists |
| Netflix | Account data | Viewing history, ratings |
| Source | Format | What's Extracted |
|---|---|---|
| Google Takeout | ZIP (mixed) | Gmail, Drive, Keep, Calendar, etc. |
| Microsoft | Data export | Outlook, OneDrive, Teams |
| Amazon | Data request | Orders, searches, Alexa |
| Generic | Any text files | Auto-detected fallback adapter |
All providers are preconfigured with one-click presets. Select one in Settings.
| Provider | Free Tier | Embeddings | Default Model | Signup |
|---|---|---|---|---|
| Ollama (local) | Unlimited | nomic-embed-text | Llama 3.1 8B | ollama.com |
| OpenRouter | 29 free models | -- | Llama 3.3 70B | openrouter.ai |
| Groq | 30 RPM | -- | Llama 3.3 70B | console.groq.com |
| Google Gemini | 10 RPM | text-embedding-004 | Gemini 2.5 Flash | aistudio.google.com |
| Cerebras | 1M tokens/day | -- | Llama 3.3 70B | cloud.cerebras.ai |
| Mistral | 1B tokens/month | mistral-embed | Mistral Small | console.mistral.ai |
| SambaNova | Indefinite | -- | Llama 3.3 70B | cloud.sambanova.ai |
| Cohere | 1K calls/month | embed-v4.0 | Command A | dashboard.cohere.com |
| Claude (Anthropic) | Pay-per-use | -- | Claude Sonnet 4 | console.anthropic.com |
Any OpenAI-compatible endpoint can also be configured manually with a custom base URL.
MemryLab follows a strict hexagonal (ports and adapters) architecture. The core domain has zero knowledge of specific databases, LLM providers, or UI frameworks.
graph TB
subgraph Frontend["React 19 Frontend"]
direction LR
V1[Timeline] --- V2[Search] --- V3[Ask/Chat] --- V4[Insights]
V5[Evolution] --- V6[Import] --- V7[Memory] --- V8[Entities]
V9[Graph] --- V10[Activity] --- V11[Logs] --- V12[Settings]
end
Frontend -->|"Tauri IPC (42 commands)"| Commands
Frontend -->|"Events (progress)"| Commands
subgraph Backend["Rust Backend"]
Commands[Command Handlers]
subgraph Domain["Domain (Pure Logic)"]
Models["Models: Document, Chunk, Entity\nTheme, Memory, Insight, Narrative"]
Ports["Ports: IDocumentStore, IVectorStore\nIGraphStore, ILlmProvider\nIEmbeddingProvider, IMemoryStore\nIPageIndex, ITimelineStore"]
end
subgraph Adapters["Adapters"]
SQLite["SQLite Adapters\n(7 stores + FTS5)"]
Ollama["Ollama\n(Local LLM + Embed)"]
OpenAI["OpenAI-Compat\n(8 cloud providers)"]
Claude["Claude API"]
Keychain["OS Keychain"]
end
subgraph Pipelines["Pipelines"]
Ingest["Ingestion: Detect → Parse → Dedup\n→ Normalize → Chunk → Embed → Store"]
Analysis["Analysis: Themes → Sentiment → Beliefs\n→ Entities → Insights → Contradictions\n→ Evolution → Narratives"]
RAG["RAG: Classify → Retrieve → RRF Fuse\n→ Memory Augment → LLM Generate"]
end
Commands --> Domain
Domain --> Adapters
Commands --> Pipelines
Pipelines --> Domain
end
style Frontend fill:#1e1b4b,stroke:#7c3aed,color:#e9d5ff
style Domain fill:#172554,stroke:#3b82f6,color:#bfdbfe
style Adapters fill:#1c1917,stroke:#a1a1aa,color:#e4e4e7
style Pipelines fill:#052e16,stroke:#22c55e,color:#bbf7d0
flowchart LR
A[Drop File/ZIP] --> B[Auto-Detect Source]
B --> C[Platform Adapter]
C --> D[Dedup by SHA-256]
D --> E[Normalize Unicode]
E --> F[Chunk 512 tokens]
F --> G[Generate Embeddings]
G --> H[Store + FTS5 Index]
H --> I[Auto-Run Analysis]
style A fill:#7c3aed,stroke:#a78bfa,color:white
style I fill:#22c55e,stroke:#4ade80,color:white
flowchart LR
T[Themes] --> S[Sentiment]
S --> B[Beliefs]
B --> E[Entities]
E --> I[Insights]
I --> C[Contradictions]
C --> EV[Evolution]
EV --> N[Narratives]
style T fill:#7c3aed,stroke:#a78bfa,color:white
style N fill:#22c55e,stroke:#4ade80,color:white
flowchart LR
Q[User Question] --> EMB[Embed Query]
EMB --> VS[Vector Search]
EMB --> FTS[FTS5 Keyword Search]
VS --> RRF[Reciprocal Rank Fusion]
FTS --> RRF
RRF --> MEM[Memory Augmentation]
MEM --> LLM[LLM Generate]
LLM --> ANS[Answer + Citations]
style Q fill:#7c3aed,stroke:#a78bfa,color:white
style ANS fill:#22c55e,stroke:#4ade80,color:white
| Port | Purpose | Adapter |
|---|---|---|
IDocumentStore | Document + chunk persistence | SQLite |
IVectorStore | Embedding storage + similarity search | SQLite (cosine sim) |
IGraphStore | Entity relationships | SQLite (adjacency + recursive CTE) |
IPageIndex | Full-text search (BM25) | SQLite FTS5 |
ITimelineStore | Temporal range queries | SQLite |
IMemoryStore | Long-term facts (Mem0-style) | SQLite |
ILlmProvider | Text generation + classification | Ollama / Claude / OpenAI-compat |
IEmbeddingProvider | Text to vector encoding | Ollama / Gemini / Mistral / Cohere |
IAnalysisStage | Pluggable analysis pipeline stage | 8 built-in stages |
| Layer | Technology | Purpose |
|---|---|---|
| App Shell | Tauri 2.0 | Native desktop (Rust backend + web frontend) |
| Backend | Rust (2021 edition) | Memory safety, performance, async runtime |
| Frontend | React 19 + TypeScript 6 | Component-based UI with type safety |
| Styling | Tailwind CSS 4 + Lucide Icons | Dark/light theme, utility-first |
| State | Zustand 5 | Lightweight TypeScript-native state management |
| Visualization | D3.js 7 | Timeline, graph, and evolution visualizations |
| Database | SQLite (rusqlite, bundled) | Single-file storage for everything |
| Full-Text Search | SQLite FTS5 | BM25-ranked keyword search with auto-sync triggers |
| Vector Search | SQLite + cosine similarity | Semantic search with local embeddings |
| Graph Storage | SQLite adjacency model | Entity relationships with recursive CTE traversal |
| Local LLM | Ollama | Embeddings + completions, fully offline |
| Cloud LLM | OpenAI-compatible API | 8 cloud providers via universal adapter |
| Secrets | OS Keychain (keyring) | Windows Credential Manager / macOS Keychain / Linux Secret Service |
| Build | Vite 8 + Cargo | Fast dev builds, cross-platform packaging |
| CI/CD | GitHub Actions | Cross-platform build + test (Ubuntu, Windows, macOS) |
MemryLab has 10 views, each accessible from the sidebar:
| View | Description |
|---|---|
| Timeline | D3.js interactive bar chart with zoom/pan, monthly document counts, activity table, and time boundary markers |
| Search | Multi-mode search (keyword / semantic / hybrid) with result cards and full document viewer |
| Ask | Chat-style RAG interface with suggested questions, source citations, and memory-augmented context |
| Insights | AI-generated observations about personal evolution with one-click analysis trigger |
| Evolution | Compare beliefs and themes across time periods, view narrative arcs, diff mode |
| Import | Guided wizard with 30+ source adapters, auto-detection, ZIP handling, and progress tracking |
| Memory | Filterable browser of extracted facts, beliefs, preferences, and self-descriptions with delete controls |
| Entities | Browse and query extracted people, places, concepts, and organizations |
| Graph | Force-directed entity relationship explorer with node detail panel |
| Settings | Provider selection (9 presets), model configuration, connection testing, export, and app statistics |
git clone https://github.com/laadtushar/MemryLab.git
cd MemPalace
npm install
cargo tauri dev
cargo tauri build
# Rust tests
cd src-tauri && cargo test --lib
# TypeScript type check
npx tsc --noEmit
# Lint
cargo clippy --manifest-path src-tauri/Cargo.toml
MemPalace/
├── src-tauri/ # Rust backend (120+ source files)
│ └── src/
│ ├── domain/ # Core domain models + port traits
│ │ ├── models/ # Document, Chunk, Entity, Theme, Memory, Insight,
│ │ │ # Narrative, Contradiction, Sentiment, TimeBoundary
│ │ └── ports/ # 9 trait interfaces (hexagonal architecture)
│ ├── adapters/ # Port implementations
│ │ ├── sqlite/ # 7 SQLite adapters + migrations
│ │ ├── llm/ # Ollama, Claude, OpenAI-compat providers + usage logger
│ │ └── keychain/ # OS keychain adapter for secret storage
│ ├── pipeline/
│ │ ├── ingestion/ # Source adapters (30+), dedup, normalize, chunk, ZIP handler
│ │ └── analysis/ # 8 stages: themes, sentiment, beliefs, entities,
│ │ # insights, contradictions, evolution, narratives
│ ├── query/ # RAG pipeline (retrieve -> RRF fuse -> augment -> generate)
│ ├── prompts/ # Versioned LLM prompt templates
│ └── commands/ # Tauri IPC command handlers
│
├── src/ # React 19 frontend
│ ├── components/
│ │ ├── timeline/ # D3.js interactive timeline
│ │ ├── search/ # Multi-mode search interface
│ │ ├── ask/ # RAG chat with citations
│ │ ├── insights/ # AI insight feed
│ │ ├── evolution/ # Evolution explorer with diff + narrative views
│ │ ├── import/ # Import wizard with auto-detect
│ │ ├── memory/ # Memory facts browser
│ │ ├── entities/ # Entity explorer
│ │ ├── graph/ # Force-directed graph + node detail panel
│ │ ├── settings/ # Provider config, export, stats
│ │ ├── auth/ # Passphrase dialog
│ │ ├── layout/ # AppShell + Sidebar
│ │ ├── shared/ # Error boundary, common components
│ │ └── ui/ # Design system primitives
│ ├── stores/ # Zustand state management
│ ├── lib/ # Typed Tauri IPC command wrappers
│ └── types/ # TypeScript domain type mirrors
│
├── .github/workflows/ci.yml # Cross-platform CI (Ubuntu, Windows, macOS)
└── package.json
MemryLab is open source. Contributions welcome!
The hexagonal architecture means adding a new source adapter, storage backend, or analysis stage only requires implementing one trait interface -- no changes to business logic.
git checkout -b feature/amazing-feature)git commit -m 'feat: add amazing feature')git push origin feature/amazing-feature)See CONTRIBUTING.md for detailed guidelines.
MemryLab stores data in the platform-specific app data directory:
| Platform | Location |
|---|---|
| Windows | %APPDATA%/com.memorypalace.app/ |
| macOS | ~/Library/Application Support/com.memorypalace.app/ |
| Linux | ~/.local/share/com.memorypalace.app/ |
MIT License. See LICENSE for details.