What changed

Every release that touched the engine, with the numbers behind it. Breaking changes are announced here first.

  1. 2.8.0 New

    Filtering moves inside the index

    Metadata predicates are now evaluated during graph traversal instead of after it, so recall no longer collapses on narrow filters.

    Until now a filtered query walked the HNSW graph, collected candidates, then discarded the ones that failed the predicate. On a filter matching one percent of the corpus, that meant throwing away almost everything the traversal found — recall fell off a cliff precisely when the filter was most useful.

    The predicate is now evaluated during traversal. The walk only follows edges to nodes that can still satisfy it, so the candidate set stays full of viable results.

    Measured on a 40M-vector index with a 1% selectivity filter, recall@20 went from 0.61 to 0.97. Latency is within noise of an unfiltered query.

    No API change. Existing filtered queries get the new behaviour on their next call.

  2. 2.7.0 New

    Live reindexing

    Rebuild an index while it keeps serving. No maintenance window, no read alias to juggle.

    Changing m or efConstruction used to mean building a second index, waiting, then flipping an alias. Workable, but it doubled the memory footprint and everyone had to remember the alias dance.

    POST /v1/indexes/{id}/reindex now rebuilds in place. Queries keep hitting the old graph until the new one is complete, then the swap is atomic. Peak memory during the rebuild is roughly 1.3× steady state rather than 2×.

  3. 2.6.2 Fixed

    Tail latency under memory pressure

    Fixed a page-fault storm that pushed p99 past 200 ms on indexes sitting near their memory ceiling.

    On indexes filling more than about 85% of available memory, the graph’s upper layers were being evicted and faulted back in on nearly every query. The median stayed healthy, which is exactly why this took so long to find: only the tail showed it.

    Upper layers are now pinned. On an affected 200M-vector index, p99 dropped from 214 ms to 19 ms with no change to the median.