Turn your codebase into a searchable knowledge base — ask questions, get grounded answers.
Overview · Install · Quickstart · CLI Reference · Architecture · Docs
Beta. Core features are stable and the API is settling — no breaking changes planned for the next few releases. First stable release targeted for late July / early August 2026. Known issues are documented up front; contributions (especially docs) are welcome.
Eulix builds a structured model of your codebase — symbols, call graphs, control flow, and semantic embeddings — then answers questions about it through a multi-layer retrieval pipeline, in well under a second once warm.
Every answer is grounded in actual code structure, not a nearest-neighbor guess. Retrieval gaps are surfaced explicitly instead of papered over with hallucination.
Your code never leaves your machine. Parsing, indexing, and reasoning all run locally by default. Cloud LLMs are supported, but strictly opt-in.
- Grounded, not guessed. A structured knowledge base — symbols, call graphs, control flow — comes before any retrieval, so answers are backed by real code structure.
- Local-first. Nothing leaves your machine unless you explicitly configure a cloud provider.
- Any LLM. OpenAI, Anthropic, Gemini, Ollama, LM Studio, or any OpenAI-compatible endpoint — one config line to switch.
- Small models, real results. With accurate retrieval as context, a local 7B model can perform exceptionally well for code understanding tasks
- Built for scale. Designed for multi-million-LOC repos, monorepos, and legacy systems spanning several languages.
| Component | Benchmark |
|---|---|
| Parser (Rust, 12 threads) | Millions of LOC/min, parallel parsing with Rayon |
| Embedder (Python, PyTorch) | ~35 min for 1.5GB of parsed JSON, 768-dim model, CUDA/ROCm accelerated |
| Embedding index (mmap) | O(1) lookup via IVF — vectors.bin + embeddings.bin loaded at runtime |
| Retrieval (Go, warm) | <50ms end-to-end, no model reload |
| Retrieval (Go, cold) | ~7.4s first query — PyTorch init, model load, cache warmup |
Tested on an AMD Ryzen 5 5600X: 7.4s cold query profile, 95.48% L1 hit rate, IPC 1.26, 16.5B instructions.
Cold start is a one-time cost, not your query latency. Run the embedder as a persistent daemon (
eulix_embed serve) or fire a dummy warm-up query at startup, and every subsequent query lands in under 50ms.
1. Index your codebase
eulix analyzeThree pipelines run over your source:
- Symbol index — every function, class, variable, and its location
- Call graphs — inter-procedural call relationships with cross-file resolution
- Semantic embeddings — per-symbol vectors, written as
embeddings.bin(tensors) +vectors.bin(IVF index for O(1) mmap lookup)
2. Ask questions
eulix chatEvery query runs through a four-stage retrieval strategy — exact symbol lookup, BM25 keyword search, semantic vector search, and call graph expansion — then results are re-ranked with MMR, budget-allocated for context, and passed to the LLM with a structured chain-of-thought prompt.
Three binaries, one pipeline:
| Binary | Language | Role | License |
|---|---|---|---|
eulix |
Go | Orchestrator — CLI, config, retrieval pipeline, LLM integration, TUI | GPLv3 |
eulix_parser |
Rust | Static analyzer — symbols, call graphs, control flow, complexity | GPLv3 |
eulix_embed |
Python | Embedder — transformer models via PyTorch, CUDA/ROCm, bucket sharding | Apache 2.0 |
Deeper dives: system overview · parser internals · query pipeline · query package · cache architecture · embedder internals
Stable: Python · Go · C · C++ · Rust · TypeScript Not Supported: JavaScript · Perl · PHP · Java
- Onboarding — understand what a module does without reading every file
- Debugging — trace execution flow and caller/callee chains through unfamiliar code
- Refactoring — see the blast radius of a change before you make it
- Security audits — find every caller of a sensitive function
- Architecture review — map how components actually interact at the call graph level
Requirements
- Go 1.23+
- Rust (stable)
- Python 3.10–3.11
uv(for venv creation and Python version management)- PyTorch installed for your platform, before running the installer
Linux / macOS
curl -fsSL https://raw.githubusercontent.com/nurysso/eulix/main/install.sh | bashWindows (requires Visual Studio Build Tools, C++ workload, for the Rust linker)
Invoke-WebRequest -Uri "https://raw.githubusercontent.com/nurysso/eulix/main/install.ps1" -OutFile "$env:TEMP\install.ps1"
powershell -ExecutionPolicy Bypass -File "$env:TEMP\install.ps1"Full platform-by-platform setup: docs/installation.md
cd your-project
eulix init # initialize eulix in the current directory
eulix analyze # parse + embed the codebase, build the knowledge base
eulix chat # ask questions, interactivelyTurn your codebase into a searchable book. Ask questions about your code,
get accurate answers using local/cloud ML and LLMs.
| Command | Description |
|---|---|
init |
Initialize eulix in the current directory |
analyze |
Analyze codebase and generate the knowledge base |
chat |
Start the interactive chat interface |
query |
Build a context prompt for LLM queries, or answer non-LLM queries directly |
config |
Manage eulix configuration (LLM provider, model, paths) |
history |
Browse past queries interactively |
cache |
Manage cache entries |
checksum |
Generate a checksum without running a full analyze |
glados |
Validate the knowledge base and embedding sizes for errors |
embed |
Run the eulix_embed pipeline via the Python venv |
version |
Show versions of eulix, eulix_parser, and eulix_embed |
aspirine |
Attempt to repair embeddings.bin and the knowledge base — diagnostic/test tooling, not for routine use |
aspirineis a recovery tool for a corrupted knowledge base or embedding file during development and testing. It isn't part of the normal workflow — if you find yourself reaching for it in production, please open an issue.
eulix_parser [OPTIONS] --root <ROOT> --prism <PRISM>
| Flag | Description |
|---|---|
-r, --root <ROOT> |
Project root directory |
-o, --output <OUTPUT> |
Output path for the knowledge base [default: knowledge_base.json] |
-t, --threads <THREADS> |
Parallel threads [default: 4] |
-l, --languages <LANGUAGES> |
Languages to parse, comma-separated or all [default: all] |
-p, --prism <1/2> |
Call graph algorithm version |
--no-analyze |
Parse only, skip the analysis phase (faster) |
--euignore <PATH> |
Custom .euignore file [default: <root>/.euignore] |
-v, --verbose |
Verbose output |
-V, --version |
Print version |
eulix_embed <COMMAND> [OPTIONS]
| Command | Description |
|---|---|
embed |
Generate embeddings for a knowledge base (default) |
query |
Embed a single query string, one-shot |
serve |
Long-lived stdin/stdout embedding server — avoids reloading the model per query |
compare |
Validate embeddings.bin against vectors.bin |
ijson-backend |
Report the active ijson C-backend |
version |
Print version information |
embed options
| Flag | Description |
|---|---|
-k, --kb-path <PATH> |
Path to knowledge base JSON [default: knowledge_base.json] |
-o, --output <DIR> |
Output directory [default: ./embeddings] |
-m, --model <NAME> |
HuggingFace model name |
-d, --device <DEVICE> |
cuda / mps / cpu [default: auto] |
-b, --batch-size <N> |
Batch size [default: auto] |
--max-chunk <N> |
Max chunk size in characters [default: 2000] |
--quantize |
SQ8 int8 quantization — 4x smaller embeddings.bin, ~1% quality loss |
-rcom, --remove-comments |
Strip comments/docstrings/license headers before embedding |
--save-json |
Also write embeddings.json (enables graph edge streaming) |
--debug |
Print debug info during the pipeline |
query options
| Flag | Description |
|---|---|
-q, --query <TEXT> |
Query text to embed |
-m, --model <NAME> |
HuggingFace model name |
-f, --format <FMT> |
json | binary [default: json] |
serve options
| Flag | Description |
|---|---|
-m, --model <NAME> |
HuggingFace model name [default: all-MiniLM-L6-v2] |
-d, --device <DEVICE> |
cuda / mps / cpu [default: auto] |
-b, --batch-size <N> |
Batch size for batched requests [default: auto] |
Supported embedding models: sentence-transformers/all-MiniLM-L6-v2 · BAAI/bge-small-en-v1.5 · BAAI/bge-base-en-v1.5 — see the model selection guide.
- MCP server — plug Eulix into any editor or agent via Model Context Protocol
- Interactive call graph visualization
- Architecture-aware documentation generation, grounded in call flow
- Code navigation — symbol jump, reference finder, caller/callee explorer
- JavaScript and Java support
| Doc | Description |
|---|---|
| Architecture Overview | System design and data flow |
| Parser Internals | How eulix_parser works |
| Query Pipeline | End-to-end query flow and retrieval |
| Query Package | Comprehensive query system documentation |
| Context Builder | Multi-layer retrieval and MMR selection |
| Classifier | Intent recognition and routing |
| Cache Architecture | Caching layer design |
| Embedding Pipeline | Embedder internals |
| Parser Architecture | Detailed parser design and implementation |
| Known Issues | Current limitations |
| Installation Guide | Detailed platform setup |
| Model Selection | Recommended embedding and LLM models |
Open an issue before submitting a pull request for anything non-trivial — happy to align on approach first. Documentation contributions are especially welcome; several sections are still catching up to the code.
eulixandeulix_parser— GNU General Public License v3.0eulix_embed— Apache License 2.0