Skip to content

Memory Layer & Vector Store

Umbra maintains a single SQLite database shared across all your projects. There are no per-project .sqlite files.

  • Path: ~/.umbra/main.sqlite (or $UMBRA_HOME/main.sqlite)
  • Mode: WAL (PRAGMA journal_mode = WAL) for concurrent reads
  • Vector extension: sqlite-vec loaded at connection time

metadata table — general-purpose key-value store, scoped by project_path and namespace. Used for settings, cached values, and any structured data that doesn’t need semantic search.

vectors table + per-project virtual tables — each project gets its own vec_project_{key} virtual table backed by sqlite-vec. Rows in vectors hold the content, source reference, session ID, and the model that produced the embedding. The virtual table holds the raw float vectors for KNN search.

Embeddings are generated locally via @huggingface/transformers using the onnx-community/all-MiniLM-L6-v2-ONNX model (384 dimensions). The model weights are downloaded automatically on first use and cached in ~/.umbra/cache/transformers/. No data leaves your machine for embedding.

To check embedding status:

Terminal window
umbra doctor # shows "SQLite readiness" with model name, cache path, and ready=true/false

Set embeddings.autoDownloadEnabled to false in ~/.umbra/settings.json if you want to pre-provision model weights manually or run in an air-gapped environment.