Skip to main content

Local-first RAG library — ingest files and SQLite, query semantically, pipe results into any AI agent

Project description

Remex

Remex

Stop searching. Start asking.

Local-first AI for the documents you already have.

GitHub Release CI PyPI License Windows Python


Remex Studio — homepage

Remex ingests PDFs, Word docs, Markdown, spreadsheets, code, web pages, e-books, and SQLite databases into a local vector index, then lets you ask questions in plain language and get answers cited from your own files. Everything — embedding, storage, retrieval — runs on your machine. The AI provider is optional and you bring your own (Anthropic, OpenAI, Ollama, or any OpenAI-compatible endpoint).



Install

🖥️ Remex Studio

Native desktop app for Windows. Zero terminal.

⬇ Download the latest release

[!WARNING] Windows SmartScreen may flag the installer because Remex isn't code-signed with a paid certificate. The source is in this repo — audit freely. Click More info → Run anyway to proceed.

⌨️ Python CLI

pip install remex-cli                      # core (7 formats)
pip install "remex-cli[formats]"           # +.pptx .xlsx .epub .html .odt
pip install "remex-cli[ai]"                # +Anthropic & OpenAI SDKs
pip install "remex-cli[sentence]"          # +NLTK sentence chunking
pip install "remex-cli[all]"               # everything


Remex Studio — AI Answer with cited sources

Ask a question, get a synthesised answer grounded in your own files — with the source chunks and similarity scores one click away.



Features

🔍 Search & answer

  • Semantic search across one or many collections
  • AI Answer — synthesised, grounded, sources cited
  • AI personas — save voices (Researcher, Code Q&A, …) and switch from the Query pane
  • Low-confidence banner when no chunk scores above 0.70
  • Source filter to narrow before searching
  • Searchable query history
  • Chunk viewer with keyboard navigation
  • Export to JSON · CSV · Markdown · BibTeX · RIS · CSL-JSON · Obsidian vault

📥 Ingest

  • 12 file formats: .pdf .docx .md .txt .csv .json .jsonl plus .html .pptx .xlsx .epub .odt
  • SQLite ingest — single table or a custom SQL query with JOINs
  • Recursive / sentence / word chunking
  • Incremental — SHA-256 hash check, only changed rows / files re-processed
  • Auto-ingest folders and SQLite files on change (debounced)

⚙️ Manage & customise

  • All embedding models — MiniLM, BGE, multilingual, Nomic long-context, plus any HuggingFace / FastEmbed / Ollama model by name
  • Custom OpenAI-compatible providers for corporate gateways (Azure OpenAI, LiteLLM, vLLM)
  • Custom embedding presets
  • Per-project defaults for chunk size, overlap, embedding model, max results, min score
  • Collections manager — rename, describe, purge, bulk-delete, re-ingest
  • Light · dark · auto themes, 16 accent colours, 3 home backgrounds
  • Keyboard-first — press ? for shortcuts

Remex is free and open-source. Every feature ships in the box — no tiers, no license keys, no payment required.



Privacy & data flow

Remex is local-first. Here's exactly what touches the network:

Operation Where it runs Network?
File / SQLite extraction & chunking 🖥 Local ✗ None
Default embedding (all-MiniLM-L6-v2 or any FastEmbed model) 🖥 Local (ONNX on CPU) ✗ None
Vector storage (ChromaDB) 🖥 Local (./remex_db/) ✗ None
Vector search (AI Answer off) 🖥 Local ✗ None
AI Answer (on) ☁ Your AI provider ✓ Question + top-N retrieved chunks sent to the endpoint you configured
OpenAI embedding model (opt-in) ☁ OpenAI ✓ Document text sent to OpenAI during ingest
API key storage 🔐 OS keyring ✗ Never on disk in plaintext, never transmitted except as the auth header on requests you initiate
Sidecar HTTP listener 127.0.0.1 loopback only ✗ Not reachable from the LAN

[!IMPORTANT] Remex itself has no analytics, no telemetry, and no controlled servers in the request path. The only outbound traffic is to the AI provider you yourself configured — and only when AI Answer is enabled or you submit a query in AI mode.

For zero data egress, point AI Answer at Ollama (local) or a self-hosted vLLM/TGI via a Custom Provider.



CLI quick start

# Scaffold a project (creates ./docs, remex.toml, .gitignore entries)
remex init

# Ingest a folder of documents
remex ingest ./docs

# Semantic search
remex query "how does authentication work?"

# AI-synthesised answer (requires ANTHROPIC_API_KEY, OPENAI_API_KEY, or a running Ollama)
remex query "how does authentication work?" --ai

Command reference

Command Description
remex init [path] Scaffold docs/, remex.toml, .gitignore entries
remex ingest <dir> Ingest files from a directory
remex ingest-sqlite <db> Ingest rows from a SQLite table or SQL query
remex query <text> Semantic search; add --ai for an AI answer
remex sources List ingested source paths
remex stats Show chunk and source counts
remex delete-source <path> Remove all chunks for a source
remex purge Remove chunks whose source file no longer exists
remex reset Wipe a collection
remex list-collections List collections in a database
remex serve Start the FastAPI sidecar on localhost:8000
remex <command> --help    # full option reference for any command

Use as a library

from remex import ingest, query

# Ingest a folder
result = ingest("./docs", collection_name="my-kb")
print(f"{result.chunks_stored} chunks stored")

# Search
results = query("how does auth work?", collection_name="my-kb")
for r in results:
    print(f"[{r.score:.3f}] {r.source}{r.text[:120]}")


Configuration

Drop a remex.toml in your project root (or run remex init):

[remex]
db              = "./remex_db"
collection      = "my-kb"
embedding_model = "all-MiniLM-L6-v2"

# chunk_size     = 768          # characters per chunk (512–1024 works well)
# overlap        = 150          # ~20% overlap preserves context at boundaries
# min_chunk_size = 50           # discard chunks shorter than this
# chunking       = "recursive"  # "recursive" (default) | "sentence" | "word"

CLI flags always override remex.toml. Studio writes per-project defaults via Settings → General → Project defaults when a project is open.



Embedding models

Preset Model Size Notes
Light (default) all-MiniLM-L6-v2 22 MB Fast, good accuracy
Balanced intfloat/e5-base-v2 438 MB Better retrieval quality
Multilingual paraphrase-multilingual-MiniLM-L12-v2 470 MB 50+ languages
Large BAAI/bge-large-en-v1.5 1.3 GB Best English accuracy
E5 Large intfloat/e5-large-v2 1.3 GB Strong retrieval benchmark
Long ctx nomic-ai/nomic-embed-text-v1.5 547 MB 8 192-token context

Any SBERT, HuggingFace, or Ollama embedding model works — type the model name into the picker. Add your own to Settings → AI & Server → Embedding presets.

[!NOTE] Score interpretation. ChromaDB returns L2² distance; Remex converts it to score = 1 / (1 + distance) so values lie in (0, 1]. For normalised embeddings (BGE, MiniLM, Nomic, OpenAI): 0.75+ is near-paraphrase, 0.65–0.75 is strongly relevant, 0.50–0.55 is borderline noise.



Under the hood

┌────────────────┐   Tauri IPC    ┌────────────────────┐   HTTP/127.0.0.1   ┌──────────────────┐
│  Studio (TS)   │ ─────────────► │  Rust shell        │ ────────────────► │  Python sidecar  │
│  React + Vite  │ ◄───────────── │  (lib.rs)          │ ◄──────────────── │  FastAPI         │
└────────────────┘                └────────────────────┘                    └────────┬─────────┘
                                                                                    │
                                                                                    ▼
                                                                          ┌──────────────────┐
                                                                          │  ChromaDB        │
                                                                          │  FastEmbed/ONNX  │
                                                                          │  ./remex_db/     │
                                                                          └──────────────────┘
  • Studio — Tauri 2, React 18, Zustand, react-query, shadcn/Radix UI
  • Sidecar — FastAPI on 127.0.0.1, uv-managed venv in %APPDATA%\com.remex.studio\
  • Indexing — ChromaDB persistent store, FastEmbed ONNX runtime, recursive / sentence / word chunker
  • Secrets — OS keyring via the keyring crate (Windows Credential Manager · macOS Keychain · libsecret)


Build from source

[!TIP] Studio requires Rust, Node.js 20+, and the Tauri prerequisites for your OS.

# Python CLI
pip install -e ".[dev]"
pytest

# Studio (dev server with hot-reload)
cd studio
npm install
npm run tauri dev

# Studio (production build)
npm run tauri build

See studio/README.md for the full Studio build guide.



Changelog · Contributing · Licensing · Issues · GitHub

Python CLI: Apache-2.0 · Studio (v1.3.0+): FSL-1.1-MIT — see LICENSES.md

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

remex_cli-2.0.0.tar.gz (2.1 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

remex_cli-2.0.0-py3-none-any.whl (65.3 kB view details)

Uploaded Python 3

File details

Details for the file remex_cli-2.0.0.tar.gz.

File metadata

  • Download URL: remex_cli-2.0.0.tar.gz
  • Upload date:
  • Size: 2.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for remex_cli-2.0.0.tar.gz
Algorithm Hash digest
SHA256 3b11022e285ea6fc7300694f67c04528c67ff7e30018f24649f7abe4ba41d246
MD5 44b4f9c493c9f8810edea13761d0d6d2
BLAKE2b-256 0ac21fac26c9bf85ec26ee63f6e381c8639a3b9db6c867d16b5a08d763e8a10c

See more details on using hashes here.

Provenance

The following attestation bundles were made for remex_cli-2.0.0.tar.gz:

Publisher: publish.yml on adm-crow/remex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file remex_cli-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: remex_cli-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 65.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for remex_cli-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 309b7bb20260659727e69152f2864620b65905e2ac3d691ef2ced14aad16da3f
MD5 b605fed56d4b99dd3e96b21a49a1fb12
BLAKE2b-256 ac04bceaa93ffec526b1d96be1605816033fcc52e770826deb3a640bde67e05b

See more details on using hashes here.

Provenance

The following attestation bundles were made for remex_cli-2.0.0-py3-none-any.whl:

Publisher: publish.yml on adm-crow/remex

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page