Feather DB
Embedded vector database + self-aligned context engine
Part of Hawky.ai — AI-Native Development Tools
Feather DB is an embedded vector database and living context engine — zero-server, file-based, with a built-in knowledge graph, adaptive memory decay, LLM agent connectors, and a self-aligned ingestion engine that organises data automatically.
What's New in v0.13–v0.16 — Ingestion, Memory, Claude & Fast Load (Phase 8)
| Capability | Version | Notes |
|---|---|---|
| Persisted HNSW graph | v0.16.0 | save() embeds the prebuilt graph (file format v9) so load() restores it instead of rebuilding — 5–25× faster cold load (48 ms vs 2.7s/13.4s on 40k×128 clustered) and deterministic serial-build recall (0.988). Falls back to rebuild for dirty DBs / old files; ~25% larger files. |
| Adaptive index capacity | v0.15.3 | HNSW indices start at 4096 elements and grow via resizeIndex() on demand instead of preallocating 1M — ~7.7× less RAM for many-namespace deployments (709→92 MB across 19 namespaces), no hard cap. |
| Parallel HNSW load | v0.13.0 | Graph rebuilt across a thread pool on open — ~4.7× faster load (7.6s→1.7s for 40k×128), identical recall. FEATHER_LOAD_THREADS to cap. Still used for old files / DBs with pending deletions. |
| Parallel batch ingest | v0.13.0 | DB.add_batch(ids, vecs, metas=None) builds the graph in parallel with the GIL released — ~3.4× faster bulk insert. |
| SIMD on x86 | v0.13.0 | SSE/AVX L2 kernels (runtime-dispatched) compiled on x86_64; arm64 uses -O3 NEON. FEATHER_SIMD=none|sse|avx|avx512. |
| In-RAM int8 quantization | v0.15.0 | set_int8_ram(modality, max_abs) stores vectors as int8 in memory — ~1.7× less RAM (227→129 MB at 60k×768), recall ~0.88. File format v8. |
| MCP connector for Claude | v0.14.0 | feather-serve exposes Feather as a persona context engine to Claude Desktop / Code — local .feather or remote Cloud API (--api-url). |
| Real embedders | v0.15.1 | feather-serve --embed-provider gemini|openai|voyage|cohere|ollama — semantic recall over a hosted instance (Gemini text-embedding-004 = native 768). |
# Bulk-ingest a persona's history fast (parallel HNSW build)
db.add_batch(ids, vecs, metas)
# Store vectors as int8 in RAM — ~1.7x less memory (opt-in, lossy)
db.set_int8_ram("text", max_abs=1.0)
# Claude Code → hosted Feather as a persona context engine (real embeddings)
GOOGLE_API_KEY=… claude mcp add feather -- feather-serve \
--api-url http://HOST:8000 --namespace persona --dim 768 --embed-provider gemini
What's New in v0.11–v0.12 — Query Performance & Compression (Phase 7)
| Capability | Version | Notes |
|---|---|---|
| Secondary metadata indexes | v0.11.0 | Inverted indexes on namespace_id / entity_id / attributes — namespace & attribute lookups go from O(n) scans to O(matches). New DB methods: ids_in_namespace, ids_for_entity, ids_with_attribute, namespace_size, list_namespaces. |
| Pre-filtered ANN search | v0.11.0 | search(filter=…) with a namespace/entity/attribute constraint now ranks exactly over the indexed candidate set, returning a complete top-k instead of HNSW's ef-bounded under-return — and is O(matches), so selective filters are faster. |
| Incremental auto-compaction | v0.11.0 | set_auto_compact(ratio) rebuilds a modality index once its deleted/total ratio crosses a threshold, reclaiming forget()/purge()'d vectors automatically. compact() also fixed to reclaim forgotten records and never resurrect purged ones. |
| On-disk int8 quantization | v0.12.0 | set_quantized(modality) persists vectors as int8 + per-vector scale (file format v7) — ~2.5–4× smaller .feather files, dequantized to float32 on load (search unchanged). |
# Pre-filtered exact search — reliably returns a full k even under a selective filter
f = FilterBuilder().namespace("acme").attribute("channel", "instagram").build()
results = db.search(query_vec, k=10, filter=f) # complete top-10, exact ranking
# Auto-compaction — reclaim deleted vectors past 20% dead
db.set_auto_compact(0.2)
# int8 on-disk compression — ~3x smaller files, opt-in per modality
db.set_quantized("text", True)
db.save() # persisted as int8 (format v7)
Scope note: int8 quantization reduces disk footprint and load I/O; the in-memory HNSW index remains float32. In-RAM int8 indexing is a future step.
What's New in v0.10 — Feather DB Cloud Edition
The feather-api/ package now ships a production-ready admin SPA + a
pluggable embedding service, so you can run Feather as a managed context
engine for downstream consumers (e.g. brand teams, agents, internal tools).
| Capability | Where | Notes |
|---|---|---|
| Atlas-style admin SPA | /admin/ route on the FastAPI server |
Custom HTML + Tailwind + Alpine.js, brand-aligned, zero build step |
| Pluggable embeddings | Settings → Embedding service | OpenAI · Azure OpenAI · Gemini · Voyage · Cohere · Ollama with curated model dropdowns |
| Ingest text | POST /v1/{ns}/ingest_text |
Server embeds via the configured provider, then stores — single call |
| Bulk import | POST /v1/{ns}/import |
JSON array of {id, vector?, metadata}; WAL-backed throttled saves for fast large loads, flush to compact — see bulk ops |
| Bulk delete | POST /v1/{ns}/records/batch_delete |
Delete many ids and/or a whole entity_id in one call (one save) — use instead of looping single DELETE |
Upload .feather |
POST /v1/admin/upload · Namespaces → Import |
Adopt a locally-built DB as a cloud namespace (graph + index intact) |
| Any-dimension namespaces | first vector or dim at create |
Each namespace adopts its own dim (384/768/1024/1536…), no silent padding — see dimensions |
| Filtered search | POST /v1/{ns}/search · Search tab |
Vector / keyword / hybrid, filtered by namespace_id, entity_id, and attributes |
| Hierarchy navigator | Namespace detail → Hierarchy tab | Brand → Channel → Campaign → AdSet → Ad → Creative tree from metadata.attributes |
| Marketing profile card | Record drawer | Auto-renders KPIs (CTR, ROAS, channel) when present |
| Cmd-K palette | Press ⌘K / Ctrl+K | Fuzzy search namespaces · id:123 to open a record · /seed, /import actions |
| Live observability | Overview screen | p50 / p95 / p99 latency, ops-per-minute sparkline, recent activity feed |
| Delete + purge + compact | Namespace header buttons | Bulk delete by ids/entity, PURGE by namespace_id, COMPACT to reclaim |
| Schema discovery | Namespace detail → Schema tab | Distinct attribute keys + type inference + sample values |
| Connection panel | Settings → Connection | Copy-paste cURL / Python / JS snippets pre-filled with your URL |
See docs/quickstart.md for a self-hosted setup walkthrough.
Guides: Vector dimensions · Bulk operations (import / delete / upload) · Integrations
Deployment note:
feather-api/runs single-tenant with one sharedFEATHER_API_KEY, and refuses to start without it — an unset key would leave every namespace readable and deletable by anyone who can reach the port. For a local no-auth run, setFEATHER_DEV_MODE=1explicitly. Multi-tenant key isolation + HTTPS are on the roadmap.
What's Inside
| Capability | Description |
|---|---|
| ANN Search | Sub-millisecond approximate nearest-neighbor search via HNSW |
| Multimodal Pockets | Text, image, audio vectors per entity under a single ID |
| Context Graph | Typed + weighted edges, reverse index, auto-link by similarity |
| Context Chain | One call: vector search + n-hop BFS graph expansion |
| Living Context | Recall-count stickiness — frequently accessed items resist temporal decay |
| Namespace / Entity / Attributes | Generic partition + subject + KV metadata for any domain |
| Graph Visualizer | Self-contained D3 force-graph HTML — fully offline, no CDN |
| LLM Agent Connectors | Claude, OpenAI, Gemini tool-use/function-calling with 14 Feather tools |
| MCP Server | feather-serve — connects Feather to Claude Desktop, Cursor, and any MCP client |
| LangChain / LlamaIndex | Drop-in FeatherVectorStore, FeatherMemory, FeatherRetriever adapters |
| Self-Aligned Context Engine | LLM-powered ingestion: auto-classifies, scores, links, and namespaces every record |
| Single-file persistence | .feather binary format (v9, persisted HNSW graph for fast cold load + optional int8 compression on-disk and in-RAM); v3–v8 files load transparently |
Installation
pip install feather-db # core
pip install "feather-db[all]" # + langchain, llamaindex, mcp extras
CLI (Rust):
cargo install feather-db-cli
Docker (official multi-arch image — amd64 + arm64):
docker run -d --name feather \
-p 8000:8000 \
-e FEATHER_API_KEY="feather-$(openssl rand -hex 16)" \
ghcr.io/feather-store/feather-api:latest
curl http://localhost:8000/health # → {"status":"ok"}
# Admin SPA: http://localhost:8000/admin/ · Swagger: http://localhost:8000/docs
Images are published to GHCR on every version tag by
.github/workflows/docker.yml. Pin a release in production (ghcr.io/feather-store/feather-api:<version>).
Build from source:
git clone https://github.com/feather-store/feather
cd feather
python setup.py build_ext --inplace
Quick Start
import feather_db
import numpy as np
# Open or create a database
db = feather_db.DB.open("context.feather", dim=768)
# Add a vector with metadata
meta = feather_db.Metadata()
meta.content = "User prefers dark mode"
meta.importance = 0.9
db.add(id=1, vec=np.random.rand(768).astype(np.float32), meta=meta)
# Semantic search
results = db.search(np.random.rand(768).astype(np.float32), k=5)
for r in results:
print(r.id, r.score, r.metadata.content)
db.save()
Self-Aligned Context Engine (v0.7.0)
The ContextEngine wraps DB with an LLM-powered ingestion pipeline. Drop in any text — the engine classifies it, scores it, links it to related records, and stores it in the right namespace. No schema to define upfront.
from feather_db import ContextEngine, ClaudeProvider
import numpy as np, hashlib
def embed(text: str) -> np.ndarray:
# replace with your real embedder
vec = np.zeros(768, dtype=np.float32)
for i, tok in enumerate(text.split()[:768]):
vec[i % 768] += 1.0
n = np.linalg.norm(vec)
return vec / n if n > 0 else vec
engine = ContextEngine(
db_path = "knowledge.feather",
dim = 768,
provider = ClaudeProvider(), # or OpenAIProvider, GeminiProvider, OllamaProvider, None
embedder = embed,
namespace = "myapp",
)
nid = engine.ingest(
"Competitor X launched a developer SDK with MIT license — 10k GitHub stars in 24 hours."
)
The engine automatically:
- Classifies entity type (
competitor_intel,user_feedback,strategy_brief, …) - Scores importance (0–1) and confidence (0–1)
- Assigns TTL and namespace
- Suggests and creates graph edges to related records
Works offline too — pass provider=None for a built-in heuristic classifier (no API key needed):
engine = ContextEngine(db_path="k.feather", dim=768, provider=None, embedder=embed)
Supported Providers
from feather_db import ClaudeProvider, OpenAIProvider, OllamaProvider, GeminiProvider
ClaudeProvider(model="claude-haiku-4-5-20251001") # Anthropic
OpenAIProvider(model="gpt-4o-mini") # OpenAI
OpenAIProvider(model="llama-3.3-70b-versatile", # Groq
base_url="https://api.groq.com/openai/v1",
api_key=GROQ_KEY)
OllamaProvider(model="llama3.1:8b") # Ollama (local, no key)
GeminiProvider(model="gemini-2.0-flash") # Google Gemini
All providers share the same LLMProvider interface — swap at any time without changing the rest of your code.
LLM Agent Connectors (v0.6.0)
Give any LLM agent native access to Feather DB via 14 built-in tools.
Claude (tool_use)
import anthropic
from feather_db import ClaudeConnector
connector = ClaudeConnector(db=db, embedder=embed)
client = anthropic.Anthropic()
messages = [{"role": "user", "content": "What competitor moves should I watch?"}]
reply = connector.run_loop(client, messages, model="claude-opus-4-6")
print(reply)
OpenAI / Groq / vLLM (function_calling)
from openai import OpenAI
from feather_db import OpenAIConnector
connector = OpenAIConnector(db=db, embedder=embed)
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Find records about onboarding friction"}],
tools=connector.tools(),
)
result = connector.handle(resp.choices[0].message.tool_calls[0].function.name,
resp.choices[0].message.tool_calls[0].function.arguments)
Available Tools (14)
| Tool | Description |
|---|---|
feather_search |
Semantic vector search |
feather_context_chain |
Vector search + graph BFS expansion |
feather_get_node |
Retrieve a single record by ID |
feather_get_related |
Get all graph-linked records |
feather_add_intel |
Store a new record with metadata |
feather_link_nodes |
Create a typed weighted edge |
feather_timeline |
Time-ordered records in a range |
feather_forget |
Drop a record by ID |
feather_health |
Database health report |
feather_why |
Explain why a record was retrieved |
feather_mmr_search |
Maximal marginal relevance search |
feather_consolidate |
Merge near-duplicate records |
feather_episode_get |
Retrieve an episode by ID |
feather_expire |
Purge records past their TTL |
MCP Server (v0.6.0)
Connect Feather DB to Claude Desktop, Cursor, or any MCP-compatible client:
pip install "feather-db[mcp]"
feather-serve --db knowledge.feather --dim 768
Add to claude_desktop_config.json:
{
"mcpServers": {
"feather": {
"command": "feather-serve",
"args": ["--db", "/path/to/knowledge.feather", "--dim", "768"]
}
}
}
All 14 tools become available to Claude Desktop immediately — no code required.
LangChain Integration (v0.6.0)
from feather_db.integrations import FeatherVectorStore, FeatherMemory, FeatherRetriever
# Drop-in VectorStore
store = FeatherVectorStore(db=db, embedder=embed)
retriever = store.as_retriever(search_kwargs={"k": 5})
# Semantic conversation memory with adaptive decay
memory = FeatherMemory(db=db, embedder=embed, k=5)
# context_chain retriever
retriever = FeatherRetriever(db=db, embedder=embed, k=5, hops=2)
LlamaIndex Integration (v0.6.0)
from feather_db.integrations import FeatherVectorStoreIndex, FeatherReader
# Index documents
index = FeatherVectorStoreIndex.from_documents(documents, db=db, embed_model=embed_model)
query_engine = index.as_query_engine()
response = query_engine.query("What is our retention strategy?")
# Load existing Feather DB as LlamaIndex Documents
reader = FeatherReader(db=db)
docs = reader.load_data()
Core Features
Multimodal Pockets
Each named modality gets its own independent HNSW index and dimensionality. A single entity ID can hold text, visual, and audio vectors simultaneously.
db.add(id=42, vec=text_vec, modality="text") # 768-dim
db.add(id=42, vec=image_vec, modality="visual") # 512-dim
db.add(id=42, vec=audio_vec, modality="audio") # 256-dim
results = db.search(query_vec, k=10, modality="visual")
Context Graph
Typed, weighted edges between records. Nine built-in relationship types plus free-form strings.
from feather_db import RelType
db.link(from_id=1, to_id=2, rel_type=RelType.CAUSED_BY, weight=0.9)
db.link(from_id=1, to_id=3, rel_type=RelType.SUPPORTS, weight=0.7)
edges = db.get_edges(1) # outgoing edges
incoming = db.get_incoming(2) # reverse index
db.auto_link(modality="text", threshold=0.85, rel_type=RelType.RELATED_TO)
Built-in types: related_to, derived_from, caused_by, contradicts, supports, precedes, part_of, references, multimodal_of.
Context Chain
One call that combines semantic search with n-hop BFS graph traversal:
result = db.context_chain(query=query_vec, k=5, hops=2, modality="text")
for node in result.nodes:
print(node.id, node.score, node.hop_distance)
for edge in result.edges:
print(edge.source_id, "->", edge.target_id, edge.rel_type)
Filtered Search
from feather_db import FilterBuilder
results = db.search(
query_vec, k=10,
filter=FilterBuilder()
.namespace("acme")
.entity("user_123")
.attribute("channel", "instagram")
.importance_gte(0.5)
.build()
)
When the filter constrains a namespace, entity, or attribute, Feather
resolves the candidate set from its secondary indexes and ranks exactly over
just those vectors — so a selective filter returns a complete top-k (no
ef-bounded under-return) and runs in O(matches).
Living Context / Adaptive Decay
from feather_db import ScoringConfig
cfg = ScoringConfig(half_life=30.0, weight=0.3, min=0.0)
results = db.search(query_vec, k=10, scoring=cfg)
Formula:
stickiness = 1 + log(1 + recall_count)
effective_age = age_in_days / stickiness
recency = 0.5 ^ (effective_age / half_life_days)
final_score = ((1 - time_weight) * similarity + time_weight * recency) * importance
touch() is called automatically on every search hit.
Memory Layer (v0.6.0)
from feather_db import MemoryManager
mm = MemoryManager(db)
print(mm.health_report()) # cluster stats + stale records
diverse = mm.search_mmr(vec, k=10) # maximal marginal relevance
mm.consolidate(threshold=0.95) # merge near-duplicate records
mm.assign_tiers() # hot / warm / cold tiering by recall_count
Episodes (v0.6.0)
Group related records into named episodes:
from feather_db import EpisodeManager
em = EpisodeManager(db)
eid = em.begin_episode("onboarding_analysis")
em.add_to_episode(eid, node_id)
ep = em.get_episode(eid)
em.close_episode(eid)
Triggers & Contradiction Detection (v0.6.0)
from feather_db import WatchManager, ContradictionDetector
wm = WatchManager(db)
wm.watch(namespace="acme", callback=lambda record: print("New:", record.content))
cd = ContradictionDetector(db)
conflicts = cd.check(new_meta) # returns list of conflicting record IDs
Namespace / Entity / Attributes
meta = feather_db.Metadata()
meta.namespace_id = "acme"
meta.entity_id = "user_123"
meta.set_attribute("channel", "instagram") # use this, NOT meta.attributes['k'] = v
val = meta.get_attribute("channel")
Domain profiles for typed helpers:
from feather_db import MarketingProfile
p = MarketingProfile()
p.set_brand("nike")
p.set_user("user_8821")
p.set_channel("instagram")
p.set_ctr(0.045)
meta = p.to_metadata()
Graph Visualization
from feather_db.graph import visualize, export_graph
visualize(db, output_path="/tmp/graph.html") # self-contained D3 HTML
data = export_graph(db, namespace_filter="nike") # Python dict for D3/Cytoscape
Rust CLI
feather add --db my.feather --id 1 --vec "0.1,0.2,0.3" --modality text
feather search --db my.feather --vec "0.1,0.2,0.3" --k 5
feather link --db my.feather --from 1 --to 2
feather save --db my.feather
Performance
| Metric | Value |
|---|---|
| Add rate | 2,000–5,000 vectors/sec |
| Search latency p50 (k=10, 500K × 128-dim, real SIFT data) | 0.19 ms |
| Search latency p99 (k=10, 500K × 128-dim, real SIFT data) | 0.13 ms @ ef=10, 1.03 ms @ ef=200 |
| Recall@10 (500K × 128-dim, ef=50, real SIFT) | 0.972 |
| Max vectors per modality | unbounded — capacity grows adaptively (starts 4096) |
| HNSW params | M=16, ef_construction=200, ef=50 (default in v0.8.0) |
| File format | Binary .feather v9 (persisted HNSW graph: 5–25× faster cold load; optional int8: ~3× smaller on disk, ~1.7× less RAM) |
SIMD (AVX2/AVX512) optimizations are available in space_l2.h. Enable with -DUSE_AVX -march=native in setup.py.
Reproducible benchmark harness lives in bench/. Run any benchmark with python -m bench run <scenario>.
Benchmarks
Memory benchmark — LongMemEval (Xu et al., 2024)
500-question end-to-end memory QA benchmark, the standard for long-term memory in chat assistants. Full report: docs/benchmarks/longmemeval.md.
| Run | Variant | Answerer | Overall | Notes |
|---|---|---|---|---|
| Feather DB v0.8.0 + decay | S | gpt-4o | 0.693 | best run; same model as Supermemory |
| Feather DB v0.8.0 + decay | S | gemini-2.5-flash | 0.657 | cheap-tier; ~$2.40 per full run |
| Feather DB v0.8.0 + decay | oracle | gemini-2.5-flash | 0.670 | retrieval-easy ceiling |
| System | Variant | Answerer | Overall |
|---|---|---|---|
| Feather DB v0.8.0 + decay | S | gemini-2.5-flash | 0.657 |
| Zep (graphiti) | S | gpt-4o-mini | 0.638 |
| Full-context GPT-4o (paper "ceiling") | S | gpt-4o + CoN | 0.640 |
| Full-context GPT-4o-mini | S | gpt-4o-mini | 0.554 |
| Mem0 (prior algo) | S | gpt-4o-mini | 0.678 |
| Supermemory | S | gpt-4o | 0.816 |
Cost for the full Feather S run: ~$2.40 (Azure embeddings + Gemini answer + judge). Wall time 4.5 hours. 5 failures / 500 questions.
Reproduce:
python -m bench run longmemeval --dataset s --limit 0 \
--embedder openai --judge llm \
--judge-provider gemini --judge-model gemini-2.0-flash \
--answerer-provider gemini --answerer-model gemini-2.5-flash \
--decay-half-life 14 --decay-time-weight 0.4 --k 10
ANN benchmark — SIFT1M
Standard ANN benchmark. Full sweep results in bench/results/.
| Config | p50 | p99 | Recall@10 |
|---|---|---|---|
| 500K × 128, ef=10 | 0.07 ms | 0.13 ms | 0.774 |
| 500K × 128, ef=50 (default) | 0.19 ms | 0.23 ms | 0.972 |
| 500K × 128, ef=200 | 0.56 ms | 0.69 ms | 0.998 |
Cloud Deployment (Azure / Docker)
Feather DB ships with a production-ready FastAPI wrapper and the Atlas-style admin SPA (custom HTML + Tailwind + Alpine.js — no build step) you can deploy on any Linux VM. No clone needed — pull the official image:
curl -fsSLO https://raw.githubusercontent.com/feather-store/feather/master/feather-api/docker-compose.yml
FEATHER_API_KEY="feather-$(openssl rand -hex 16)" docker compose up -d
Or plain docker run:
docker run -d --name feather \
-p 8000:8000 \
-v feather-data:/data \
-e FEATHER_API_KEY="feather-$(openssl rand -hex 16)" \
ghcr.io/feather-store/feather-api:latest
(Contributors building from source: docker compose -f feather-api/docker-compose.yml up -d --build.)
| URL | Description |
|---|---|
http://<VM_IP>:8000/health |
Health check |
http://<VM_IP>:8000/docs |
Swagger / OpenAPI |
http://<VM_IP>:8000/admin/ |
Admin SPA — namespaces, search, graph, embedding settings |
Self-hosted walkthrough → docs/quickstart.md ·
Azure guide → docs/deploy-azure.md
Data is stored in a Docker named volume (
feather-data → /data) and persists across restarts and rebuilds.
Examples
| File | Description |
|---|---|
examples/context_engine_demo.py |
Self-Aligned Context Engine — all four providers + heuristic fallback |
examples/context_graph_demo.py |
Context graph — auto-link, context_chain, D3 HTML export |
examples/marketing_living_context.py |
Multi-brand namespace/entity/attribute filtering |
examples/feather_inspector.py |
Local HTTP inspector — force graph, PCA scatter, edit, delete |
Run:
python setup.py build_ext --inplace
python3 examples/context_engine_demo.py
# With a provider:
ANTHROPIC_API_KEY=sk-ant-... python3 examples/context_engine_demo.py
OLLAMA_MODEL=mistral:7b python3 examples/context_engine_demo.py
Architecture
[Generic Core — C++17]
feather::DB
├── modality_indices_ (unordered_map<string, ModalityIndex>) — one HNSW per modality
├── metadata_store_ (unordered_map<uint64_t, Metadata>) — shared metadata by ID
└── Methods: add, search, link, context_chain, auto_link, export_graph_json, …
[Python Layer — feather_db]
├── DB, Metadata, ContextType, ScoringConfig
├── Edge, IncomingEdge, ContextNode, ContextEdge, ContextChainResult
├── FilterBuilder — fluent search filter helper
├── DomainProfile — generic namespace/entity/attributes base class
├── MarketingProfile — digital marketing typed adapter
├── RelType — standard relationship type constants
├── graph.visualize() — D3 force-graph HTML exporter
├── MemoryManager — health reports, MMR, consolidate, tiering
├── WatchManager — namespace/entity watch callbacks
├── ContradictionDetector — conflict detection on ingest
├── EpisodeManager — grouped episode records
├── merge() — merge two .feather files
├── LLMProvider / ClaudeProvider / OpenAIProvider / OllamaProvider / GeminiProvider
├── ContextEngine — self-aligned LLM-powered ingestion pipeline
└── integrations/
├── ClaudeConnector — Claude tool_use with 14 Feather tools
├── OpenAIConnector — OpenAI/Groq/Mistral function_calling
├── GeminiConnector — Gemini function_calling + GeminiEmbedder
├── FeatherVectorStore / FeatherMemory / FeatherRetriever (LangChain)
├── FeatherVectorStoreIndex / FeatherReader (LlamaIndex)
└── mcp_server — feather-serve MCP endpoint
[Rust CLI]
feather-db-cli (FFI via extern "C" from src/feather_core.cpp)
File Format
[magic: 4B = "FEAT"] [version: 4B = 8]
--- Metadata Section ---
[meta_count: 4B]
for each record:
[id: 8B] [serialized Metadata including namespace/entity/attributes/edges]
--- Modality Indices Section ---
[modal_count: 4B]
for each modality:
[name_len: 2B] [name: N bytes]
[dim: 4B] [quantized: 1B] # on-disk int8 flag (v7+)
[int8_ram: 1B] [scale: 4B if int8_ram] # in-RAM int8 flag + global scale (v8+)
[persist_graph: 1B] # v9: 1 → prebuilt HNSW graph blob follows
if persist_graph: # fast cold load — no rebuild
[HNSW graph: header + base layer (vectors) + per-element link lists]
else:
[element_count: 4B]
for each element:
[id: 8B] then, per `quantized`:
0 → [float32 vector: dim * 4 bytes]
1 → [scale: 4B float] [int8 vector: dim bytes]
v3–v8 files load transparently (the quantized flag is read for v7+, the
int8_ram flag for v8+, the persist_graph flag for v9+); missing fields
default to empty. The graph is persisted only for a clean, non-on-disk-quantized
modality; otherwise load rebuilds it (parallel).
Known Limitations
| Issue | Detail |
|---|---|
| No concurrent writes | HNSW is not thread-safe for simultaneous adds |
| Soft deletes reclaimed on compaction | forget()/purge() mark vectors deleted; space is reclaimed by compact() or set_auto_compact(ratio) |
| int8 quantization (two kinds) | set_quantized() = smaller files; set_int8_ram() = ~1.7× less RAM (opt-in, lossy) |
| Index capacity | Adaptive (v0.15.3): starts at 4096, grows via resizeIndex on demand — no hard cap, RAM tracks the working set |
meta.attributes['k'] = v silent no-op |
pybind11 map copy; use meta.set_attribute(k, v) |
| Rust CLI missing v0.6.0+ features | namespace/entity/context_chain/integrations are Python-only |
Contributing
- Fork the repository
- Create a feature branch
- Make your changes with tests
- Submit a pull request
License
MIT — see LICENSE
Acknowledgments
Metadata
Release files for feather-db 0.19.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| feather_db-0.19.0.tar.gz | 478.3 kB | Details |
Built distributions (wheels)
Total release size: 41.4 MB
Release files / feather_db-0.19.0.tar.gz
| Download URL | feather_db-0.19.0.tar.gz |
|---|---|
| Size | 478.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a977a55a1ec1a5483ca62ebbd612e473e58a76ace1919bd6721a219cac6ce229
|
|
BLAKE2b-256 checksum How to use checksums |
82fc91722d1ed785ee3519a69192e79261d3f862cbc9ae12a64e658723cec012
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | feather_db-0.19.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.7 MB |
| Tags | CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f722d0614196003c6c364a5f4f3b19ef88199bb3b196dd77644d7bb1de1ac864
|
|
BLAKE2b-256 checksum How to use checksums |
9f3c958e6db4c2e95fb9b25ec33a8ee6d5fba4b7bdcc11ae1dc12a2785f2d2ef
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | feather_db-0.19.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 590.8 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
3898e8a67b6121105019e5292b5c91639170394623a2b2e4b791aab5249b7629
|
|
BLAKE2b-256 checksum How to use checksums |
30c570f2acf459543934acc6ab6ad35b28b03845ba7640fb895512e786244a27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp313-cp313-macosx_10_13_x86_64.whl
| Download URL | feather_db-0.19.0-cp313-cp313-macosx_10_13_x86_64.whl |
|---|---|
| Size | 595.6 kB |
| Tags | CPython 3.13 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
31dfb55af1cd5f57d1900c1f76e0ceb7703958c5de6e55cce8588f8a6c98de72
|
|
BLAKE2b-256 checksum How to use checksums |
144dc034e9e8fdcb57957c1135610b0a40457ba1667f6b48976cbadb5d28772d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | feather_db-0.19.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.7 MB |
| Tags | CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
231064dff5a5b0bd55dcce62a0acb43b87eea7db1372b241c88ee8e74da7d24f
|
|
BLAKE2b-256 checksum How to use checksums |
b07b3a0e34bf8feb112768b1d6ccd5b0e9e38ec54dd1a2e00587a6b4aecb6e01
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | feather_db-0.19.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 590.9 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0e5211eab8e399a0f3df86d4fc7bd07c729bad3a5ac81125d809a9facf5160c6
|
|
BLAKE2b-256 checksum How to use checksums |
d3f0a06b17d721cb4e3f9a7579ee2f46389a4b5411d23050c0256dee0b7809eb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp312-cp312-macosx_10_13_x86_64.whl
| Download URL | feather_db-0.19.0-cp312-cp312-macosx_10_13_x86_64.whl |
|---|---|
| Size | 595.6 kB |
| Tags | CPython 3.12 macOS 10.13+ x86-64 |
|
SHA-256 checksum How to use checksums |
f53d54772fa3449c32d1c45e2f6e85171efaedc9299b9807a32f51ee9ed069c9
|
|
BLAKE2b-256 checksum How to use checksums |
390e318f5d4691a57c2e36707f514805230d2f61334d6effd49b3d7714105304
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | feather_db-0.19.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
92d637438840473ee6ac87182242fd07c3dfda63765712b01b843be12a36c64b
|
|
BLAKE2b-256 checksum How to use checksums |
22c3b93bb03ef4f5c802051650c74961d351f1e2f93450dcb8e9fdf48c726e97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | feather_db-0.19.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 585.6 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
1027f8d1ff35838666aabe278298c7f92cf5d4c1913244fcdb371c5f57d68f81
|
|
BLAKE2b-256 checksum How to use checksums |
fe4e489a8fd9399e25d09a18263b688668f54d3fe06b8213e07b6d4575b210e7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl
| Download URL | feather_db-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl |
|---|---|
| Size | 592.5 kB |
| Tags | CPython 3.11 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
e5887a56be1078b87c462598ee08df59ed1defd70f303b933aeb7464ed1ed8b7
|
|
BLAKE2b-256 checksum How to use checksums |
29b2e3bac0a87fe4001dec3fbba26adf6efb2d6e025b96e5a4b19f15bd2c6c28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | feather_db-0.19.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
d9c4d47583b2b1f9a2c5d8b693fd4d82250ab8f7bd400b7d7345e045be8b90e6
|
|
BLAKE2b-256 checksum How to use checksums |
704e54b140b51fcb0f187329e47b8ce81fad160f34a0bba7121987cc4bb1961a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp310-cp310-macosx_11_0_arm64.whl
| Download URL | feather_db-0.19.0-cp310-cp310-macosx_11_0_arm64.whl |
|---|---|
| Size | 584.1 kB |
| Tags | CPython 3.10 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7d67cae1e0ca0370edcb7ea18646a1be06558d44fad946690a5a6dd6b2eb3b54
|
|
BLAKE2b-256 checksum How to use checksums |
688472374962cecc59b02eb006c1ef9f6ae0feab39ebabba8c57f1fab9e99dcb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl
| Download URL | feather_db-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl |
|---|---|
| Size | 591.3 kB |
| Tags | CPython 3.10 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
5b4e69ea8e6980fe3a695b589b2b98b5905f97f5a98c33c6de3827cad603d1a0
|
|
BLAKE2b-256 checksum How to use checksums |
5c64bbf27719d304c413761a6e5fcaf4e7a20f35705a47792fdbc69492a481ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | feather_db-0.19.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
1cc00a39ccc8221d0912e50870a92befc73419206780e902649ac8bd8762e767
|
|
BLAKE2b-256 checksum How to use checksums |
962c8e5f60308e91107782034bb6ddf88522457e927ae0ea08691d62b46fff29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp39-cp39-macosx_11_0_arm64.whl
| Download URL | feather_db-0.19.0-cp39-cp39-macosx_11_0_arm64.whl |
|---|---|
| Size | 583.8 kB |
| Tags | CPython 3.9 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
13ac365c4c3edfb621a0541454a3abb792712dc1aa954755174bb9e7aee36282
|
|
BLAKE2b-256 checksum How to use checksums |
b2b120555478fffa007186f8454a7def181eeaafa1af13b83f5f1cef74be4068
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl
| Download URL | feather_db-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl |
|---|---|
| Size | 591.2 kB |
| Tags | CPython 3.9 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
c7c414d1e68390d59f9457378ea15720c29c573e4d674ad734a37f2d2af6336e
|
|
BLAKE2b-256 checksum How to use checksums |
88dcdbc60ea8a0bc76175a859f7922adfc13743efd3dd47d40ce23380d405c90
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | feather_db-0.19.0-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 5.5 MB |
| Tags | CPython 3.8 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
95743bb7e79c8b8051146d6a08d37cef27dd67da375cd3ea77b26461fa8d83e6
|
|
BLAKE2b-256 checksum How to use checksums |
b3b95fbb1dd9716299624381763d6fa674508e96c6b06b99de65dc62d1733240
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp38-cp38-macosx_11_0_arm64.whl
| Download URL | feather_db-0.19.0-cp38-cp38-macosx_11_0_arm64.whl |
|---|---|
| Size | 585.9 kB |
| Tags | CPython 3.8 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
cdcb1b0902170a9c1d466f4166b6f9deb373ffe3b8f0bb15058d5cd8b6eb556b
|
|
BLAKE2b-256 checksum How to use checksums |
de568540c2b505cd84f41b5b00499b8e4d9f92c3b7ec9454313ef503870b9873
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / feather_db-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl
| Download URL | feather_db-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl |
|---|---|
| Size | 593.9 kB |
| Tags | CPython 3.8 macOS 10.9+ x86-64 |
|
SHA-256 checksum How to use checksums |
ea0ad6e5f1ea650703346b60bc2151a9b06eca941213ea321524860d86f4106e
|
|
BLAKE2b-256 checksum How to use checksums |
3eba90b81c86cb74361fa9ae5cdb5c204abca0c0eac9d5a2309066b9baba6abb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|