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. Pass ":memory:" for an ephemeral database, or a directory path for a persistent one. The first argument to connect is the path; dimension is the embedding width.
import elips
engine = elips.connect(":memory:", dimension=128)
arena = engine.arena("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
Use RecordInput with the modern wrapper, or callplace_document() on a vault for the low-level API. Both accept text plus typed metadata.
arena.write_many([
elips.RecordInput(text="alpha design note", meta={"kind": "design"}),
elips.RecordInput(text="beta incident runbook", meta={"kind": "ops"}),
])Query
probe_text runs a text-first search; probe_hybrid fuses a vector with text; probe takes a raw vector. Each returns typed Hit rows with distance, payload, and the original document.
for hit in arena.probe_text("alpha", top=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 vaults, records, and lineage.
- Architecture — how the planner, indexes, and persistence layer compose.
- EQL — the declarative query language.