turbopuffer
@turbopuffer
search every byte 🔍 {vector, full-text} search engine built from first principles on object storage. 10x cheaper, scales to 100B. powers Notion, Cursor, Linear
new: highlighting extract the text fragments most relevant to a query → highlight matches in your search results UI → minimize context passed to your LLM docs (and playground): turbopuffer.com/docs/fts#hi...
we're partnering with Baseten, Cohere, Fireworks, Voyage, and ZeroEntropy to provide a variety of state-of-the-art embedding models, and more models are coming soon contact us to join the beta
now in beta: native embeddings in tpuf embedding is the most painful part of puffing. we want to make it easy you can now convert chunks to vectors as you read and write to turbopuffer, without extra calls to an embedding model provider API docs: turbopuffer.com/docs/embedding
puffin' in paris for RAISE summit we're bringing together good friends for a night of champagne, caviar, and chicken nuggets july 9. rsvp here: luma.com/raisesummit...
new: i8 vectors f32: 4 bytes/dim i8: 1 byte/dim 4x fewer bytes → 75% lower storage and query costs + faster queries when embedded with a quantization-aware model (e.g. voyage-4-large) trained on i8 vectors, recall loss can be ~0! docs: turbopuffer.com/docs/perfor...
we expose alyze as a WASM module in our docs so you can see how it tokenizes a given string turbopuffer.com/docs/fts#wo...
we open sourced alyze, the Rust crate behind tpuf's default full-text search tokenizer (word_v4) our first tokenizers (up to word_v3) were built on Tantivy's analyzer, and we owe them many thanks alyze does a bit less, but does it up to ~4x faster github.com/turbopuffer...
puffy plays pickleball june 30 in SF, co-hosted with good friends luma.com/the-agent-open
a year ago, ~98% of tpuf queries were vector ANN last 30d: 64% vector ANN 19% full-text BM25 13% filter-only 3% aggregate 1% other (sparse vector, exact kNN, ...)
new: rerank_by before, you'd implement rank fusion client-side. now, a little QoL upgrade, especially nice for large result sets docs: turbopuffer.com/docs/query#...
new: branching create an instant, copy-on-write clone of a tpuf namespace → constant-time (440ms p50, ~1s p99) → fully independent → unlimited branches, unlimited branch depth docs: turbopuffer.com/docs/branching
tpuf quantizes vectors to improve perf (RaBitQ) the algo randomly rotates vectors, and we were using matmul at O(d²) space & time, brutal at high dims. 10k = 400MB in RAM! we rebuilt the rotation using FWHT at O(d) space & O(d log d) time. ~no recall loss, 10k = only 5kB in RAM
new in turbopufer: the Fuzzy filter typo-tolerant substring matching with a configurable edit distance, so you can puff (or puf) even when you spell it wrong docs: tpuf.link/fuzzy
filtered counts on tpuf just got much faster our ANN index may replicate docs across clusters for better recall, so we had to dedupe matching IDs (slow) now, we store a bitmap of replica positions so the query plan is pure bitmap ops: (filter_bitmap - replica_bitmap).popcnt()
we're bringing more of the database to the tpuf dashboard step one: namespace metadata more soon
new: sparse vectors a first-class retrieval primitive that composes with BM25 + attribute ranking in the same query plan, no client-side fusion needed for SPLADE / learned-sparse retrievers (or roll your own weights for custom feature scoring) docs: turbopuffer.com/docs/query#...
new: namespace pinning pin namespaces to reserved compute for faster, cheaper, more predictable p99 on high QPS workloads ~50x cheaper than shared compute for a 128GB namespace at 500 QPS docs: turbopuffer.com/docs/pinning
stemming is what makes a text search for "run" match documents containing "running" or "runs" we just shipped a small stem cache so repeated terms skip the stemmer → ~2x tokenization throughput when stemming is enabled
puffy was right at home at our AI night at the aquarium in London coming to {a city near you}
each object store has its tradeoffs GCS has great throughput but limits per-object replaces to 1/s. S3 has no rate limit, but lower throughput we coalesce writes into larger WAL commits to respect GCS, but we've now increased commit cadence on S3 for ~2.5x lower write latency
new: multiple vector columns store multiple embeddings for the same document - each with its own dimensions, types, and ANN index multimedia → multiple vectors docs: tpuf.link/multi-vec-cols
new to tpuf: ranking by attribute for full-text search incorporating attributes into the MAXSCORE skipping algorithm → more levers for first-stage search relevance docs: tpuf.link/rba-docs
new in tpuf: regex indexes regex and glob filters can now use a trigram index to avoid full-table scans