Integrations
Plugs into your stack.
Feather works with every embedding model, agent framework, and runtime you already use. Pick your poison.
Embedding models
Supported
OpenAI
text-embedding-3-small/large. 1536 or 3072 dim.
from openai import OpenAI
from feather_db import DB
import numpy as np
client = OpenAI()
db = DB.open("embeddings.feather", dim=1536)
resp = client.embeddings.create(
model="text-embedding-3-small",
input="Your text here",
)
vec = np.array(resp.data[0].embedding, dtype=np.float32)
db.add(id=1, vec=vec)
db.save()Supported
Anthropic Claude
Use with Voyage or Cohere embeddings + Claude for retrieval.
# Embed with voyage-3, retrieve with Feather, answer with Claude
from voyageai import Client as Voyage
from anthropic import Anthropic
from feather_db import DB
voyage = Voyage()
claude = Anthropic()
db = DB.open("rag.feather", dim=1024)
def ingest(text: str, id: int):
e = voyage.embed([text], model="voyage-3").embeddings[0]
db.add(id=id, vec=e)
ctx = db.context_chain(query_vec, k=5, hops=2)
msg = claude.messages.create(model="claude-sonnet-4-6", ...)Supported
Gemini Embedding
gemini-embedding-exp-03-07. Multimodal, 768 dim.
import google.generativeai as genai
from feather_db import DB
db = DB.open("embeddings.feather", dim=768)
r = genai.embed_content(
model="gemini-embedding-exp-03-07",
content="Your text here",
)
db.add(id=1, vec=r["embedding"])Supported
Sentence Transformers
Local, zero-cost. Great for prototyping.
from sentence_transformers import SentenceTransformer
from feather_db import DB
import numpy as np
model = SentenceTransformer("all-MiniLM-L6-v2")
db = DB.open("embeddings.feather", dim=384)
text = "Your text here"
vec = model.encode(text).astype(np.float32)
db.add(id=1, vec=vec)Supported
Ollama
Local LLM embeddings, fully offline.
import ollama
from feather_db import DB
import numpy as np
db = DB.open("embeddings.feather", dim=1024)
r = ollama.embeddings(model="nomic-embed-text", prompt="Your text")
vec = np.array(r["embedding"], dtype=np.float32)
db.add(id=1, vec=vec)Agent frameworks
Supported
LangChain
Use Feather as a vectorstore in RAG chains.
from langchain.vectorstores import FeatherVectorStore
from langchain.embeddings import OpenAIEmbeddings
emb = OpenAIEmbeddings()
store = FeatherVectorStore(embedding=emb, db_path="langchain.feather")
store.add_texts(["Document 1", "Document 2"])
results = store.similarity_search("query", k=5)Supported
LangGraph
Stateful agent graphs with persistent memory.
from langgraph.graph import StateGraph
from feather_db import DB
db = DB.open("agent_memory.feather", dim=768)
def retrieve(state):
ctx = db.context_chain(state["query_vec"], k=5, hops=2)
return {"context": ctx}
graph = StateGraph(state_schema).add_node("retrieve", retrieve)Supported
CrewAI
Shared memory across a crew of agents.
from crewai import Crew, Agent
from feather_db import DB
db = DB.open("crew_memory.feather", dim=768)
researcher = Agent(
role="researcher",
memory=lambda q: db.context_chain(q, k=5, hops=2),
)
crew = Crew(agents=[researcher], verbose=True)Supported
LlamaIndex
Drop-in vector store for LlamaIndex pipelines.
from llama_index.vector_stores import FeatherVectorStore
from llama_index import VectorStoreIndex
store = FeatherVectorStore(db_path="llamaindex.feather")
index = VectorStoreIndex.from_vector_store(store)
engine = index.as_query_engine()
print(engine.query("Your question"))Runtimes & platforms
Supported
Node / Bun
Native bindings via N-API. Works in Node 20+, Bun 1.1+.
import { DB } from "feather-db";
const db = await DB.open("vectors.feather", { dim: 384 });
await db.add(1, new Float32Array(384));
const results = await db.search(query, { k: 5 });Supported
WebAssembly
Run Feather inside the browser. No server hop.
import init, { DB } from "feather-wasm";
await init();
const db = new DB("vectors.feather", 384);
db.add(1, new Float32Array(384));
const results = db.search(query, 5);Supported
iOS / Android
Native mobile bindings. Ships as a single .framework / .aar.
// Swift (iOS)
import Feather
let db = try DB.open(path: "vectors.feather", dim: 384)
try db.add(id: 1, vector: vector)
try db.save()