ELIPS runs inside your process. No daemon, no network hop, no sidecar — a database is a directory on disk and an open handle in memory. This page walks the shortest path from cmake to a first text-first query.
Install
Build the core and the Python module from source. The native binary is required even when you only use Python — the bindings are a thin layer over the C++23 runtime.
cmake -S . -B build -G Ninja \
-DCMAKE_BUILD_TYPE=Release \
-DELIPS_BUILD_PYTHON=ON
cmake --build build -j
export PYTHONPATH=$PWD/bindings/pythonSee Installation for the full toolchain matrix and platform notes.
Your first database
An ELIPS database is identified by a path. Use elips.Client for an ephemeral in-memory database, or elips.PersistentClient(path) for a persistent one. dimension is the embedding width.
import elips
client = elips.Client(dimension=128)
docs = client.get_or_create_collection("documents")New databases attach the built-in local text embedder automatically. Disable that with use_default_text_embedder=False when you bring your own.
Ingest documents
Call add() with Chroma-style columns (documents, metadatas, ids), or pass RecordInput objects. Both accept text plus typed metadata.
docs.add(
documents=["alpha design note", "beta incident runbook"],
metadatas=[{"kind": "design"}, {"kind": "ops"}],
)Query
query(query_texts=...) runs a text-first search; passing both query_embeddings and query_texts fuses vector and text; query(query_embeddings=...) takes a raw vector. Each returns typed Hit rows with distance, metadata, and the original document.
for hit in docs.query(query_texts="alpha", n_results=2):
print(hit.key, hit.distance, hit.text, hit.meta)Where to go next
- Configuration — dimension, metric, durability, embedders.
- Core concepts — the mental model behind collections, records, and lineage.
- Architecture — how the planner, indexes, and persistence layer compose.
- EQL — the declarative query language.