--- title: 0.25.1 noindex: true --- **Breaking change:** `0.25.1` replaces the vector search engine's epsilon recall knob with a proof-based bounds gate. The `paradedb.vector_cluster_probe_epsilon` GUC has been removed, and vector indexes built with `0.25.0` must be rebuilt with `REINDEX` after upgrading. ## New Features 🎉 ### Faster Vector Search, One Less Knob Vector search now uses a proof-based bounds gate with a work budget, which skips clusters that provably cannot contribute to the result. This cuts tail latency by up to 6x and produces much tighter recall/latency confidence intervals. Because the gate is proof-based, there is no longer a recall knob to misconfigure: `paradedb.vector_cluster_max_probe`, the work-budget ceiling, is now the only [recall/latency setting](/documentation/vector/tuning). ### Deterministic Vector Search Results Tiebreaker columns can now follow the distance in `ORDER BY`, making [vector search results deterministic](/documentation/vector/querying#deterministic-results) when embeddings are equidistant from the query vector: ```sql SELECT id, description FROM mock_items WHERE id @@@ pdb.all() ORDER BY embedding <=> '[1, 2, 3, 4, 5, 6, 7, 8]', id LIMIT 5; ``` ### Vector Search in Hybrid Queries The vector arm of [reciprocal rank fusion](/documentation/hybrid/rrf) queries is now pushed down into the ParadeDB index, accelerating hybrid search. ### ORM Support for Vector Search The ParadeDB ORM integrations have been updated for the `paradedb` index naming, native vector search, and the vector index build options: - [sqlalchemy-paradedb](https://pypi.org/project/sqlalchemy-paradedb/) `0.10.0` - [django-paradedb](https://pypi.org/project/django-paradedb/) `0.12.0` - [rails-paradedb](https://rubygems.org/gems/rails-paradedb) `0.11.0` - [@paradedb/drizzle-paradedb](https://www.npmjs.com/package/@paradedb/drizzle-paradedb) `0.4.0` - [ParadeDB.EntityFrameworkCore](https://www.nuget.org/packages/ParadeDB.EntityFrameworkCore) `0.3.0` ### LEFT, RIGHT, and FULL Joins JoinScan now supports `LEFT`, `RIGHT`, and `FULL` joins, extending the join shapes that execute inside the ParadeDB index. ## Performance Improvements 🚀 - Vector index builds hand training vectors to the clusterer by value, halving training memory. - Vector index build parallelism is capped at 4 workers to prevent memory spikes on large builds. - A new `paradedb.vector_clustering_threshold` GUC (default `500`) sets the segment size at which vector storage switches from flat to clustered. - MPP workers now launch plan-first, sized from the plan's task fragments, and the default ring size was lowered to 8MB. - Range partitioning is now wired into join planning. ## Stability Improvements 💪 - AggregateScan join predicates are now normalized and validated. - Fixed a spurious `datetime_fields` error. - Dynamic filters now survive across MPP fragments. - The extension Docker image now ships `pg_search`'s non-base shared libraries. - Multi-valued fields are now disallowed in `partition_by` and `sort_by`. The full changelog is available [on the GitHub Release](https://github.com/paradedb/paradedb/releases/tag/v0.25.1).