# Typesense: what changed from 29 to 30 - Product: Typesense (https://whatsnew.fyi/product/typesense) - Vendor: Typesense - Range: changelog entries numbered after v29.1 up to and including v30.2, stable releases only - Entries below: 3 releases (newest first) - Resolved: 29 is v29.1 and 30 is v30.2, the newest stable release of each major we track - Carrying security changes: 0 · CVEs mentioned: 0 · Mentioning breaking changes: 0 · Removing or deprecating something: 0 - Page: https://whatsnew.fyi/product/typesense/compare/29...30 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## What changed (35 changes, grouped by kind) ### Added #### v30.0 (2026-01-27) - Diversify search results using Maximum Marginal Relevance (MMR) to diversify the top 250 hits on a pre-defined similarity metric - Synonyms are now top-level resources and can be shared between collections - Curation rules are now top-level resources and can be shared between multiple collections - Support facet_by for JOINed reference fields - Fetch related documents count for a document in a joined collection with the include_fields parameter - Support sorting and limit on joined fields with include_fields parameter - Support for altering reference fields in the collection schema - Add cascade_delete: false JOIN parameter for reference fields to override default cascade delete behavior - Support group_by with Union search - Support pinned_hits search parameter in Union search - Support removing duplicates in Union search with remove_duplicates flag - Add facet_sample_slope search parameter for dynamic facet sampling - Support binding to and serving requests over IPv6 addresses - Support copying documents when cloning collections - Support ! as a standalone negation operator in filters with field:![value] syntax - Support for Azure OpenAI models in Natural Language Search - Support for GCP service account authentication in Natural Language Search models - Support for GCP service account authentication for auto-embedding with GCP models - Add truncate parameter in collection schema for configurable token truncation on string fields - Add group_max_candidates search parameter to make found value accurate for group_by queries ### Changed #### v30.0 (2026-01-27) - Improved synonym matching logic to rank matches by overall match quality rather than just number of matched tokens ### Fixed #### v30.2 (2026-04-19) - Fixed incorrect handling of numeric != filters in both lazy and eager filter execution, including explicit not-equals lists on range-indexed numeric fields - Fixed highlighting to correctly mark single-token phrase matches and to avoid race conditions during union searches that run alongside concurrent writes - Fixed missing synonyms, stem, and stemming_dictionary fields in curation GET responses - Fixed a number of edge cases in diversity search - Fixed union search deduplication so curated pinned hits are no longer collapsed - Fixed a bug related to reference faceting - Fixed vector search behavior so zero-match phrase queries still preserve vector search results - Fixed scoped API key handling so embedded collection parameters can supply a missing collection in multi-search requests - Fixed conversation search error handling so failed searches do not incorrectly reuse the first search collection - Fixed search cache keying so scoped API key parameters and request-specific embedded params do not collide in the cache - Fixed JSON response escaping by using nlohmann::json::dump() when serializing response payloads - Fixed /health responsiveness during heavy bulk inserts by routing health checks to the meta thread pool - Fixed HTTP/2 async import teardown on early exit #### v30.1 (2026-01-29) - Fixed search latency metric in the stats.json endpoint that was overflowing ## Release notes ### v30.2 — Version 30.2 - Date: 2026-04-19 - Version: v30.2 - Original notes: https://github.com/typesense/typesense/releases/tag/v30.2 - Permalink: https://whatsnew.fyi/product/typesense/releases/v30.2 - **fixed** — Fixed incorrect handling of numeric != filters in both lazy and eager filter execution, including explicit not-equals lists on range-indexed numeric fields - **fixed** — Fixed highlighting to correctly mark single-token phrase matches and to avoid race conditions during union searches that run alongside concurrent writes - **fixed** — Fixed missing synonyms, stem, and stemming_dictionary fields in curation GET responses - **fixed** — Fixed a number of edge cases in diversity search - **fixed** — Fixed union search deduplication so curated pinned hits are no longer collapsed - **fixed** — Fixed a bug related to reference faceting - **fixed** — Fixed vector search behavior so zero-match phrase queries still preserve vector search results - **fixed** — Fixed scoped API key handling so embedded collection parameters can supply a missing collection in multi-search requests - **fixed** — Fixed conversation search error handling so failed searches do not incorrectly reuse the first search collection - **fixed** — Fixed search cache keying so scoped API key parameters and request-specific embedded params do not collide in the cache - **fixed** — Fixed JSON response escaping by using nlohmann::json::dump() when serializing response payloads - **fixed** — Fixed /health responsiveness during heavy bulk inserts by routing health checks to the meta thread pool - **fixed** — Fixed HTTP/2 async import teardown on early exit This release fixes some important bugs identified in `v30.1`. ###### Bug Fixes - **[v30.2]** Fixed incorrect handling of numeric `!=` filters in both lazy and eager filter execution, including explicit not-equals lists on range-indexed numeric fields. - **[v30.2]** Fixed highlighting to correctly mark single-token phrase matches and to avoid race conditions during union searches that run alongside concurrent writes. - **[v30.2]** Fixed missing `synonyms`, `stem`, and `stemming_dictionary` fields in curation GET responses. - **[v30.2]** Fixed a number of edge cases in diversity search. - **[v30.2]** Fixed union search deduplication so curated pinned hits are no longer collapsed. - **[v30.2]** Fixed a bug related to reference faceting. - **[v30.2]** Fixed vector search behavior so zero-match phrase queries still preserve vector search results. - **[v30.2]** Fixed scoped API key handling so embedded collection parameters can supply a missing collection in multi-search requests. - **[v30.2]** Fixed conversation search error handling so failed searches do not incorrectly reuse the first search collection. - **[v30.2]** Fixed search cache keying so scoped API key parameters and request-specific embedded params do not collide in the cache. - **[v30.2]** Fixed JSON response escaping by using `nlohmann::json::dump()` when serializing response payloads. - **[v30.2]** Fixed `/health` responsiveness during heavy bulk inserts by routing health checks to the meta thread pool. - **[v30.2]** Fixed HTTP/2 async import teardown on early exit. ### v30.1 — Version 30.1 - Date: 2026-01-29 - Version: v30.1 - Original notes: https://github.com/typesense/typesense/releases/tag/v30.1 - Permalink: https://whatsnew.fyi/product/typesense/releases/v30.1 - **fixed** — Fixed search latency metric in the stats.json endpoint that was overflowing ##### Bug fixes - **[New in 30.1]**: This release contains a bug fix that caused the search latency metric in the `stats.json` endpoint to overflow ### v30.0 — Version 30.0 - Date: 2026-01-27 - Version: v30.0 - Original notes: https://github.com/typesense/typesense/releases/tag/v30.0 - Permalink: https://whatsnew.fyi/product/typesense/releases/v30.0 - **added** — Diversify search results using Maximum Marginal Relevance (MMR) to diversify the top 250 hits on a pre-defined similarity metric - **added** — Synonyms are now top-level resources and can be shared between collections - **added** — Curation rules are now top-level resources and can be shared between multiple collections - **added** — Support facet_by for JOINed reference fields - **added** — Fetch related documents count for a document in a joined collection with the include_fields parameter - **added** — Support sorting and limit on joined fields with include_fields parameter - **added** — Support for altering reference fields in the collection schema - **added** — Add cascade_delete: false JOIN parameter for reference fields to override default cascade delete behavior - **added** — Support group_by with Union search - **added** — Support pinned_hits search parameter in Union search - **added** — Support removing duplicates in Union search with remove_duplicates flag - **added** — Add facet_sample_slope search parameter for dynamic facet sampling - **added** — Support binding to and serving requests over IPv6 addresses - **added** — Support copying documents when cloning collections - **added** — Support ! as a standalone negation operator in filters with field:![value] syntax - **added** — Support for Azure OpenAI models in Natural Language Search - **added** — Support for GCP service account authentication in Natural Language Search models - **added** — Support for GCP service account authentication for auto-embedding with GCP models - **added** — Add truncate parameter in collection schema for configurable token truncation on string fields - **added** — Add group_max_candidates search parameter to make found value accurate for group_by queries - **changed** — Improved synonym matching logic to rank matches by overall match quality rather than just number of matched tokens This release contains new features, enhancements, performance improvements, bug fixes and important API changes for synonyms, curation rules and analytics rules. ###### New Features - **Diversify Search Results**: Using Maximum Marginal Relevance (MMR), you can now diversify the top 250 hits on a pre-defined similarity metric. [(Docs)](https://typesense.org/docs/30.0/api/curation.html#diversify-results) - **Global Synonyms**: Synonyms are now top-level resources, and can be shared between collections. [(Docs)](https://typesense.org/docs/30.0/api/synonyms.html) - **Global Curation Rules**: Curations are also top-level resources now, and can be shared between multiple collections. [(Docs)](https://typesense.org/docs/30.0/api/curation.html) - **New features in JOINs**: - `facet_by` now supports JOINed reference fields. [(Docs)](https://typesense.org/docs/30.0/api/search.html#facet-referencing) - Fetch related docs count for a document in a joined collection with the `include_fields` param. [(Docs)](https://typesense.org/docs/30.0/api/joins.html#get-number-of-related-documents) - Support sorting and limit on joined fields with `include_fields` parameter. [(Docs)](https://typesense.org/docs/30.0/api/joins.html#Sorting-and-limiting-on-joined-collection-docs) - Support for altering reference fields in the collection schema. - New `cascade_delete: false` JOIN parameter for a `reference` field, to override the default behavior of document being cascade deleted in case all the documents it references are deleted. Requires `async_reference` parameter to be `true`. [(Docs)](https://typesense.org/docs/30.0/api/joins.html#cascade-delete) - **New features in Union Search**: - Support for `group_by` with Union search. [(Docs)](https://typesense.org/docs/30.0/api/federated-multi-search.html#grouping-with-union) - Support for the `pinned_hits` search parameter in Union search. - Support for filtering out duplicates when using Union search with a new flag called `remove_duplicates`. [(Docs)](https://typesense.org/docs/30.0/api/federated-multi-search.html#removing-duplicates-in-union-search) - **Facet Sampling**: Make facet sampling dynamic using the new `facet_sample_slope` search parameter. [(Docs)](https://typesense.org/docs/30.0/api/search.html#faceting-parameters) - **IPv6 Support**: Typesense now supports binding to and serving requests over IPv6 addresses, enabling seamless integration and connectivity in modern IPv6-only or dual-stack networks. ###### Enhancements - Support for (optionally) copying documents when cloning collections. [(Docs)](https://typesense.org/docs/30.0/api/collections.html#clone-collection-with-documents) - Support for `!` as a standalone negation operator in filters, allowing `field:![value]` syntax as an alternative to `field:!=[value]`. - Support for Azure OpenAI models in Natural Language Search. [(Docs)](https://typesense.org/docs/30.0/api/natural-language-search.html#supported-model-types) - Support for GCP service account authentication in Natural Language Search models. [(Docs)](https://typesense.org/docs/30.0/api/natural-language-search.html#supported-model-types) - Support for GCP service account authentication for auto-embedding with GCP models. [(Docs)](https://typesense.org/docs/30.0/api/vector-search.html#service-account-authentication) - Configurable token truncation for string fields to improve exact match filtering on long strings, using the new `truncate` parameter in the collection schema. [(Docs)](https://typesense.org/docs/30.0/api/collections.html#field-parameters) - Return an error message when a field is declared that references another field of the same collection. - New `group_max_candidates` search parameter which overrides the behavior of `group_by` queries introduced in [v29.0](https://typesense.org/docs/29.0/api/#deprecations-behavior-changes) where `found` value is an approximation. When `group_max_candidates` is passed, `found` will _[Truncated at 4000 characters — full notes: https://github.com/typesense/typesense/releases/tag/v30.0]_