Skip to main content

Feather DB

Embedded vector database + self-aligned context engine

Part of Hawky.ai — AI-Native Development Tools

Tests PyPI Crates.io Python License: MIT Website HuggingFace Space Benchmark Results

LongMemEval_S LongMemEval_S Cheap ANN p50 ANN Recall

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 shared FEATHER_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, set FEATHER_DEV_MODE=1 explicitly. 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)
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

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes with tests
  4. Submit a pull request

License

MIT — see LICENSE


Acknowledgments

Metadata

Release files for feather-db 0.21.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for feather-db 0.21.0
File Size Uploaded
feather_db-0.21.0.tar.gz 549.6 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for feather-db 0.21.0
File
feather_db-0.21.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.14 CPython 3.14 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
feather_db-0.21.0-cp314-cp314-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 macOS 11.0+ ARM64 Details
feather_db-0.21.0-cp314-cp314-macosx_10_15_x86_64.whl CPython 3.14 CPython 3.14 macOS 10.15+ x86-64 Details
feather_db-0.21.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
feather_db-0.21.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
feather_db-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details
feather_db-0.21.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
feather_db-0.21.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
feather_db-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details
feather_db-0.21.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
feather_db-0.21.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
feather_db-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details
feather_db-0.21.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
feather_db-0.21.0-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
feather_db-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
feather_db-0.21.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
feather_db-0.21.0-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
feather_db-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details

Total release size: 43.0 MB

Release files / feather_db-0.21.0.tar.gz

Download URL feather_db-0.21.0.tar.gz
Size 549.6 kB
Tags Source
SHA-256 checksum
How to use checksums
64c3fb58647c64b63f7a3a0d62ba6d596418d37d1baf55762b03b35c36c60682
BLAKE2b-256 checksum
How to use checksums
6a8905ec389149408b46dd7f4f0bba21edce80be926ba1ac11955135d76b4e68
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.21.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.21.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 5.8 MB
Tags CPython 3.14 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
9c6f6e27fe296900f907aace93f5ba834f1235f324ab80dbca394725f5387c69
BLAKE2b-256 checksum
How to use checksums
87f0566afd05e38f21d4a90db950c58e0aa57850fb5af65cf5d76cbd113673aa
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.21.0-cp314-cp314-macosx_11_0_arm64.whl

Download URL feather_db-0.21.0-cp314-cp314-macosx_11_0_arm64.whl
Size 628.6 kB
Tags CPython 3.14 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2c9341082cb913277a3f33af28453ab8e0b569b7556bcd1c15501e953da9e141
BLAKE2b-256 checksum
How to use checksums
42834089f2be7514afb947164fa44735418e0a933169e02f86e5666c3ea587ba
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.21.0-cp314-cp314-macosx_10_15_x86_64.whl

Download URL feather_db-0.21.0-cp314-cp314-macosx_10_15_x86_64.whl
Size 633.3 kB
Tags CPython 3.14 macOS 10.15+ x86-64
SHA-256 checksum
How to use checksums
45a7816b21defd396d19bc83378be37be119783b22c07ab5d384aa3001af59dc
BLAKE2b-256 checksum
How to use checksums
290672735d7a8ac8e88cd8e86655d42d8046511c3527b1a3cb31925c3ffad94e
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.21.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.21.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 5.8 MB
Tags CPython 3.13 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
3b20966cd68c06e60c23242611d76c0778ac5b79662f022fddd2686fee7c666a
BLAKE2b-256 checksum
How to use checksums
bac897a003a0304b4b14a687410815b800ba856622d1f88a1d5be2b370475fe4
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.21.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL feather_db-0.21.0-cp313-cp313-macosx_11_0_arm64.whl
Size 630.2 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7ef964a8d08d693e69b24f2d60d109a21dd1894795394b933ef7de93674406b5
BLAKE2b-256 checksum
How to use checksums
7ce7063376fc0cb3725c5ffa8b97a9a776bc6a22b276a4cfc94ba7ab66866a11
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.21.0-cp313-cp313-macosx_10_13_x86_64.whl

Download URL feather_db-0.21.0-cp313-cp313-macosx_10_13_x86_64.whl
Size 633.7 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
bbf5551a6ea204aca8c16df52fded2b4b3eeb3043ae5095b76a1e64c86b19cbe
BLAKE2b-256 checksum
How to use checksums
b656264752180b6678ec155713b948c2bbd386f0c1c559dd722844b6277fc1f2
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.21.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.21.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 5.9 MB
Tags CPython 3.12 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
5300108ad321173acb34bfb65f06e49ebd009c5fac8ab8af2260654da3cfe4ab
BLAKE2b-256 checksum
How to use checksums
7408cb85272e22994869338b390a80cca79b2ba5c5c1094d8eaac4e8eb9d97d3
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.21.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL feather_db-0.21.0-cp312-cp312-macosx_11_0_arm64.whl
Size 630.3 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ae6f96b51895ebd7a2fcf9ae6bb6943afaa790757617026329c390c7a6466a16
BLAKE2b-256 checksum
How to use checksums
a656b59bbc991a8c273024e617a01457ce0540db08986796e867489b02863dd1
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.21.0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL feather_db-0.21.0-cp312-cp312-macosx_10_13_x86_64.whl
Size 633.7 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
9d0699d296b035339a13e5a05a191c9c1d3ab822fc3681de45e2b66cc0dc2736
BLAKE2b-256 checksum
How to use checksums
6c1d124ab6b464afb1ead325caafb606d5b8a9ec5ab65b1e90f9aa7ee84c73b4
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.21.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.21.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 5.8 MB
Tags CPython 3.11 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
224acc782e9b347a6ba9a7aeb6aacb99db7e9e45306be080a4bf23ee7e319755
BLAKE2b-256 checksum
How to use checksums
208a0c4041cf8ad3a6ee0170229dd833eb52f6375b90c9c3dd19e73291b68ebd
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.21.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL feather_db-0.21.0-cp311-cp311-macosx_11_0_arm64.whl
Size 624.6 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
0d9e93b98fb9fa7a42c66a6fab8fc61bfc144eb59935ffd50c4d558221961509
BLAKE2b-256 checksum
How to use checksums
82e8128880301395973889b38a8d45ea84c622d9eca8df276bbc6369e0ae2d7d
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.21.0-cp311-cp311-macosx_10_9_x86_64.whl

Download URL feather_db-0.21.0-cp311-cp311-macosx_10_9_x86_64.whl
Size 629.3 kB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
634a5004b350dfb8dc8407ded5a2b9653a4b7dbe8371190b651735831636bf5d
BLAKE2b-256 checksum
How to use checksums
9c3e59a0ebf51a05bb338bd57ea6df5376f9a65e6bb5bc8c99a8aab40fdbab6d
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.21.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.21.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 5.8 MB
Tags CPython 3.10 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
63cbe675255b1a7e4e940e579f1118430349d53815315fb5240359226bbb2ee8
BLAKE2b-256 checksum
How to use checksums
1a6462582009a7f4f20acd6176b95398acfb74ac65ea27b5dbc80d7f5e40fe8c
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.21.0-cp310-cp310-macosx_11_0_arm64.whl

Download URL feather_db-0.21.0-cp310-cp310-macosx_11_0_arm64.whl
Size 623.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ab34d2df3b26146b6392ad532e2d1c60831a1dc48f87480f9a08804551a2a675
BLAKE2b-256 checksum
How to use checksums
2ab5e95449f521ed9c10bf87845466f8af32e76a95cd2796c9e9fdf36b76c59e
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.21.0-cp310-cp310-macosx_10_9_x86_64.whl

Download URL feather_db-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl
Size 627.7 kB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
dfc646cab41bab819bd1f224b70603bc2ab7236bf5d423434df79199903ad8a8
BLAKE2b-256 checksum
How to use checksums
6c4917bfd293b34b6862a241073c9df36be825bcbe6a5ae7d4f0e203ca62659d
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.21.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.21.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
Size 5.8 MB
Tags CPython 3.9 Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
f39821ff5576695f203da3ad62d4c39946200876037eb4d0b240133fd078c3b9
BLAKE2b-256 checksum
How to use checksums
90506d0fc89e86378d683288c6a7a26cc776a53cc74fe5a47fd45bf63c196160
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.21.0-cp39-cp39-macosx_11_0_arm64.whl

Download URL feather_db-0.21.0-cp39-cp39-macosx_11_0_arm64.whl
Size 623.3 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ee2fb515150337c433befba01b33a3c7be87571c6470f922ee979f2dc80bca0b
BLAKE2b-256 checksum
How to use checksums
af7abd32949919341f819aed46204d3e50c87afb2fb4f0b8fda7ea1646495bfd
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.21.0-cp39-cp39-macosx_10_9_x86_64.whl

Download URL feather_db-0.21.0-cp39-cp39-macosx_10_9_x86_64.whl
Size 627.8 kB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
7b4a2dfc4efed5762837dc9bed3004e5650b596a11b51152db81389801046c7a
BLAKE2b-256 checksum
How to use checksums
b1a2138501c2cf1f88ebc48187c305ace18612820ffefed12a1a380386e7b79b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.21.0 This release

19 release files

0.16.0

1 release file

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page