# Meilisearch changelog
> A lightning-fast search engine that fits into your apps.
- Vendor: Meili
- Category: Databases & Data
- Language: Rust
- Official site: https://www.meilisearch.com
- Tracked by: What's New (https://whatsnew.fyi/product/meilisearch)
- Harvested from: GitHub (meilisearch/meilisearch)
- Entries below: 23 (newest first)
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: release facts (products, versions, dates, links, CVE ids and flags) are open data under CC BY 4.0, from the API at https://whatsnew.fyi/api/v1 or the nightly dataset at https://github.com/whatsnew-fyi/dataset. The summaries, labels and curation are Β© What's New: quote freely with attribution and a link back; wholesale republication of them is not permitted β terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'.
## Releases
### v1.55.0 β v1.55.0 π
- Date: 2026-10-12
- Version: v1.55.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.55.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.55.0
- **added** β Search query objects in the search and multi-search endpoints accept an optional inlineRule parameter that applies a dynamic search rule to a single query, requiring Meilisearch Enterprise Edition and the dynamicSearchRules experimental feature
- **added** β When the Meili-Include-Metadata header is set to true, the response metadata reports whether the inline rule's conditions were satisfied and, if not, the reason why
- **added** β When showPerformanceDetails is true, the performanceDetails of a search response include an entry for the facet distribution computation
#### π Improvements
##### Preview the effect of a dynamic search rule
Apply an inline-specified dynamic search rule to a search query.
Search query objects in the following endpoints now have an additional, optional `inlineRule` parameter.
When present and not `null`, then Meilisearch will check if query satisfies the conditions of the dynamic search rule specified in `inlineRule`, and if so will apply the actions of the rule as if it had been sent to the `PATCH /dynamicSearchRule/{:uid}` endpoint.
Additionally, if the `Meili-Include-Metadata` header is present in the request with the value `true`, then the `metadata` in the response will contain information about whether the conditions of the inline rule were satisfied and if not why.
Meilisearch Cloud will use this backend feature to implement a preview UI for dynamic search rules.
Using `inlineRule` requires Meilisearch Enterprise Edition and the `dynamicSearchRules` experimental feature.
By @dureuill in https://github.com/meilisearch/meilisearch/pull/6669
###### Details
1. There is a new `InlineRule` object with the following field:
1. `uid`, string, mandatory: unique ID of the rule. If there is already a rule with this id, then the inline rule will replace the existing rule for the duration of this search query.
2. `active`, boolean, optional, defaults to `true`: whether the rule is active. The actions of an inactive inline rule never apply to the search, but its conditions are still checked
3. `conditions`: `RuleConditions` object, identical to the `conditions` field in the body of `PATCH /dynamic-search-rules/{:uid}`
4. `actions`: `RuleActions` object, identical to the `actions` field in the body of `PATCH /dynamic-search-rules/{:uid}`
5. `precedence`: integer, optional, identical to the `precedence` field in the body of `PATCH /dynamic-search-rules/{:uid}`
2. The `POST /indexes/{:indexUid}/search` body has an additional, optional (defaults to `null`) `inlineRule` field which is an `InlineRule` object.
3. In the `POST /multi-search` body, the objects inside the `queries` array have an additional, optional (defaults to `null`) `inlineRule` field which is an `InlineRule` object.
###### Examples
Passing a search rule specific to the user making the request
```jsonc
// POST /indexes/movies/search
{
"q": "super hero",
"inlineRule": {
"uid": "user-likes-batman",
"actions": {
"scale": [
{
// filter recent Batman movies
"filter": "hero = batman AND release_time = fresh",
"weight": 1.2 // moderate relevancy boost
}
]
}
}
}
```
Previewing the effect of a search rule
```jsonc
// POST /multi-search -H 'Meili-Include-Metadata: true`
{
"queries": [
// base query without inline rule
{
"q": "fashion",
"filter": "color = blue AND category = shirt"
},
// same query with inline rule
{
"q": "fashion",
"filter": "color = blue AND category = shirt",
"inlineRule": {
"uid": "special-sales",
"conditions": {
"query": {
"words": "pants",
},
"filter": {
"values": {
"color": "yellow",
"stock_intent": "destock"
}
}
}
}
}
]
}
```
Response:
```jsonc
{
// [ ... ] some other fields
"results": [
// results without the rule
{
"hits": [ ... ] // documents returned without the rule
},
// results with the rule
{
// [...] some other fields
"hits": [...], // documents returned with the rule. Here the same, because the conditions of the rules are not satisfied
"metadata": {
// [...] some other fields
"inlineRuleConditionOutcomes": {
"satisfiesActive
_[Truncated at 4000 characters β full notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.55.0]_
### v1.52.4
- Date: 2026-10-01
- Version: v1.52.4
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.52.4
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.52.4
- **fixed** β Fix an important stability issue in Meilisearch
This release contains an important stability fix for Meilisearch. Update from v1.52.3 is recommended.
See https://github.com/meilisearch/meilisearch/pull/6658 for details
### v1.53.3
- Date: 2026-10-01
- Version: v1.53.3
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.53.3
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.53.3
- **fixed** β Improved stability in Meilisearch
This release contains an important stability fix for Meilisearch. Update from v1.53.2 is recommended.
See https://github.com/meilisearch/meilisearch/pull/6658 for details
### v1.54.3
- Date: 2026-10-01
- Version: v1.54.3
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.54.3
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.54.3
- **fixed** β Improve stability in Meilisearch
This release contains an important stability fix for Meilisearch. Update from v1.54.2 is recommended.
See https://github.com/meilisearch/meilisearch/pull/6658 for details
### v1.54.2
- Date: 2026-09-29
- Version: v1.54.2
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.54.2
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.54.2
- **fixed** β Processing, displaying, deleting or cancelling dynamic search rules update tasks created in Meilisearch v1.53 or prior no longer causes internal errors
Meilisearch v1.54.2 contains an important fix for users of the `dynamicSearchRule` experimental feature.
#### π¦ Fixes
- Trying to process, display, delete or cancel dynamic search rules update tasks that were created in Meilisearch v1.53 or prior no longer causes internal errors. By @dureuill in https://github.com/meilisearch/meilisearch/pull/6651. Thanks to @connorabbas for their report in https://github.com/meilisearch/meilisearch/issues/6646 β€οΈ
### v1.54.1
- Date: 2026-09-28
- Version: v1.54.1
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.54.1
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.54.1
- **fixed** β Make the embedder setting change succeed when the embedder's API key is expired
- **fixed** β Ignore geo errors when updating or deleting existing docs
###### πͺ²Β Bug fixes
- Make the embedder setting change succeed when the embedder's API key is expired by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6640
- Ignore geo errors when updating or deleting existing docs by @dureuill in https://github.com/meilisearch/meilisearch/pull/6638
###### π© Miscellaneous
- Aggregate the analytics from the MCP route by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6639
### v1.54.0
- Date: 2026-09-21
- Version: v1.54.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.54.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.54.0
- **changed** β The POST /dynamic-search-rules endpoint now returns actions as an object with pin and scale fields instead of a list
- **changed** β The PATCH /dynamic-search-rules/{:ruleUid} endpoint now expects a rule with the modified actions field structure
- **added** β Dynamic search rules can now boost, demote, or hide documents using a new scale action with a weight factor
- **added** β Score details for pinned documents now includes a ruleUid field indicating the applied rule
- **added** β Score details for scaled documents now includes a scale field with order, actions, and totalWeight information
- **added** β New environment variable MEILI_EXPERIMENTAL_DSR_FUEL_MAX_SCALE_ACTIONS to control maximum number of applicable scale actions in a single search
- **added** β New environment variable MEILI_EXPERIMENTAL_DSR_FUEL_SCALE_FUEL to control maximum number of scale constraint combinations evaluated in a single search
- **removed** β The uid __meilisearch_metadata is now reserved and cannot be used as a ruleUid in PATCH /dynamic-search-rules/{:ruleUid}
#### π₯ Breaking Changes
Meilisearch v1.54.0 makes breaking changes to the `dynamicSearchRules` experimental features.
- For Cloud users, rules will be migrated automatically, and the UI will adapt to the new API. Only the first change on rulelist might affect users that directly get rules through the API.
- If upgrading with `--upgrade-db`, rules will be migrated automatically.
1. The `POST /dynamic-search-rules` endpoint now returns `actions` as an object with 2 fields instead of a list:
1. `pin` is an array of `Pin` objects with the following fields:
1. `id`, String, mandatory: document id of the document to pin
2. `position`: positive or zero number, mandatory: position where to pin the document
3. `indexUid`, optional, defaults to `null`, uid of the index that this action applies to. If `null` or missing, the action applies to any index containing a document with the provided `id`.
4. `scale` is an array of `Scale` objects with the following fields:
1. `weight`, positive or zero number, mandatory: scaling factor to multiply with the selected documents' innate relevancy score
2. `ids`, array of strings, optional: list of document ids whose document's relevancy score should be scaled by the provided weight
3. `filter`: Meilisearch filter without a foreign filter, optional: a filter on the index that is resolved to determine a list of selected documents
4. `indexUid`, optional, defaults to `null`, uid of the index that this action applies to. If `null` or missing, the action applies to any index.
2. The `PATCH /dynamic-search-rules/{:ruleUid}` endpoint now expects a rule with the modified `actions` field. See changes to `POST /dynamic-search-rules` for details.
3. The uid `__meilisearch_metadata` is now reserved and cannot be used as a `ruleUid` in `PATCH /dynamic-search-rules/{:ruleUid}`
#### π Enhancements
##### Boost, demote and hide documents with search rules
- A dynamic search rule can now boost, deboost or hide documents by defining a new "scale" action that selects some documents by filter and/or an explicit list of ids and exposes a scale factor as a `weight`:
- If the weight is > 1.0, then the selected documents are boosted
- If the weight is < 1.0, then the selected documents are deboosted (demoted)
- If the weight is = 0.0, then the selected documents are hidden and don't appear in search results (unless if they are also pinned)
- β οΈ Because the factor is applied to the relevancy rules, it has little measurable effect when the first ranking rule is not a relevancy rule.
- Score details for a pinned document now contains an additional `ruleUid` field indicating the name of the rule that resulted in the document being pinned. β οΈ As a result, end-users can find out the uid of applied rules by looking at ranking score details. Please keep any sensitive information in the description of the rule instead β οΈ
- Score details for a scaled document now contains an additional `scale` field, with order `0`. The scale field is an object with the following fields:
- `order`: order of application of the rule. Always 0
- `actions`: an array of `ScaleAction`s, where each `ScaleAction` contains the following fields:
- `ruleUid`: the name of the rule that was applied
- `weight` the weight of the rule that was applied
- `totalWeight`: the total multiplicative factor computed as the product of the individual `.actions[].weight`.
- New environment variables controlling how much scale operations can occur:
- `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_SCALE_ACTIONS`: maximum number of applicable (at least one selected document) scale actions in a single search. Range 1-255, default 10
- `MEILI_EXPERIMENTAL_DSR_FUEL_SCALE_FUEL`: maximum number of combinations of scale constraint that are evaluated in a single search. Range 1-255, default 10.
###### Examples
Boosting "Bat
_[Truncated at 4000 characters β full notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.54.0]_
### v1.53.2 β v1.53.2 ποΈβ
- Date: 2026-09-07
- Version: v1.53.2
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.53.2
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.53.2
- **fixed** β Remove 100ms penalty on task replication
- **fixed** β Do not highlight stop-words
- **fixed** β Include last indexed documents in exactness ranking rule when updating searchable attributes in settings
- **security** β Tie authorization to index opening
- **changed** β Add context for CorruptedTaskQueue error in message
- **changed** β Allow generating a description for the error codes
- **changed** β Update charabia to 0.10.0
##### πͺ²Β Bug fixes
- Remove 100ms penalty on task replication by @dureuill in https://github.com/meilisearch/meilisearch/pull/6612
- Do not highlight stop-words by @harismuzaffer in https://github.com/meilisearch/meilisearch/pull/6595
- Include last indexed documents in exactness ranking rule when updating searchable attributes in settings by @harismuzaffer in https://github.com/meilisearch/meilisearch/pull/6604
##### πΒ Security
- Tie authorization to index opening by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6610
##### **π© Miscellaneous**
- Add context for CorruptedTaskQueue error in message by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6615
- Allow generating a description for the error codes by @dureuill in https://github.com/meilisearch/meilisearch/pull/6609
- Update charabia to 0.10.0 by @dureuill in https://github.com/meilisearch/meilisearch/pull/6602
- Fix typo by @vaibhav8a in https://github.com/meilisearch/meilisearch/pull/6605
##### New Contributors
* @harismuzaffer made their first contribution in https://github.com/meilisearch/meilisearch/pull/6595
* @vaibhav8a made their first contribution in https://github.com/meilisearch/meilisearch/pull/6605
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.53.1...v1.53.2
### v1.53.1 β v1.53.1 ποΈβ
- Date: 2026-08-13
- Version: v1.53.1
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.53.1
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.53.1
- **added** β Add MEILI_EXPERIMENTAL_TASK_QUEUE_MAX_READERS environment variable to control the maximum number of LMDB read transactions at the same time for the task queue
- **changed** β Bump mini-dashboard to v0.4.2
##### **β¨ Enhancement**
###### Add an env var to change the task queue readers
> by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6587
Control the maximum number of LMDB read transactions at the same time for the task queue.
The following environment variable can be exported to specify the maximum number of simultaneous read transactions:
```
#### Only the environment variable can set this parameter
MEILI_EXPERIMENTAL_TASK_QUEUE_MAX_READERS=100
```
Product discussion: https://github.com/orgs/meilisearch/discussions/806
##### **π© Miscellaneous**
* Bump mini-dashboard to v0.4.2 by @Strift in https://github.com/meilisearch/meilisearch/pull/6585
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.53.0...v1.53.1
### v1.52.3 β v1.52.3 π
- Date: 2026-08-10
- Version: v1.52.3
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.52.3
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.52.3
- **fixed** β Revert the Speed up the search speed a bit more optimization that was introduced in a previous version
###### πͺ² Bug fixes
* Revert the Speed up the search speed a bit more by @Kerollmops introduced in https://github.com/meilisearch/meilisearch/pull/6542
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.52.2...v1.52.3
### v1.52.2 β v1.52.2 π
- Date: 2026-08-10
- Version: v1.52.2
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.52.2
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.52.2
- **fixed** β Revert the /tasks/stream and /batches/stream SSE routes
###### πͺ² Bug fixes
* Revert the /tasks/stream and /batches/stream SSE routes by @Kerollmops introduced in https://github.com/meilisearch/meilisearch/pull/6533
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.52.1...v1.52.2
### v1.52.1 β v1.52.1 π
- Date: 2026-08-10
- Version: v1.52.1
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.52.1
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.52.1
- **fixed** β Make the health route checks blocking
- **fixed** β Revert some search progress traces
###### πͺ² Bug fixes
* Make the health route checks blocking by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6583
* Revert some search progress traces by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6584
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.52.0...v1.52.1
### v1.53.0 β v1.53.0 ποΈβ
- Date: 2026-08-10
- Version: v1.53.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.53.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.53.0
- **added** β Foreign filter now supports sharding by retrieving documents through the network when evaluating foreign filters and hydrating documents
- **changed** β Increase the limit of documents that a foreign filter can retrieve from 100 to 1000
- **added** β Add indexSize and usedIndexSize fields returned by GET /indexes/{index_uid}/stats and GET /stats
- **security** β Fix code security issues in GitHub Actions workflows
- **changed** β Bump quinn-proto from 0.11.14 to 0.11.16
###### **β¨ Enhancement**
- Sharding for foreign filters by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6517
- The foreign filter now supports sharding by retrieving the documents through the network when evaluating the foreign filters and hydrating the documents.
- The limit of documents that a foreign filter can retrieve has been increased from 100 to 1000.
- Adds `indexSize` and `usedIndexSize` returned by `GET /indexes/{index_uid}/stats` and in `GET /stats` by @tpayet in https://github.com/meilisearch/meilisearch/pull/6563
###### πΒ Security
- Fix code security issues in GitHub Actions workflows by @curquiza in https://github.com/meilisearch/meilisearch/pull/6565
- Bump quinn-proto from 0.11.14 to 0.11.16 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6538
###### **π© Miscellaneous**
- Bump peter-evans/repository-dispatch from 3.0.0 to 4.0.1 by @dependabot[bot] in https://github.com/meilisearch/meilisearch/pull/6556
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.51.0...v1.53.0
### v1.52.0 β v1.52.0 π
- Date: 2026-08-03
- Version: v1.52.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.52.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.52.0
- **added** β Introduce the /tasks/stream and /batches/stream SSE routes for establishing a live connection to the engine with push-based task and batch status updates
- **changed** β Improve search speed by converting an O(n) operation to O(1) when formatting documents in search results
- **fixed** β Fix duplicate pins in federated search
- **fixed** β Skip the settings update when nothing changes
###### β¨ Enhancement
- Introduce the `/tasks/stream` and `/batches/stream` SSE routes by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6533
This **experimental feature** allows establishing a live connection to the engine, avoiding the need to implement long polling and instead letting the engine provide new tasks, batches, and batch progress in a push-based manner. Using this route can drastically reduce network load when retrieving the status of a Meilisearch instance.
- Speed up the search a bit more by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6542
We improve the search speed when it comes to formatting the documents by making an `O(n)` operation, where `n` is the number of retrieved documents, become an `O(1)` operation. This improvement can significantly increase search speed when requesting a large (> 20) number of documents.
###### πͺ²Β Bug fixes
- Fix duplicate pins in federated search by @dureuill in https://github.com/meilisearch/meilisearch/pull/6543
- Skip the settings when nothing changes by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6544
### v1.51.0 β v1.51.0 π½
- Date: 2026-07-27
- Version: v1.51.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.51.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.51.0
- **added** β Add filter condition to dynamic search rules (DSR) that contains a single values key with a JSON object mapping facet names to filter values for rule activation
- **added** β Add lastUpdatedAt field to dynamic search rules returned by GET /dynamic-search-rules/{:ruleUid} and POST /dynamic-search-rules
- **added** β Add environment variables MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_FUEL, MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_OR_FUEL, MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_AND_FUEL, and MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_DEPTH_FUEL to control DSR fuel behavior
- **changed** β Dynamic search rules are now listed in descending lastUpdatedAt order with most recently updated rules first
- **changed** β Improve search speed by reducing internal work and retrieving data from disk only once across the entire search pipeline
- **changed** β Rename --experimental-dumpless-upgrade flag to --upgrade-db
- **removed** β Remove --experimental-replication-parameters flag
- **removed** β Remove --experimental-no-edition-2024-for-dumps flag
- **removed** β Remove --experimental-no-snapshot-compaction flag
- **fixed** β Restore support for legacy shorthand filterable attributes syntax
###### β¨ Enhancement
- **Add filter condition to DSRs** by @dureuill in https://github.com/meilisearch/meilisearch/pull/6505
#### New `filter` rule activation condition
Dynamic search rules (DSR) can now declare a new `filter` condition: it contains a single `values` key, whose value is a JSON object.
The keys of this `values` JSON object are the facet names (e.g., `color`, `genres`, ...), while their values are the values that a filter must resolve to for these facets, so that the rule is active.
Example of sending a DSR with a filter condition
```jsonc
// PATCH /dynamic-search-rules/test-filter
{
"conditions": {
"filter": {
"values": {
"color": "red",
"category": "shirt"
}
}
},
"actions": [
{
"selector": { "id": "red shirt on sales" },
"action": { "type": "pin", "position": 0 }
}
]
}
```
Example of search query that enables the DSR above
```jsonc
{
"filter": "(category = shirt AND color = red) OR (category = jeans AND color = blue)"
}
```
Note that the filter only needs to have one branch resolving to all the facet values declared in the rule for the rule to be active.
#### New `lastUpdatedAt` field
Dynamic search rules returned by `GET /dynamic-search-rules/{:ruleUid}` and `POST /dynamic-search-rules` contain an additional `lastUpdatedAt` field.
This field is automatically updated with the `enqueuedAt` value of the last task that modified the rule.
#### Rules are listed with the most recently updated first
`POST /dynamic-search-rules` now lists rules in descending `lastUpdatedAt` order, meaning that the most recently updated rules will be listed first.
#### New environment variables
New environment variables are defined to control the behavior of the DSR fuel:
- `MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_FUEL` (in range 0..4294967296): controls how many filter constraint combinations Meilisearch will attempt to resolve at search time before giving up and applying partial rules.
- `MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_OR_FUEL` (in range 0..65536): controls how many filter disjunctions Meilisearch will build when turning a filter to its canonical shape
- `MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_AND_FUEL` (in range 0..65536): controls how many filter conjunctions Meilisearch will build in total when turning a filter to its canonical shape
- `MEILI_EXPERIMENTAL_DSR_FUEL_FILTER_DEPTH_FUEL` (in range 0..256): controls the maximum recursive depth that Meilisearch allows when turning a filter to its canonical shape
- **Speed up search requests** by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6528
Improves Meilisearch search speed by avoiding unnecessary internal work. We drastically reduced the number of times we retrieve data from disk to a single time across the whole search pipeline. This improvement will have the greatest effect on datasets with a large number of distinct fields across documents. We have seen search speeds up to 5.4x on a dataset with more than 14k different fields.
- **Stabilize dumpless upgrade** by @curquiza in https://github.com/meilisearch/meilisearch/pull/6486
β οΈΒ Breaking change following the stabilization of an experimental feature β οΈ
The flag `β-experimental-dumpless-upgrade` is renamed `β-upgrade-db`, keeping the exact same behavior.
- **Remove unused experimental features** by @curquiza in https://github.com/meilisearch/meilisearch/pull/6489
β οΈ Breaking change: removing the following experimental featuresΒ β οΈ
- [Replication parameters](https://github.com/orgs/meilisearch/discussions/725): removing `--experimental-replication-parameters` because outdated. We now have another way to handle replication.
- [Import dumps with old document i
_[Truncated at 4000 characters β full notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.51.0]_
### v1.50.0 β v1.50.0 π
- Date: 2026-07-20
- Version: v1.50.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.50.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.50.0
- **changed** β Replace `priority` with `precedence` in dynamic search rules, where lower precedence means the rule is applied first
- **changed** β Modify `conditions` in dynamic search rules from an array to an object with `query` and `time` fields
- **changed** β Replace `contains` with `words` in `QueryCondition` and add support for `isEmpty: false` with `words`
- **changed** β Make `id` mandatory when specifying the `selector` of an `Action` in dynamic search rules
- **changed** β Replace `filter.attributePatterns` with `filter.query` in POST /dynamic-search-rules listing
- **changed** β Make DELETE and PATCH /dynamic-search-rules/{:ruleUid} register asynchronous tasks and return the task instead of the modified rule
- **changed** β Stop returning HTTP 404 for non-existent rule UIDs in DELETE and PATCH /dynamic-search-rules/{:ruleUid}
- **changed** β Change DELETE and PATCH /dynamic-search-rules/{:ruleUid} to work on follower remotes in sharded configurations without returning HTTP 400
- **changed** β Change behavior of GET indexes/:uid/documents, GET indexes/:uid/documents/:document_id, and POST indexes/:uid/documents/fetch to fetch from all shards when network experimental feature is enabled
- **changed** β Modify `conditions.query.words` matching behavior to match if all words appear in the query after normalization, rather than substring matching
- **changed** β Replicate dynamic search rules from leader to follower in sharded configurations
- **added** β Add DELETE /dynamic-search-rule route to delete all dynamic search rules
- **added** β Add `useNetwork` parameter to control network usage in document fetch routes
- **added** β Add DSR fuel concept with configurable environment variables MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS, MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES, MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS, and MEILI_EXPERIMENTAL_DSR_FUEL_WORD_FUEL
- **added** β Support partial wildcards in the `facets` parameter for search and federated search
- **changed** β Increase dynamic search rules scaling capacity to 75K rules without search impact
Meilisearch v1.50 revamps the [Dynamic Search Rules](https://www.meilisearch.com/docs/capabilities/search_rules/overview), adds support for federated document fetch in sharded configurations, among other improvements
##### Breaking changes
This release introduces breaking changes for users using some experimental features
###### `dynamicSearchRules` experimental feature
###### Request type changes
1. `priority` has been replaced with `precedence`, which better reflects the behavior (lower precedence means the rule is applied first)
2. `conditions` has been modified from an array to an object with two fields: "query" of type `QueryCondition` and "time" of time `TimeCondition`
3. New type `QueryCondition` that contains the fields `isEmpty` (as previously) and `words` instead of `contains` (same type)
4. It is now possible to pass `isEmpty: false` with `words` in a `QueryCondition`. Passing `isEmpty:true` with `words` still results in a synchronous error.
5. New type `TimeCondition` with fields `start` and `end` (unchanged semantics from previous type).
6. When specifying the `selector` of an `Action`, it is now mandatory to specify an `id`. Previously, it was optional, but the action would never trigger.
7. When listing rules with `POST /dynamic-search-rules`, `filter.attributePatterns` has been replaced with `filter.query`, an optional string that searches in rule `description` and `conditions.query.words`.
8. When calling `DELETE /dynamic-search-rules/{:ruleUid}` or `PATCH /dynamic-search-rules/{:ruleUid}` in a sharded configuration, endpoint will not return a HTTP 400 error if called on a follower remote rather than on the leader.
###### Response changes
1. `PATCH /dynamic-search-rules/{:ruleUid}` and `DELETE /dynamic-search-rules/{:ruleUid}` now register an asynchronous task..
2. The response is modified to return the registered task instead of the modified dynamic search rule.
3. HTTP 404 is no longer returned if the `{:ruleUid}` portion of the URL refers to a rule that doesn't exist. This is because rules are processed asynchronously, and is consistent with the behavior of `DELETE /indexes/{:indexUid}/documents/{:docId}` for `{:docId}`
###### `network` experimental feature
The default behavior for users using the network experimental feature with sharding configured (`leader` not `null`) will change on the following routes:
- **GET** `indexes/:uid/documents`
- **GET** `indexes/:uid/documents/:document_id`
- **POST** `indexes/:uid/documents/fetch`
Meilisearch will now fetch the documents from all the shards and not only on the local machine when processing the request.
To keep the same behavior as before, users will have to set `useNetwork` to `false` when making their request.
##### π Improvements
###### Scaling up the Dynamic Search Rules
- Dynamic search rules scale up to 75K rules without any impact on the search
- The API of Dynamic Search Rules has been simplified
- It is harder to send conditions that will result in the rules never activating
- This also unlocks future improvements such as filter activation conditions for search rules
###### Additions
- Add a new `DELETE /dynamic-search-rule` route that deletes all the DSRs
- Add the concept of "DSR fuel" that determines how much energy is spent resolving DSR during a search. The fuel is initialized with some default variables that can be overridden using environment variables:
- `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_COUNTED_WORDS`: max number of words considered inside of a search query for the purpose of finding `conditions.query.words` constraints. Defaults to 10, max value is 255
- `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_ACTIVE_RULES`: max number of active rules whose actions are evaluated. Defaults to 1000, max value is 4294967295
- `MEILI_EXPERIMENTAL_DSR_FUEL_MAX_PIN_ACTIONS`: max number of pin actions that are applied. Defaults to 100, max value is 4294967295
- `MEILI_EXPERIMENTAL_
_[Truncated at 4000 characters β full notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.50.0]_
### v1.49.0 β v1.49.0 πͺΊ
- Date: 2026-07-06
- Version: v1.49.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.49.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.49.0
- **changed** β Improve synonyms storage by loading them lazily during query processing, resulting in performance improvements of up to 13x depending on the number of synonyms
###### β¨ Enhancement
- Improve the synonyms storage by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6466
We improve synonyms' performance by changing how we store and retrieve them during query processing. Users may have experienced performance issues when the number of synonyms in an index was high, resulting in a significant impact on search performance. The Meilisearch support team advised moving the settings and synonyms-as-keywords to the dedicated documents. This is no longer an issue; synonyms are loaded lazily, only when a word matches a synonym. You can see performance improvements of up to 13x, depending on the number of synonyms.
###### π© Miscellaneous
- Fix the workflow after broken ranking scores by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6470
- Make OpenAPI rule less strict for routes returning 202 by @curquiza in https://github.com/meilisearch/meilisearch/pull/6488
### v1.48.3 β v1.48.3 π«β
- Date: 2026-06-29
- Version: v1.48.3
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.48.3
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.48.3
- **fixed** β Fix a rare race condition in S3 snapshot system that could cause internal errors when recycling internal buffers during snapshot upload
- **fixed** β Prevent remote federated search from returning the same document twice by properly forwarding internal filters to remote instances
- **added** β Add missing searchFilterParam to GET chat workspace settings response
#### πͺ²Β Bug fixes
- Fix a rare S3 snapshots bug by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6472
We fixed a rare bug that could appear when using the S3 snapshot system. The bug is a race condition that occurs when we try to recycle internal buffers to reduce memory usage, which can cause an internal error and abort the snapshot upload.
- Avoid remote search to return the same document twice by @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6473
When using the remote federated search, Meilisearch was returning the same document twice from different machines. This was due to an internal filter that was not forwarded properly to the remote instances.
#### **π© Miscellaneous**
- Add missing searchFilterParam to GET chat workspace settings response by @CaroFG in https://github.com/meilisearch/meilisearch/pull/6475
- Split unit tests into separate files (one commit per file) by @0xfandom in https://github.com/meilisearch/meilisearch/pull/6468
- Add missing information from pre-openAPI-migration by @curquiza in https://github.com/meilisearch/meilisearch/pull/6467
##### New Contributors
Thanks to @0xfandom, who made his first contribution in https://github.com/meilisearch/meilisearch/pull/6468 π
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.48.2...v1.48.3
### v1.48.2 β v1.48.2 π«
- Date: 2026-06-24
- Version: v1.48.2
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.48.2
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.48.2
- **security** β Fix CVE-2026-57824: Improper authentication leads to privilege escalation where an authenticated user with an index-scoped API and the appropriate set of actions could use global actions to read and write the global state of the Meilisearch instance
- **security** β Fix CVE-2026-57823: Improper authentication leads to information disclosure where a user with a search tenant token could get limited information about the existence of a document outside of the scope of the search rules attached to the tenant token
Meilisearch v1.48.2 and Meilisearch v1.47.1 address CVE-2026-57823 and CVE-2026-57824.
We recommend updating if you are in one of the following situations:
1. You have API keys where `indexes` is *not* `["*"]` and where `actions` contains more permissions than: `["search", "documents.*", "indexes.*", "tasks.cancel", "tasks.delete", "tasks.get", "settings.*", "stats.*", "fields.post"]`
2. You have [search tenant tokens](https://www.meilisearch.com/docs/capabilities/security/overview) and either an [embedder](https://www.meilisearch.com/docs/getting_started/glossary#embedder) or a [chat workspace](https://www.meilisearch.com/docs/capabilities/conversational_search/how_to/configure_chat_workspace)
* We recommend that users of Meilisearch v1.48 update to Meilisearch v1.48.2
* We recommend that users of Meilisearch v1.47 or lower update to Meilisearch v1.47.1
These versions both fix the following:
1. CVE-2026-57824: Improper authentication leads to privilege escalation: an authenticated user with an index-scoped API and the appropriate set of actions could use global actions to read and write the global state of the Meilisearch instance. Possibly impacted users of Meilisearch Cloud were contacted ahead-of-time.
2. CVE-2026-57823: Improper authentication leads to information disclosure: a user with a search tenant token could get some limited information about the existence of a document outside of the scope of the search rules attached to the tenant token, an indirect information about the content of the document.
We detected no trace of exploitation of these vulnerabilities.
We thank PuH4ck3rX for reporting these vulnerabilities :heart:
### v1.47.1 β v1.47.1 π¦
- Date: 2026-06-24
- Version: v1.47.1
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.47.1
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.47.1
- **security** β Fix CVE-2026-57824: prevent authenticated users with index-scoped API keys from using global actions to read and write global state
- **security** β Fix CVE-2026-57823: prevent users with search tenant tokens from obtaining limited information about document existence outside search rule scope
Meilisearch v1.48.2 and Meilisearch v1.47.1 address CVE-2026-57823 and CVE-2026-57824.
We recommend updating if you are in one of the following situations:
1. You have API keys where `indexes` is *not* `["*"]` and where `actions` contains more permissions than: `["search", "documents.*", "indexes.*", "tasks.cancel", "tasks.delete", "tasks.get", "settings.*", "stats.*", "fields.post"]`
2. You have [search tenant tokens](https://www.meilisearch.com/docs/capabilities/security/overview) and either an [embedder](https://www.meilisearch.com/docs/getting_started/glossary#embedder) or a [chat workspace](https://www.meilisearch.com/docs/capabilities/conversational_search/how_to/configure_chat_workspace)
* We recommend that users of Meilisearch v1.48 update to Meilisearch v1.48.2
* We recommend that users of Meilisearch v1.47 or lower update to Meilisearch v1.47.1
These versions both fix the following:
1. CVE-2026-57824: Improper authentication leads to privilege escalation: an authenticated user with an index-scoped API and the appropriate set of actions could use global actions to read and write the global state of the Meilisearch instance. Possibly impacted users of Meilisearch Cloud were contacted ahead-of-time.
2. CVE-2026-57823: Improper authentication leads to information disclosure: a user with a search tenant token could get some limited information about the existence of a document outside of the scope of the search rules attached to the tenant token, an indirect information about the content of the document.
We detected no trace of exploitation of these vulnerabilities.
We thank PuH4ck3rX for reporting these vulnerabilities :heart:
### v1.48.1 β v1.48.1 π«
- Date: 2026-06-22
- Version: v1.48.1
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.48.1
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.48.1
- **fixed** β Revert dumpless upgrade bug
Revert #6432 due to a dumpless upgrade bug report.
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.48.0...v1.48.1
### v1.48.0 β v1.48.0 π«β
- Date: 2026-06-22
- Version: v1.48.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.48.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.48.0
- **added** β Introduce a new POST /render-template route that can be used to render any template or fragment on any input
- **added** β Add renderRoute experimental feature that gates access to the /render-template route
#### **β¨ Enhancement**
##### [Experimental] Render π«β template route
> by @Mubelotix in https://github.com/meilisearch/meilisearch/pull/5765
Introduces a new `POST /render-template` route that can be used to render any template or fragment on any input and associated [`renderRoute` experimental feature](https://github.com/orgs/meilisearch/discussions/888) that gates access to the route.
This route can be used to test document templates and fragments before and after having configured an embedder.
A body payload for the route is of the form:
```jsonc
{
"template": /* templateTarget object */,
"input": /* inputTarget object or null */
}
```
where `template` describes the template or fragment to render, and `input` describes what to use to render the template.
Upon calling this route, Meilisearch responds with:
```jsonc
{
"template": "{{doc.text}}",
"rendered": "template text after rendering using the input"
}
```
where `template` contains the **un**rendered base text of the document template, or the **un**rendered base JSON object of a fragment, and `rendered` contains the result of rendering the template of the chosen input.
If `input` is `null` in the request, then `rendered` is `null` in the response, and the route can be used solely to retrieve a template or fragment from the settings of an index.
###### Before calling the route
The API of this route is subject to change, so before calling this route, please enable the `renderRoute` experimental feature:
```sh
PATCH /experimental-features --json '{"renderRoute": true}'
```
###### Examples
1. Rendering a document from an index on a document template from an embedder of that index
request
```jsonc
// POST /render-template
{
"template": {
"kind": "documentTemplate",
"indexUid": "movies",
"embedder": "myMoviesEmbedder"
},
"input": {
"kind": "indexDocument",
"indexUid": "movies",
"id": "2"
}
```
response
```jsonc
{
"template": "A movie titled {{doc.title}} whose description starts with {{doc.overview|truncatewords:10}}",
"rendered": "A movie titled Ariel whose description starts with Taisto Kasurinen is a Finnish coal miner whose father has..."
}
```
2. Rendering an inline document on a fragment from an embedder of an index
request
```jsonc
// POST /render-template
{
"template": {
"kind": "indexingFragment",
"indexUid": "dogs",
"embedder": "multi",
"fragment": "captionedImage"
},
"input": {
"kind": "inlineDocument",
"inline": { // pass your document inline as a JSON object
"kind": "dog",
"name": "iko",
"breed": "jack russell",
"mime": "image/png",
"image": "/9j/4AAQSk..."
}
}
}
```
response
```jsonc
{
"template": {
"content": [
{
"type": "text",
"text": "A picture of a {{doc.kind}} of breed {{doc.breed}}"
},
{
"type": "image_base64",
"image_base64": "data:{{doc.mime}};base64,{{doc.image}}"
}
]
},
"rendered": {
"content": [
{
"type": "text",
"text": "A picture of a dog of breed jack russell"
},
{
"type": "image_base64",
"image_base64": "data:image/png;base64,/9j/4AAQSk..."
}
]
}
}
```
3. Rendering a search query on a search fragment from a multimodal embedder of an index
request
```jsonc
// POST /render-template
{
"template": {
"kind": "searchFragment",
"indexUid": "testIndex",
"embedder": "testEmbedder",
"fragment": "justBreed"
},
"input": {
"kind": "inlineSearch",
"inline": { // pass the search query inline
"q": "unused",
_[Truncated at 4000 characters β full notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.48.0]_
### v1.47.0 β v1.47.0 π¦
- Date: 2026-06-15
- Version: v1.47.0
- Original notes: https://github.com/meilisearch/meilisearch/releases/tag/v1.47.0
- Permalink: https://whatsnew.fyi/product/meilisearch/releases/v1.47.0
- **added** β Support search personalization feature on federated search requests
- **changed** β Improved tokenizer-related settings support in the new settings indexer
- **changed** β Enhanced new settings indexer quality for better performance when changing locales, dictionary, synonyms, stop words, separator, and non-separator tokens
- **changed** β New settings indexer is now feature-complete and handles all settings tasks by default unless MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGS environment variable is set to true
- **added** β Expose more Prometheus metrics for improved observability on document throughput
- **fixed** β Putting attributeRank or wordPosition before words in the rankingRules list will no longer remove hits from the response
- **fixed** β Meilisearch will no longer ignore searchCutoffMs in some conditions when embedding documents
- **fixed** β Meilisearch will no longer fail to proxy a search request with a filter containing a single quote during remote federated search or useNetwork: true search requests
- **security** β Prevent shell injection in GitHub Actions release workflows
- **changed** β Refactored search pipeline to mutualize code with federated search performed under the hood
- **changed** β Some error messages have been modified due to search implementation refactor
- **removed** β Remove the now unused vectorStoreBackend setting
#### π Enhancements
##### Search personalization on federated search
We now support using the [search personalization feature](https://www.meilisearch.com/docs/capabilities/personalization/overview) on federated search requests.
Like `page`/`hitPerPage` or `limit`/`offset`, the personalization option must be specified in the federation attribute to work properly.
Otherwise, an error will be returned reminding you to move the attribute in federation.
By @ManyTheFish in https://github.com/meilisearch/meilisearch/pull/6414
##### The new settings indexer is feature complete π
- We now better support the tokenizer-related settings
- We improved the quality of the new settings indexer to enhance the engine's performance when changing the locales, the dictionary, synonyms, stop words, separator, and non-separator tokens.
- This makes the new settings indexer feature-complete, meaning that, unless you set the `MEILI_EXPERIMENTAL_NO_EDITION_2024_FOR_SETTINGS` environment variable to `true`, all settings tasks can now be handled by the new settings indexer, bringing a better scaling behavior, much faster cancellation, and a more precise progress view.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6409
##### Observability improvements
We expose more Prometheus metrics to improve observability, specifically to show more metrics on document throughput and ease debugging.
By @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6430
#### π¦ Fixes
- Putting attributeRank/ wordPosition before words in the rankingRules list will no longer remove hits from the response, by @pjdurden in https://github.com/meilisearch/meilisearch/pull/6437
- Meilisearch will no longer ignore the `searchCutoffMs` in some conditions when embedding documents, by @dureuill in https://github.com/meilisearch/meilisearch/pull/6447
- Meilisearch will no longer fail to proxy a search request with a filter containing a `'` during remote federated search or `useNetwork: true` search requests, by @dureuill in https://github.com/meilisearch/meilisearch/pull/6445
#### π Security
- CI: Prevent shell injection in GitHub Actions release workflows by @curquiza in https://github.com/meilisearch/meilisearch/pull/6420
#### π© Misc. changes
##### Search implementation refactor
Refactor the search pipeline to mutualize the code.
The new implementation will always perform a federated search under the hood, and then the output will be transformed into the expected route's output.
Noticeable changes from the user perspective:
- Some error messages have been modified
- Small breaking change: a few error codes change, such as `MultiSearch` <--> `Search`
##### Other changes
- Make it easier and less error-prone to declare a type that is used as a body parameter on a Meilisearch endpoint, by @dureuill in https://github.com/meilisearch/meilisearch/pull/6429
- Remove the now unused `vectorStoreBackend` setting from the settings, by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6399
- Replace custom hf-hub git dependency by the official one by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6442
- Update Python SDK test CI by @Strift in https://github.com/meilisearch/meilisearch/pull/6439
- Refactor the code to use the `MustStopProcessing` type everywhere by @Kerollmops in https://github.com/meilisearch/meilisearch/pull/6423
##### New Contributors
* @pjdurden made their first contribution in https://github.com/meilisearch/meilisearch/pull/6437
**Full Changelog**: https://github.com/meilisearch/meilisearch/compare/v1.46.1...v1.47.0