windows 10+ only for now. uses UWP OCR and mica backdrop.
why rememex?
what it does
- indexes 120+ file types (code, docs, images, configs, whatever)
- OCR on images via windows built-in engine
- reads EXIF → reverse geocodes GPS to city names. search "photos from istanbul" and it works
- EXIF dates → human words. "summer morning" finds a photo from july at 8am
- hybrid search: vector + full-text + JINA cross-encoder reranker
- smart chunking per language (rust at
fn/struct, python atdef/class, etc) - semantic containers for isolation (work/personal/research)
- MCP server for AI agents. details → · agent instructions →
- annotations: attach searchable notes to any file, from the UI or via MCP. agents and humans share the same knowledge layer
- optional cloud embeddings -- plug in OpenAI, Gemini, Cohere, or any compatible API. default is still 100% local
architecture
indexing
graph LR
W[file watcher] -->|change event| SI[index single file]
WB[WalkBuilder] -->|bulk scan| B[collect files]
B --> C{image?}
C -->|yes| D[UWP OCR + EXIF]
C -->|no| E[file_io reader]
D --> F[git context]
E --> F
F --> G["semantic chunking (per-language)"]
G --> H[embedding provider]
H -->|local ONNX or remote API| I[(lancedb)]
I --> J[ANN + FTS index build]
search
graph LR
Q[query] --> QR[query router]
QR -->|weights + hyde flag| HYDE{hyde?}
HYDE -->|conceptual| LLM[LLM hypothetical doc]
HYDE -->|other| EMB[embed query]
LLM --> EMB
Q --> EXP[expand query variants]
EMB --> VS[vector search]
EXP --> FTS[full-text search]
VS --> HM["hybrid merge (RRF)"]
FTS --> HM
EMB --> AS[annotation search]
AS --> AM[merge annotations]
HM --> AM
AM --> RR[JINA reranker]
RR --> SC[score normalization]
SC --> MMR[MMR diversity]
MMR --> R[ranked results]
UI[tauri UI] --> Q
MCP[MCP server] -->|stdio| Q
run it
npm install
npm run tauri dev # dev is slow
npm run tauri build # release build, use this for real speed
Alt+Space to toggle. config & docs → CONFIG.md
RAM usage peaks during initial indexing — this is expected. once indexing completes, it drops and stays stable.
try it with real data
we ship a test dataset so you can see what semantic search actually feels like. 2,483 resume PDFs across 24 professions, accountants to teachers.
# unzip test-set/data.zip somewhere
# create a new container in rememex, point it at the unzipped folder
# wait for indexing (~30 min on local embeddings)
we indexed it and ran these queries. all results below used the most basic config — no cloud APIs, no fine-tuning:
real results, real scores:
the point: grep needs the exact keyword. rememex finds meaning — even when the words are different, even when the file is in the wrong folder.
agentic benchmark
same 5 tasks, same codebase. grep vs rememex MCP:
grep needs the exact keyword. rememex needs the idea.
agents using rememex are expected to use 5-10x fewer tokens and complete tasks significantly faster. fewer search attempts, fewer wrong files opened, fewer round-trips. the benchmark above shows 1 step vs 3-5 , that's both speed and cost.
project structure
rememex/
├── src/ # react/ts frontend
│ ├── components/ # UI components
│ │ ├── Sidebar.tsx # sidebar: containers, annotations, filters
│ │ ├── SearchBar.tsx # search input
│ │ ├── ResultsList.tsx # virtualized search results
│ │ ├── StatusBar.tsx # indexing status bar
│ │ ├── TitleBar.tsx # custom window title bar
│ │ ├── Settings.tsx # settings panel
│ │ └── settings/ # modular settings sub-panels
│ ├── locales/ # i18n translations (en, tr)
│ ├── Modal.tsx # modal dialog component
│ ├── i18n.tsx # internationalization setup
│ ├── types.ts # shared TypeScript types
│ └── App.tsx # main app shell
├── src-tauri/
│ └── src/
│ ├── indexer/ # core engine
│ │ ├── mod.rs # indexer orchestration, batch embed, reranker
│ │ ├── chunking.rs # per-language semantic splitting
│ │ ├── embedding.rs # fastembed ONNX inference
│ │ ├── embedding_provider.rs # local/remote provider trait
│ │ ├── search.rs # hybrid vector + full-text + reranker
│ │ ├── pipeline.rs # search pipeline scoring
│ │ ├── annotations.rs # annotation CRUD operations
│ │ ├── ocr.rs # UWP OCR bridge
│ │ ├── file_io.rs # file reading (text, pdf, binary)
│ │ ├── git.rs # git log integration
│ │ └── db.rs # lancedb operations
│ ├── bin/mcp.rs # MCP server binary (stdio)
│ ├── commands.rs # tauri IPC commands
│ ├── config.rs # config loading / migration
│ ├── state.rs # shared app state types
│ ├── watcher.rs # notify-based file watcher
│ └── lib.rs # app setup, tray, shortcuts
├── config.schema.json # JSON schema for config validation
├── AGENT.md # agent instructions for MCP
├── MCP.md # MCP server documentation
├── CONFIG.md # configuration reference
└── ROADMAP.md # what's done, what's next
stack
rust (tauri 2), react/ts, lancedb, Multilingual-E5-Base, JINA Reranker v2, rayon
roadmap
docs
star history
contributors
license
MIT