A local semantic search tool for Linux. Ferret runs as a system tray app, watches your folders for file changes, indexes documents using a local AI embedding model, and lets you search your files by meaning — not just keywords — with a hotkey-triggered search bar.
Everything runs locally. No data leaves your machine.
- Semantic search — finds documents by meaning, not exact words
- Hotkey-triggered — press
Ctrl+Spaceanywhere to open the search bar - System tray — runs quietly in the background
- Supported formats —
.pdf,.docx,.txt,.md - OCR support — extracts text from scanned PDFs via pytesseract or PaddleOCR
- Local model — uses BGE-small-en (384-dim) via ONNX; no internet required
- SQLite storage — vectors stored locally via
sqlite-vec - Configurable — choose folders, indexing speed profile, and OCR engine from the settings dialog
- Go to the Releases page and download
ferret_<version>_amd64.deb - Double-click the file — Ubuntu Software Center will open and install it
- Launch Ferret from the application menu, or run
ferretin a terminal
The AI model (~120 MB) is bundled inside the package — no internet connection needed after installation.
OCR for scanned PDFs requires Tesseract, which is installed automatically as a dependency.
- Go to the Releases page and download
ferret_<version>_windows_setup.exe - Run the installer and follow the prompts
- Ferret appears in the Start menu
OCR for scanned PDFs on Windows requires Tesseract for Windows installed separately.
git clone https://github.com/YOUR_USERNAME/ferret.git
cd ferret
python3 -m venv venv
source venv/bin/activate
pip install -r requirements-core.txtpip install "optimum[exporters]"
optimum-cli export onnx --model BAAI/bge-small-en --task feature-extraction ~/ferret/models/bge-small-en/source venv/bin/activate
python main.pyThe app starts in the system tray. The database is auto-created at ~/ferret/ferret.db on first run.
- Open settings — right-click the tray icon and choose Settings
- Add folders — select folders you want Ferret to index
- Trigger indexing — right-click the tray icon and choose Re-index
- Search — press
Ctrl+Spaceto open the search bar, type a query, and press Enter
Settings are saved to config/settings.json. You can edit it manually or use the Settings dialog.
| Key | Default | Description |
|---|---|---|
indexed_folders |
[] |
Folders to index |
exclude_patterns |
["node_modules", ".git", "venv", "__pycache__"] |
Patterns to skip |
ocr_engine |
"pytesseract" |
OCR backend (pytesseract or PaddleOCR) |
indexing_workers |
4 |
Parallel indexing workers |
model_path |
~/ferret/models/bge-small-en |
Path to the ONNX model directory |
db_path |
~/ferret/ferret.db |
Path to the SQLite database |
Indexing speed profiles (selectable in Settings):
| Profile | Workers | Notes |
|---|---|---|
| Safe | 2 | Low resource usage |
| Balanced | 4 | Default, good for most laptops |
| Fast | 8 | For powerful desktops |
| Maximum | All cores | Uses every available CPU core |
ferret/
├── main.py # Entry point
├── core/
│ ├── extractor.py # Text extraction (PDF, DOCX, TXT, MD)
│ ├── indexer.py # Chunking, embedding, DB storage
│ ├── searcher.py # Vector search with orphan detection
│ ├── watcher.py # Filesystem change monitoring
│ └── hasher.py # SHA256 file fingerprinting
├── ui/
│ ├── searchbar.py # Frameless search bar (PyQt6)
│ ├── tray.py # System tray icon and menu
│ └── settings.py # Settings dialog
└── config/
└── settings.json # User config (auto-created, gitignored)
MIT