NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #4978 most downloaded on PyPI
The python client for Meilisearch API.
Last release 2 months ago
22 Jul 2026
Ships fairly regularly
a new release about every 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
68 releases · first in 2019
Add dynamic search rules support (#1265) @fjbarrett
foreignKeys settings (#1262) @addy790showInternalDatabaseSizes and sizeFormat (#1237) @vivek378521FieldDistribution.__getattr__ (#1236) @botbikamordehai2-sketchThanks again to @Strift, @addy790, @botbikamordehai2-sketch, @dependabot[bot], @fjbarrett, @qorexdevs, @sanders41, @vivek378521, dependabot[bot] and botbikamordehai2-sketch! 🎉
One column per quarter.
> This release requires Python 3.10 or higher.
[!IMPORTANT] This release requires Python 3.10 or higher.
Thanks again to @DhavalGojiya, @Strift, and @sanders41! 🎉
Reset content-type when sending request (#1241) @StephaneRob
Thanks again to @DhavalGojiya, @StephaneRob, @Strift, @dependabot[bot], and dependabot[bot]! 🎉
Add support for export api (#1171) @jawad-khan
Thanks again to @DhavalGojiya, @Strift, @VedantMadane, @awais786, @aznszn, @curquiza, @dependabot[bot], @jawad-khan, @sanders41, @vibeyclaw and dependabot[bot]! 🎉
Add support for multi-modal search (#1167) @awais786
custom_metadata in index methods (#1179) @jawad-khanThanks again to @Strift, @awais786, @aznszn, @jawad-khan and @orbin123! 🎉
feat: Add support for compacting database indexes. (#1161) @awais786
Thanks again to @Strift, @awais786 ! 🎉
Fix: make TaskResults.from_/next_ accept None so get_tasks doesn’t crash on empty pages. 🤗 (#1126) @ddboline
Thanks again to @bentxi13, @curquiza, @ddboline, @dependabot[bot], and dependabot[bot]! 🎉
Added support for conversational search (#1133) @EazyAl
Thanks again to @EazyAl, @Strift, @brunoocasali, @curquiza ! 🎉
Fix Document model: bad test, attribute bug, and field cleanup (#1113) @nnethercott
Fix Document model: bad test, attribute bug, and field cleanup (#1113) @nnethercott
__doc field in Document has been removed to avoid data duplication.Document.__getattr__ now correctly returns attribute values rather than the attribute name itself.document._Document__doc (e.g. through iterators) will break.document._Document__doc, switch to using direct attribute access or casting with dict(doc).doc = index.get_document("foo")
doc_dict = dict(doc)
doc_dict.pop("_Document__doc") # ❌ Not needed anymore
Refactor TaskResults, IndexStats (#1066) @ellnix (⚠️ this potentially have a breaking-change)
facetSearch and prefixSearch (#1068) @thicolaresdisableOnNumbers to typo tolerance settings (#1116) @nnethercottNetworks feature (#1097) @MuddyHopemerge_group to trigger tests (#1117) @brunoocasaliThanks again to @MuddyHope, @brunoocasali, @ellnix, @nnethercott, @thicolares! 🎉
Sync embedder models with latest meili settings (#1075) @ellnix
Thanks again to @MuddyHope, @Strift, & @ellnix! 🎉
This version introduces features released on Meilisearch v1.13.0 🎉
This version introduces features released on Meilisearch v1.13.0 🎉
Thanks again to @ellnix and @Strift! 🎉
Improve documentation for Index.add_documents() methods (#1057) @samuelbradshaw
Thanks again to @samuelbradshaw and @sanders41! 🎉
Make the minimum supported version of Meilisearch v1.2.0 (#1045) @martinnj
Index.get_documents (#1045) @martinnjThanks again to @martinnj, and @sanders41! 🎉
Drop support for python 3.8 and add 3.13 support (#1039) @sanders41
Compatibility of embedder settings with Meilisearch v1.11 (#1018) @sanders41 & @dureuill
embedder settings with Meilisearch v1.11 (#1018) @sanders41 & @dureuillrankingScoreThreshold search parameter (#1008) @aweidnerThanks again to @MuddyHope, @aweidner, @curquiza, @dureuill and @sanders41! 🎉
add: frequency value for matchingStrategy search parameter (#998) @239yash
distinct keyword in index search (#1005) @aweidnerThanks again to @239yash, @aweidner! 🎉
Fixed a typing mistake in /meilisearch/index.py:1084 (#993) @Nikolas-Lehto
Thanks again to @Nikolas-Lehto, and @sanders41! 🎉
Allow passing a custom serializer for documents (#974) @sanders41
Added search cutoff ms settings (#964) @the-sinner
Thanks again to @alenpaulvarghese, @sanders41 and @the-sinner! 🎉
Fix reported type of decorator (#956) @sanders41
Thanks again to @curquiza, and @sanders41! 🎉
This version introduces features released on Meilisearch v1.7.0 :tada: Check out the changelog of Meilisearch v1.7.0 for more information on the chang
This version introduces features released on Meilisearch v1.7.0 :tada: Check out the changelog of Meilisearch v1.7.0 for more information on the changes.
vectorStore feature: dimensions field is now required when using OpenAI models (#928) @sanders41This release is only breaking for users that are using the experimental vector search feature. This release makes vector search compatable with the ch
This release is only breaking for users that are using the experimental vector search feature. This release makes vector search compatable with the changes made in Meilisearch v1.6.
Thanks again to @CaroFG, @meili-bors[bot], and @sanders41! 🎉
Supports typing around documents with Mapping (#896) @geeksambhu
Mapping (#896) @geeksambhucreate_snapshot method (#885) @pbelokonThanks again to @brunoocasali, @curquiza, @geeksambhu, @pbelokon and @sanders41! 🎉
Support user dictionary loading (#870) @ellnix
Thanks again to @alallema, @ellnix, @meili-bors[bot], @sanders41 and @zebra-f! 🎉
Add total to TasksResult (#833) @arturgoms
TasksResult (#833) @arturgomsThanks again to @alallema, @arturgoms, @curquiza, @cyprx, and @sanders41! 🎉
This version introduces features released on Meilisearch v1.3.0 :tada: Check out the changelog of Meilisearch v1.3.0 for more information on the chang
This version introduces features released on Meilisearch v1.3.0 :tada: Check out the changelog of Meilisearch v1.3.0 for more information on the changes.
⚠️ If you want to adopt new features of this release, update the Meilisearch server to the according version.
⚠️ The EXPERIMENTAL features are not covered by semver. To explicitly opt-in, check this guide.
Thanks again to @Strift, @alallema, and @sanders41! 🎉
Drop Python 3.7 support (#788) @sanders41
Thanks again to @alallema and @sanders41! 🎉
This version introduces features released on Meilisearch v1.2.0 :tada: Check out the changelog of Meilisearch v1.2.0 for more information on the chang
Release CHANGELOG:
This version introduces features released on Meilisearch v1.2.0 :tada: Check out the changelog of Meilisearch v1.2.0 for more information on the changes. ⚠️ If you want to adopt new features of this release, update the Meilisearch server to the according version.
delete_documents() now supports a new parameter filter that allows deleting documents by filtering. The filter field works precisely like the filter field used on the search method. See the docs on how to use filters. (#756) @sanders41filter key from the get_documents/documents methods. The filter field works precisely like the filter field used on the search method. See the docs on how to use filters. (#757) @sanders41Thanks again to @sanders41! 🎉
Return Task instances from task methods instead of Dict (#750) @sanders41
Task instances from task methods instead of Dict (#750) @sanders41None for the body when updating settings (#765) @sanders41cancel_task (#761) @sanders41Thanks again to @KShivendu, @alallema, @curquiza and @sanders41! 🎉
This version introduces features released on Meilisearch v1.1.0 :tada: Check out the changelog of Meilisearch v1.1.0 for more information on the chang
This version introduces features released on Meilisearch v1.1.0 :tada: Check out the changelog of Meilisearch v1.1.0 for more information on the changes.
csv-delimiter when adding and updating documents in CSV format (#716) @alallemaclient.multi_search() provides the possibility to make multiple requests at once (#714) @alallemaExample:
client.multi_search(
[
{'indexUid': 'movies', 'q': 'pooh', 'limit': 5},
{'indexUid': 'movies', 'q': 'nemo', 'limit': 5},
{'indexUid': 'movie_ratings', 'q': 'us'}
]
)
Thanks again to @alallema and @sanders41! 🎉
Update the return type of methods (#676) @sanders41
task methods to a TaskHandler class (#662) @AzanulThanks again to @Azanul, @alallema, @brunoocasali and @sanders41! 🎉
This version makes this package compatible with Meilisearch v1.0.0 🎉 Check out the changelog of Meilisearch v1.0.0 for more information on the changes
This version makes this package compatible with Meilisearch v1.0.0 🎉 Check out the changelog of Meilisearch v1.0.0 for more information on the changes(https://github.com/meilisearch/meilisearch-python/pull/635).
datetime type for consistency. Class impacted: Task and TasInfo (#661) @Azanuldetails fields in Task class Dict[str, Any] -> Union[Dict[str, Any], None] (#664) @Azanulupdate_documents_csv(str_documents: str, primary_key: Optional[str] = None) -> TaskInfo (#654) @sajdakabirThis version makes this package compatible with Meilisearch v0.30.0 :tada: Check out the changelog of Meilisearch v0.30.0 for more information on the
This version makes this package compatible with Meilisearch v0.30.0 :tada: Check out the changelog of Meilisearch v0.30.0 for more information on the changes.
client.cancel_tasks method that lets you cancel enqueued and processing tasks (#596) @alallemapagination strategy with the search parameters page and hitsPerPage (#595) @alallemaclient.delete_tasks method that lets you deleted tasks (#598) @alallemaclient.swap_indexes method that lets you swap two indexes (#603) @alallemaget_tasks name changes: #597
status -> statusesindex_uid -> index_uidstype -> typesThanks again to @alallema! 🎉
New ndjson handlers (#560) @Azanul
Thanks again to @3t8, @Ambareen09, @Azanul, @Dark-Rock, @Leigh-Ola, @adripo, @alallema, @dibashthapa, @kaggrwal, @sanders41 and kumar! 🎉
Methods: get_document, delete_document and delete_documents can now take both types str or int (#545) @sarvesh4396
get_document, delete_document and delete_documents can now take both types str or int (#545) @sarvesh4396Thanks again to @alallema, @brunoocasali, @kaggrwal and @sarvesh4396! 🎉
This breaking change *__may not affect you__*, but in any case, you should check your search queries if you want to keep the same behavior from v0.28.
This version makes this package compatible with Meilisearch v0.29.0 :tada: Check out the changelog of Meilisearch v0.29.0 for more information on the changes.
matchingStrategy (#522) @brunoocasaliactions field during key creation now accepts wildcards on actions. For example, indexes.* provides rights to indexes.create, indexes.get,indexes.delete, indexes.delete, and indexes.update. (#521) @brunoocasaliThis breaking change may not affect you, but in any case, you should check your search queries if you want to keep the same behavior from v0.28.
NOT filter keyword does not have an implicitly EXIST operator anymore. Check out for more information: https://github.com/meilisearch/meilisearch/issues/2486Thanks again to @alallema, @brunoocasali, ! 🎉
Drop python 3.6 support (#529) @sanders41
Thanks again to @alallema and @sanders41! 🎉
Note: ⚠️ ⚠️ ⚠️ This release replaces the v0.19.2, which should be a minor update instead of a patch update due to a Breaking Change
Note: ⚠️ ⚠️ ⚠️ This release replaces the v0.19.2, which should be a minor update instead of a patch update due to a Breaking Change
Document, Index, and Task are now classes, and the attributes of these classes are now accessible via dot notation:document.offset, document.limit, document.totaltask.uid, task.duration, task.status ...Thanks again to @ElamC, @alallema, @brunoocasali! 🎉
⚠️ ⚠️ You should be aware that this release contains a breaking-change. And you probably face problems like this: https://github.com/meilisearch/meili
⚠️ ⚠️
You should be aware that this release contains a breaking-change. And you probably face problems like this: https://github.com/meilisearch/meilisearch-python/issues/532
➡️ So we highly recommend you to move to 0.20.0 or go back to 0.19.1.
Thanks again to @ElamC, @alallema, @brunoocasali! 🎉
Add support to the pagination setting customization (#504) @voloyev
Thanks again to @alallema, @sapristi and @voloyev! 🎉
This version makes this package compatible with Meilisearch v0.28.0 :tada: Check out the changelog of Meilisearch v0.28.0 for more information on the
This version makes this package compatible with Meilisearch v0.28.0 :tada: Check out the changelog of Meilisearch v0.28.0 for more information on the changes.
update_key() can update only name and description fields. #477get_tasks() has additional parameters for filtering:: type, status and indexUid. #476client.get_tasks(...) and index.get_tasks() now returns the following fields: results, limit, from, next.#476index.search changes in the response fields: #478
nbHits replaced with estimatedTotalHitsexhaustiveNbHits is deletedexhaustiveFacetsCount is deletedmatches renamed showMatchesPositionfacetsDistribution response parameter is renamed facetDistribution.index.search changes in the request parameters: #478
matches renamed showMatchesPositionfacetsDistribution request parameter is renamed facets.index.get_documents() request parameters: #481
attributesToRetrieve replaced with fields.client.get_indexes and client.get_raw_indexes now return the following fields: results, limit, offset, total. #478index.get_documents and client.get_documents now return the following fields: results, limit, offset, total. #481index.get_documents query parameter attributesToRetrieve is now called fields #481client.get_dump_status and wait_for_dump_creation have been removed #479client.create_dump() now returns tasks, similar to what add_documents or create_index returns #479client.generate_tenant_token(api_key_uid, search_rules, expires_at) has now a mandatory api_key_uid parameter which should contain the uid of a specific API key. #484index.get_tasks and client.get_tasks accept pagination metadata, added limit (default: 20), from. #476client.get_indexes accept pagination metadata, added limit (default: 20) and offset (default: 0). #478client.get_keys accept pagination metadata, added limit (default: 20) and offset (default: 0). #477client.get_key(key_or_uid) can now also find keys based on their key uid. #477client.create_key(options) lets you specify a custom uid (optionally) to create a new Key. #477index.get_documents now accepts pagination parameters: limit (default: 20) and offset (default: 0). #481Thanks again to @alallema, @curquiza, and @roshammar! 🎉
This version makes this package compatible with Meilisearch v0.27.0🎉 Check out the changelog of Meilisearch v0.27.0 for more information about the cha
This version makes this package compatible with Meilisearch v0.27.0🎉 Check out the changelog of Meilisearch v0.27.0 for more information about the changes.
index.get_typo_tolerance()
index.update_typo_tolerance(params)
index.reset_typo_tolerance()Add User-Agent header to have analytics in every HTTP request (#433) @brunoocasali
Analytics is enabled by default in the server, but you can disable them by following this guide Also, of course, every analytics data we collect are ANONYMOUS read the guide for more information.
Thanks again to @alallema, @brunoocasali! 🎉
:tada: Check out the changelog of MeiliSearch v0.26.0 for more information about the :danger: Breaking changes about the flag and dump new behavior.
This version makes this package compatible with MeiliSearch v0.25 up to v0.26.0. :tada: Check out the changelog of MeiliSearch v0.26.0 for more information about the :danger: Breaking changes about the flag and dump new behavior. (#407)
generateTenantToken() as a result of the addition of the multi-tenant functionality.
This method creates a JWT tenant token that will allow the user to have multi-tenant indexes and thus restrict access to documents based on the end-user making the search request. (#412) @alallemaThanks again to @alallema, @brunoocasali, @curquiza! 🎉
This package version is compatible with MeiliSearch v0.25.0
This package version is compatible with MeiliSearch v0.25.0 (#370)
Authorization header instead of X-Meili-API-Key (https://github.com/meilisearch/meilisearch-python/pull/371)delete_index_if_exists and get_or_create_index (#381) @alallemacreate_index(), update_index(), delete_index() are now asynchrone and return a task response instead of an Index.index.create and index.delete from index return a task.wait_for_pending_update() is renamed into wait_for_task and is accessible from index and from client.index.wait_for_task() method call /tasks/:uidindex.get_update_status is renamed index.get_taskindex.get_all_update_status is renamed index.get_tasksclient.wait_for_task() call /tasks/:uidclient.get_tasks that calls /tasksclient.get_task that calls /tasks/:uid
Notes: The only two methods that now return an Index are client.index() and client.get_index()apiKey to api_key to comply with pylint (#386) @alallemaclient.get_keys does not return an object of keys, but an array of keys. Check out keys API references.Thanks again to @alallema, @sanders41, and @voloyev! 🎉
This package version is compatible with MeiliSearch v0.24.0
This package version is compatible with MeiliSearch v0.24.0 (#353)
update method which now takes a primary as argument (#346) @sanders41error_code and error_link into code and link in the error handler (#355) @curquizaThanks again to @Sukriti-sood, @Yoda-Canada, @alallema, @curquiza, @jrinder42, and @sanders41! 🎉
This package version is compatible with MeiliSearch v0.23.0
This package version is compatible with MeiliSearch v0.23.0
CSV NDJSON (#329) @alallema:
add_documents_json(string_docs, primary_key)add_documents_ndjson(string_docs, primary_key)add_documents_csv(string_docs, primary_key)add_documents_raw(string_docs, primary_key, type)Thanks again to @AbihaFatima, @alallema, @curquiza, @darensin01, @mk1107, and @moazfarrukh! 🎉
This package version is compatible with MeiliSearch v0.22.0 🎉
This package version is compatible with MeiliSearch v0.22.0 🎉
sort feature compatibility (#318) @alallema. More about sorting.
get_sortable_attributes, set_sortable_attributes, reset_sortable_attributes.sort parameter during search.Thanks again to @alallema, @curquiza! 🎉
This version makes this package compatible with MeiliSearch v0.21.0 🎉 Check out the changelog of MeiliSearch v0.21.0
This version makes this package compatible with MeiliSearch v0.21.0 🎉 Check out the changelog of MeiliSearch v0.21.0
Thanks again to @alallema, @curquiza, and @sanders41! 🎉
Adding type hints and mypy (#267) @sanders41
Thanks again to @sanders41! 🎉
Adding possibility to send body null and tests (#256) @alallema
Thanks again to @alallema, @bidoubiwa, @curquiza, and @sanders41! 🎉
Standardize health method (#246) @alallema
Thanks again to @alallema and @curquiza! 🎉
Added an option to specify a timeout duration (#232) @sanders41
Thanks again to @sanders41 @bb, and @ritwickdsouza! 🎉
Introduction of the index() method that replaces get_index(). get_index() is still available but does HTTP call, so this should be only used to fetch
index() method that replaces get_index(). get_index() is still available but does HTTP call, so this should be only used to fetch information from the MeiliSearch instance. See our Getting Started to use this package the right way (#175) @curquizaIndex class: primary_key. You can now use client.get_index('books').primary_key to access the primary key of your index. (#175) @curquizaget_index() is still present but does an HTTP call. This method should be only used to fetch information from the MeiliSearch instance, not to manipulate an Index object in your code base. Use index() instead. See our Getting Started to be sure using this SDK the most optimized way. (#175) @curquizainfo() into fetch_info() (#175) @curquizaupdate_index() method return an Index instance (#176) @curquizaThanks again to @bidoubiwa, @curquiza, and most of all to @kamyar for having refactored the tests suite! 🎉
Remove the PUT /health routes (#166) @eskombro
Also, thanks to @ledo01! 🎉
Add dumps methods (#157) @eskombro Related docs: https://docs.meilisearch.com/references/dump.html#dumps
Error handling: raise from ... (#145) @eskombro
Thanks again to @eskombro! 🎉
Remove sys-info route (#130) @eskombro
Thanks again to @eskombro! 🎉
Add error code, message and link to MeiliSearchApiError (#117) @eskombro
Thanks again to @eskombro! 🎉
Add release drafter (#104) @curquiza
Thanks again to @curquiza, and @eskombro! 🎉
Your coding agent can read these notes before it upgrades. Set up the MCP server →