Skip to main content

DeskSearch

DeskSearch

Search your files by meaning. Faster than Spotlight. 100% private.

0.83ms search · 13MB binary · 100% offline · 50k+ files · 10× ONNX speedup

DeskSearch Demo


DeskSearch is a local semantic search engine that understands what you're looking for — not just the words you type. Index your documents, code, and emails in seconds. Search in under a millisecond. Everything stays on your machine.

Available as a Python package (pip install desksearch) and a standalone Rust binary (13MB, zero dependencies).

DeskSearch Web UI


Features

Feature What it means
🔍 Semantic search Finds "Q3 earnings" when you search "quarterly revenue" — understands meaning, not just keywords
⚡ Sub-millisecond search 0.83ms p50 latency powered by Starbucks 2D Matryoshka embeddings
🔒 100% private All processing runs locally. No cloud. No telemetry. No data ever leaves your machine
📄 30+ file types PDF, DOCX, PPTX, XLSX, code (20+ languages), email, Jupyter notebooks, archives
👁 Live reindexing Built-in file watcher auto-detects changes — your index is always current
🎨 Beautiful web UI React frontend with dark mode, live search, file preview, and keyboard shortcuts
🦀 Rust core 13MB self-contained binary with PDF/DOCX/PPTX/XLSX parsers, hybrid BM25+dense search, embedded frontend
☕ 3 speed tiers Fast (2-layer, 32d) · Middle (4-layer, 64d) · Pro (6-layer, 128d) — you pick the trade-off
🔌 Connector plugins Local files, email (.eml/.mbox), Chrome bookmarks, Slack exports — extensible architecture
⚙️ ONNX acceleration 10× embedding speedup (171 chunks/sec) with INT8 quantization support
📊 Advanced filters Filter by file type, date range, size · Sort by relevance, date, size, name · Export as JSON/CSV/text
⭐ Favorites & recents Bookmark important files and track recently opened documents

Quick Start

Python

pip install desksearch
desksearch
# → opens http://localhost:3777 with onboarding wizard

On first run, DeskSearch auto-downloads the Starbucks embedding model and exports an optimised ONNX (INT8) version. This takes ~30 seconds once; subsequent starts are instant.

For full Starbucks model support (auto-export), also install torch:

pip install desksearch[full]   # includes torch + onnx for auto-export

Rust

curl -fsSL https://github.com/wshuai190/desksearch/releases/latest/download/desksearch -o desksearch
chmod +x desksearch
./desksearch
# → opens http://localhost:3777

On first run, DeskSearch walks you through an onboarding wizard to pick folders and a speed tier. After that, one command is all you need.



CLI Examples

# Semantic search from the terminal
desksearch search "machine learning papers"
desksearch search "budget spreadsheet" --type xlsx --json

# Index specific folders
desksearch index ~/Projects ~/Research

# Check index health
desksearch status
desksearch doctor            # full health check

# Manage watched folders
desksearch folders add ~/Notes
desksearch folders list

# Switch speed tier
desksearch config set search_speed pro

# Run as a background daemon
desksearch daemon start
desksearch daemon install    # auto-start on login (macOS LaunchAgent)

# Benchmark your setup
desksearch benchmark --files 1000

All commands support --json for scripting and automation.


DeskSearch vs. Alternatives

DeskSearch Spotlight Everything Alfred
Search type Semantic + keyword Keyword Filename only Keyword
Understands meaning ✅ Yes ❌ ❌ ❌
File content search ✅ 30+ formats Limited ❌ Via plugins
Search latency ~1ms ~50ms ~1ms ~50ms
Privacy 100% local Local (Siri opt-in) Local Local
Code-aware ✅ 20+ languages Minimal ❌ ❌
Extensible Plugins + REST API ❌ ❌ Workflows
Open source ✅ MIT ❌ ❌ ❌
Cross-platform macOS, Linux macOS only Windows only macOS only

Powered by Starbucks Embeddings

DeskSearch uses the Starbucks 2D Matryoshka embedding model, which enables flexible layer × dimension truncation for speed/quality trade-offs.

Paper: Starbucks: Improved Training for 2D Matryoshka Embeddings Shengyao Zhuang*, Shuai Wang*, Fabio Zheng, Bevan Koopman, Guido Zuccon — ECIR 2026 (*equal contribution)

Unlike traditional embeddings that require fixed dimensions, Starbucks lets you choose both the number of transformer layers AND the embedding dimension at inference time — no retraining needed. DeskSearch leverages this to offer three speed tiers from a single model.

If you use DeskSearch or the Starbucks model in your research, please cite:

@inproceedings{wang2026starbucks,
  title={Starbucks: Improved Training for 2D Matryoshka Embeddings},
  author={Zhuang, Shengyao and Wang, Shuai and Zheng, Fabio and Koopman, Bevan and Zuccon, Guido},
  booktitle={ECIR},
  year={2026}
}

Architecture

DeskSearch runs hybrid retrieval — every query hits a Tantivy BM25 index and a FAISS dense vector index in parallel, then merges results via Reciprocal Rank Fusion (RRF). Embeddings come from the Starbucks 2D Matryoshka model with layer and dimension truncation, running on ONNX Runtime for 10× speedup over PyTorch (171 chunks/sec vs 17). The indexing pipeline parses files across 6 parallel workers, chunks at sentence boundaries, and embeds in batches of 256 for maximum throughput. A connector plugin system (v0.6.0) lets you pull in data from local files, email, Chrome bookmarks, and Slack exports via a unified API.

Your Files (PDF, DOCX, Markdown, Code, ...)
              │
              ▼  Parse → Chunk → Embed
   ┌──────────────────────────────────────┐
   │   30+ parsers → 512-char chunks      │
   │   → Starbucks 2D Matryoshka (ONNX)   │
   └───────────┬──────────────────────────┘
               │
       ┌───────┴────────┐
       ▼                ▼
  BM25 (Tantivy)   FAISS (dense)
  keyword index     semantic index
       │                │
       └───────┬────────┘
               ▼
    Reciprocal Rank Fusion
               │
               ▼
     Ranked Results + Snippets

Connectors (v0.6.0)

DeskSearch supports pluggable data connectors to index content from multiple sources:

Connector What it does
Local files File system scanning with scheduled sync and live re-indexing
Email Parse .eml and .mbox files with sender, subject, and date extraction
Chrome bookmarks Read your Chrome profile's bookmark hierarchy
Slack export Import Slack ZIP exports with username resolution

Manage connectors via the API (/api/connectors/v2/) or the web UI settings panel. The ConnectorRegistry handles discovery, configuration, and sync scheduling.


Speed Tiers

Tier Layers Dimensions Best for
fast 2 32 Large corpora, older hardware
middle 4 64 Default — balanced speed and quality
pro 6 128 Best accuracy, research use
desksearch config set search_speed pro

API

DeskSearch exposes a REST API on localhost:3777:

curl "http://localhost:3777/api/search?q=quarterly+revenue&limit=5"
curl "http://localhost:3777/api/status"
curl "http://localhost:3777/api/health"

Python SDK

from desksearch import DeskSearch

with DeskSearch() as ds:
    results = ds.search("quarterly revenue", limit=5)
    for r in results:
        print(f"{r.rank}. {r.filename} ({r.score:.3f})")
        print(f"   {r.snippet}\n")

Contributing

Contributions welcome. DeskSearch is MIT-licensed.

git clone https://github.com/wshuai190/desksearch.git
cd desksearch
pip install -e ".[dev]"
pytest

License

MIT © Shuai Wang

Metadata

Release files for desksearch 0.6.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for desksearch 0.6.5
File Size Uploaded Provenance Actions
desksearch-0.6.5.tar.gz 1.9 MB Without provenance Details for desksearch-0.6.5.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for desksearch 0.6.5
File Interpreter ABI Platform Actions
desksearch-0.6.5-py3-none-any.whl Python 3 none any Details for desksearch-0.6.5-py3-none-any.whl

Total release size: 2.1 MB

Release files / desksearch-0.6.5.tar.gz

Download URL desksearch-0.6.5.tar.gz
Size 1.9 MB
Tags Source
SHA-256 checksum
How to use checksums
271019ee45d5242f6705bda487aec37b6672b1a513ccfda4655c5b67aca2acce
BLAKE2b-256 checksum
How to use checksums
a08a5caf7d2f6716be36f6913ad710594571b93cd034a6f80b5f990b38c995e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / desksearch-0.6.5-py3-none-any.whl

Download URL desksearch-0.6.5-py3-none-any.whl
Size 263.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c89abbd6c6c49fd2544db5deba1f9ab14a291ff85c82f1f72eb6dbf43b649911
BLAKE2b-256 checksum
How to use checksums
ce5f40d688fa8a8aad1b5b72bd1f2f677e2d77329e7cd3ccdda2a850cc875586
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Security for desksearch 0.6.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page