Local-first document retrieval. Your data never leaves your disk.
Project description
Search your own documents locally. No server, no sign-up, no data leaves your machine.
Who is this for? Teams and partners who need a working document-search demo on their own hardware in minutes — not months.
- Private — documents stay on your machine, no cloud calls, no tracking
- Zero config —
pip install, two commands, searching in under a minute - Extensible — plug in custom extractors, embedders, and backends
Alcove is free to use and we do not want your data. No benchmark claims — optimized for clarity and speed of setup.
Get started
Requires: Python 3.9+ — download at python.org if you don't have it.
pip install alcove-search
alcove seed-demo # download a sample corpus and build a local index
alcove serve # open http://localhost:8000
Open http://localhost:8000 in your browser. Upload your own files or search the sample corpus. No coding required after this point.
Trust model
- Local disk persistence — no hosted control plane required
- Chroma anonymized telemetry disabled by default (
ANONYMIZED_TELEMETRY=False) - You choose what data enters your local index
- We do not want your data
See Security for the full trust-boundary diagram.
For developers
CLI
alcove serve # start web UI + API server
alcove ingest ./docs/ # ingest documents from a directory
alcove query "search..." # CLI retrieval
alcove seed-demo # fetch and index demo corpus
alcove plugins # list installed plugins
From source
git clone https://github.com/Pro777/alcove.git
cd alcove
pip install -e ".[dev]"
Make targets
make setup # create .venv, install deps
make serve # start web UI
make seed-demo # fetch demo corpus and build local index
make ingest # build chunks from data/raw
make index # write vectors to local Chroma
make query Q="..." # run local retrieval
make smoke # deterministic end-to-end check + tests
API
GET / # web UI (search + file upload)
GET /search # search results page (server-rendered)
POST /query # JSON retrieval {"query":"...","k":3}
POST /ingest # file upload (multipart)
GET /health # readiness check
Embedder options
By default Alcove uses a deterministic hash embedder (no network, no model download).
For semantic similarity, set EMBEDDER=sentence-transformers in .env:
EMBEDDER=sentence-transformers make index
make query Q="What is liberty?"
The all-MiniLM-L6-v2 model (~80MB) downloads on first use. Each embedder type uses a separate collection, so switching embedders requires re-indexing but won't corrupt existing data.
Vector backend
Alcove supports two local vector backends:
| Backend | Env value | Default path | Notes |
|---|---|---|---|
| ChromaDB | chromadb (default) |
./data/chroma |
Mature, full-featured |
| zvec | zvec |
./data/zvec |
Lighter-weight, suited for desktop apps |
Set in .env:
VECTOR_BACKEND=chromadb # or zvec
ZVEC_PATH=./data/zvec # only used when VECTOR_BACKEND=zvec
Both backends are local-only and store data on disk. No cloud calls.
Architecture
data/raw/* → data/processed/chunks.jsonl → data/chroma/* → query results
(ingest) (index) (query)
- Ingest —
alcove/ingest/extracts PDF, EPUB, TXT, HTML, Markdown, CSV, JSON, JSONL, and DOCX into normalized JSONL chunks - Index —
alcove/index/embeds chunks and writes vectors to the configured backend - Query —
alcove/query/retrieves from the local vector store via CLI or API
See Architecture for details.
Documentation
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file alcove_search-0.2.0.tar.gz.
File metadata
- Download URL: alcove_search-0.2.0.tar.gz
- Upload date:
- Size: 95.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3aead28e5b1ff55b30846791105391a555362be2ebfaf808ab7f356459eddcef
|
|
| MD5 |
8550169acc0f2d696c9bc48fed6b0029
|
|
| BLAKE2b-256 |
23dde3baba70bbd9772452455ccbefb4af482b866c9550fff00d8e555bd1680f
|
Provenance
The following attestation bundles were made for alcove_search-0.2.0.tar.gz:
Publisher:
publish.yml on Pro777/alcove
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
alcove_search-0.2.0.tar.gz -
Subject digest:
3aead28e5b1ff55b30846791105391a555362be2ebfaf808ab7f356459eddcef - Sigstore transparency entry: 1052564140
- Sigstore integration time:
-
Permalink:
Pro777/alcove@894d420020007ecb28e13f5aae6de4c8322d7f3f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Pro777
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@894d420020007ecb28e13f5aae6de4c8322d7f3f -
Trigger Event:
push
-
Statement type:
File details
Details for the file alcove_search-0.2.0-py3-none-any.whl.
File metadata
- Download URL: alcove_search-0.2.0-py3-none-any.whl
- Upload date:
- Size: 20.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
38cf0ddbac79585b182eda28f8f6e21f94822a4344c2584456dbbe7f362a33e4
|
|
| MD5 |
eb018872062b76ba20abaf583363d048
|
|
| BLAKE2b-256 |
d2e1398c2e16b0d9313b432cf1c65ed823b85808de4a692fa0f0560b0bd5a7b5
|
Provenance
The following attestation bundles were made for alcove_search-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on Pro777/alcove
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
alcove_search-0.2.0-py3-none-any.whl -
Subject digest:
38cf0ddbac79585b182eda28f8f6e21f94822a4344c2584456dbbe7f362a33e4 - Sigstore transparency entry: 1052564148
- Sigstore integration time:
-
Permalink:
Pro777/alcove@894d420020007ecb28e13f5aae6de4c8322d7f3f -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Pro777
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@894d420020007ecb28e13f5aae6de4c8322d7f3f -
Trigger Event:
push
-
Statement type: