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.18.2

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.18.2
File Size Uploaded
feather_db-0.18.2.tar.gz 475.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for feather-db 0.18.2
File
feather_db-0.18.2-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.18.2-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
feather_db-0.18.2-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details
feather_db-0.18.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
feather_db-0.18.2-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
feather_db-0.18.2-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details
feather_db-0.18.2-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.18.2-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
feather_db-0.18.2-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details
feather_db-0.18.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.27+ x86-64, Linux glibc 2.28+ x86-64 Details
feather_db-0.18.2-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
feather_db-0.18.2-cp310-cp310-macosx_10_9_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.9+ x86-64 Details
feather_db-0.18.2-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.18.2-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
feather_db-0.18.2-cp39-cp39-macosx_10_9_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.9+ x86-64 Details
feather_db-0.18.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 Details
feather_db-0.18.2-cp38-cp38-macosx_11_0_arm64.whl CPython 3.8 CPython 3.8 macOS 11.0+ ARM64 Details
feather_db-0.18.2-cp38-cp38-macosx_10_9_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.9+ x86-64 Details

Total release size: 41.2 MB

Release files / feather_db-0.18.2.tar.gz

Download URL feather_db-0.18.2.tar.gz
Size 475.3 kB
Tags Source
SHA-256 checksum
How to use checksums
40d5194f80324e471dfbc298e0f63b6dff411e07a23511bc4b7316da4e450375
BLAKE2b-256 checksum
How to use checksums
f191acc4dc3360e5297c4b5375e412a9004a915de575390031488ecca6b93c7f
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.18.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.18.2-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
5d64b9c85ee2415fb4ef329a51cb9ff306b043e0c75d110fbb66c594b7dc7e64
BLAKE2b-256 checksum
How to use checksums
5a0001a097840a62d1fab2f6901e7b73ca9cc9ae105045cf73745a22d447c7a3
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.18.2-cp313-cp313-macosx_11_0_arm64.whl

Download URL feather_db-0.18.2-cp313-cp313-macosx_11_0_arm64.whl
Size 584.3 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ac6abdd610a3e5bc8bc916686c4d4f5181601296af70686a82bb2dfc4f5ce22a
BLAKE2b-256 checksum
How to use checksums
96b10dac7e8627ac4742b4a2ec52f3c592f77a335b97a83c93e9f51041055a30
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.18.2-cp313-cp313-macosx_10_13_x86_64.whl

Download URL feather_db-0.18.2-cp313-cp313-macosx_10_13_x86_64.whl
Size 589.5 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
39d8bea2d90dbf2cf3bc5f1f1e7830ac2471b08470ec33fd1178f140c81eb7b2
BLAKE2b-256 checksum
How to use checksums
b03092a544f0e5c73a5b397e65fd62e004696993699b086a4cd4729ce48724ff
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.18.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.18.2-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
bb3092f4193098e197b361b9928e5c0f1042b0ab232c07dbab213fa342ca6021
BLAKE2b-256 checksum
How to use checksums
0810d5cc8a246f9c15b6a1b744afe1510ecd8f8521e2b332cf006c7e41517551
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.18.2-cp312-cp312-macosx_11_0_arm64.whl

Download URL feather_db-0.18.2-cp312-cp312-macosx_11_0_arm64.whl
Size 584.2 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
d9d7badb16ca2a6aeefd7322d228d0b94c83365a61d86fd781cda65f65748034
BLAKE2b-256 checksum
How to use checksums
a7b8a24d1137c0485a51f5da0d987a590264fef54c0427b2d6bb944d6d4e82d8
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.18.2-cp312-cp312-macosx_10_13_x86_64.whl

Download URL feather_db-0.18.2-cp312-cp312-macosx_10_13_x86_64.whl
Size 589.5 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
900b22d250363ed4a566257ad21302157b76591963f58fb9447016a835876e07
BLAKE2b-256 checksum
How to use checksums
9ad79cd7a3f0d9e5e96a806c137ca178243374f1a14befa6cb8c7da4bc808150
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.18.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.18.2-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
c15d8583825166e95590450d3000352f448e0b15debc3b9cfe6da8d3032eeeca
BLAKE2b-256 checksum
How to use checksums
e82b736cb3ecef984174f82f3f665d344343d45cf3cc1f077c6849274dcfa31b
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.18.2-cp311-cp311-macosx_11_0_arm64.whl

Download URL feather_db-0.18.2-cp311-cp311-macosx_11_0_arm64.whl
Size 579.1 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1dc0690b7af6adea55064622cba52ff72ea9d98be3f0500b5d1d5b437fb9eeff
BLAKE2b-256 checksum
How to use checksums
564b0b0357f8abc91030e5a6ad96a86b88d46de785651bb04597e3cdb78df06a
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.18.2-cp311-cp311-macosx_10_9_x86_64.whl

Download URL feather_db-0.18.2-cp311-cp311-macosx_10_9_x86_64.whl
Size 586.2 kB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
779bc17399aad70f86461a10de84f23c8ef5c8acd13693b5276cba0427fb48b2
BLAKE2b-256 checksum
How to use checksums
8d03417a300623bd455b3d73400df99281017a90daddbec30a701edf74ca099f
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.18.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.18.2-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
cddd82365fecc15d3120a50f05b08ef2bd6813bbc63d87f7119fe594ba394bef
BLAKE2b-256 checksum
How to use checksums
654ed3e075e256b80570acd074cdcba50c642a0ef6afd0db057292ec3a575fdf
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.18.2-cp310-cp310-macosx_11_0_arm64.whl

Download URL feather_db-0.18.2-cp310-cp310-macosx_11_0_arm64.whl
Size 578.5 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1c62465d4328326a0e3e3df03502bfd23a29a2397ccab666aa0040a6ad342872
BLAKE2b-256 checksum
How to use checksums
ea79d810bc851d98836ea7d2884ed377ec9335eb3146f6b3d9d9b1ee10044f12
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.18.2-cp310-cp310-macosx_10_9_x86_64.whl

Download URL feather_db-0.18.2-cp310-cp310-macosx_10_9_x86_64.whl
Size 585.0 kB
Tags CPython 3.10 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
f0b03d38c97cd2dcada5971cceedaeea88eb4d1b9d3b5853735c7ae53c1671e6
BLAKE2b-256 checksum
How to use checksums
6b477868e76951452206cd631e41d19c0935b9ae6b90ca96b9a7ccfc4893ce0c
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.18.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.18.2-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
8f1f8e3412ad817066b9f7c555aba33a7ccf59b61dfd0c3f71f8ccdf0c2a9974
BLAKE2b-256 checksum
How to use checksums
098080f065eca39ccb736120de08f245fbc55f3296abd7e50a25bfdea5fe1c14
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.18.2-cp39-cp39-macosx_11_0_arm64.whl

Download URL feather_db-0.18.2-cp39-cp39-macosx_11_0_arm64.whl
Size 578.3 kB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
426f5eaf1ab8e6bc307d214384b7d0bd6b1fc611f52271eae03fba0eb08527b0
BLAKE2b-256 checksum
How to use checksums
748f96313caf0e4faa0d032e9d47d8d9205fd8149712118aed93e8bc5845513c
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.18.2-cp39-cp39-macosx_10_9_x86_64.whl

Download URL feather_db-0.18.2-cp39-cp39-macosx_10_9_x86_64.whl
Size 585.1 kB
Tags CPython 3.9 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
1bbde4151422e82e8347c481bab182ba7cc8f51b374842bb9d924daf65e8f188
BLAKE2b-256 checksum
How to use checksums
e2339f2f19520c9c9717ab79bff95770d70c21ade7048193f9e7dba0d42c2ede
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.18.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl

Download URL feather_db-0.18.2-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
7387bfd2b5e7858aa381b13a27cde3d40729345e3f1f053db57758dfec850c0c
BLAKE2b-256 checksum
How to use checksums
bc62cc0af689a50dac392a97c5b49d5fa85c550d5998f9a7a5868ab69079f6be
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.18.2-cp38-cp38-macosx_11_0_arm64.whl

Download URL feather_db-0.18.2-cp38-cp38-macosx_11_0_arm64.whl
Size 579.7 kB
Tags CPython 3.8 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
31823c4a29667a4931104b4a89746513aa2c3ff7c7cdecb47dd778ddd74354d1
BLAKE2b-256 checksum
How to use checksums
53865253e55fd9eea7bdea4f0b0799a62334006f5e546419fa86f7551b3142b0
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.18.2-cp38-cp38-macosx_10_9_x86_64.whl

Download URL feather_db-0.18.2-cp38-cp38-macosx_10_9_x86_64.whl
Size 587.8 kB
Tags CPython 3.8 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
3dd9bb4062b4923252b5240438b60afbeab701d46282308b23316eb18f77a861
BLAKE2b-256 checksum
How to use checksums
c48913d6eca42d6743d2355ae11c737f9a2875abc3a7428e60dc15d6efeafa54
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.18.2 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