Add getting started section#3496
Conversation
Import the Getting started tab with overview, features catalog, 10 SDK quick starts, 4 framework guides, 4 instant-meilisearch guides, and 6 integration guides. Fix ~120 broken internal links from the import and expand features page to cover all Meilisearch capabilities. Entire-Checkpoint: 9c68757644a6
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis PR creates a new "Getting started" documentation section with SDK quickstarts, framework and integration guides, feature/glossary/good-practices pages; updates docs navigation and extensive redirects in Changes
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
📝 Coding Plan
Warning Review ran into problems🔥 ProblemsGit: Failed to clone repository. Please run the Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Is it expected that some guides can be found on 2 sections: 'Getting started' and 'Guides' sections? |
|
No you're right I should probably remove the ones on the guide section and add a redirect :) |
Entire-Checkpoint: 9c68757644a6
There was a problem hiding this comment.
Actionable comments posted: 17
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
getting_started/instant_meilisearch/vue.mdx (1)
117-117:⚠️ Potential issue | 🟡 MinorAdd missing space in heading.
"6.Start" should be "6. Start" for consistency with other numbered headings.
Proposed fix
-## 6.Start the app and search as you type +## 6. Start the app and search as you type🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@getting_started/instant_meilisearch/vue.mdx` at line 117, The heading "6.Start the app and search as you type" is missing a space after the period; update the heading text in getting_started/instant_meilisearch/vue.mdx from "6.Start the app and search as you type" to "6. Start the app and search as you type" so it matches the spacing style of other numbered headings.getting_started/frameworks/strapi.mdx (1)
63-65:⚠️ Potential issue | 🟡 MinorTypo in image alt text: "categorie's" should be "category's".
Proposed fix
- <img src="/assets/images/strapi-v4/strapi-add-category.png" alt="Strapi dashboard: create an entry form, arrow indicating the location of the categorie's location in the right side menu" /> + <img src="/assets/images/strapi-v4/strapi-add-category.png" alt="Strapi dashboard: create an entry form, arrow indicating the category's location in the right side menu" />🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@getting_started/frameworks/strapi.mdx` around lines 63 - 65, Update the img alt text that currently contains the typo "categorie's" to the correct "category's" in the <img> tag (the alt string beginning "Strapi dashboard: create an entry form, arrow indicating the location of the ... location in the right side menu"); locate the <img> element and replace "categorie's" with "category's" so the alt attribute reads correctly.
🧹 Nitpick comments (3)
getting_started/overview.mdx (1)
50-57: Consider using absolute paths for consistency.The card
hrefvalues use relative paths (getting_started/features,getting_started/sdks/javascript) while other links in this PR use leading slashes (/getting_started/overview). For consistency and to avoid potential path resolution issues, consider using absolute paths.Suggested fix
<CardGroup cols={2}> - <Card title="Explore features" icon="sparkles" href="getting_started/features"> + <Card title="Explore features" icon="sparkles" href="/getting_started/features"> Discover all Meilisearch capabilities </Card> - <Card title="Choose your SDK" icon="code" href="getting_started/sdks/javascript"> + <Card title="Choose your SDK" icon="code" href="/getting_started/sdks/javascript"> Get started with your preferred language </Card> </CardGroup>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@getting_started/overview.mdx` around lines 50 - 57, The CardGroup/Card block uses relative hrefs ("getting_started/features", "getting_started/sdks/javascript"); update the Card components' href props to use absolute paths (prefix with a leading slash) to match the rest of the site and avoid resolution issues — e.g., change the href values on the Card elements in the CardGroup to "/getting_started/features" and "/getting_started/sdks/javascript".getting_started/instant_meilisearch/javascript.mdx (1)
100-118: Clarify thatprocess.envrequires a build tool.The "Using your own data" section shows
process.env.MEILISEARCH_URL, but this won't work in a plain HTML file like the quick example above. Users may expect to drop this into their HTML and have it work. Consider clarifying that this pattern requires a bundler (Vite, webpack) or showing the browser-compatible alternative.Suggested clarification
## Using your own data -The example above uses a public demo instance. To use your own Meilisearch instance: +The example above uses a public demo instance. To use your own Meilisearch instance with a bundler like Vite or webpack: ```javascript const { searchClient } = instantMeiliSearch( process.env.MEILISEARCH_URL, // Your instance URL process.env.MEILISEARCH_API_KEY // Your search API key );
+For plain HTML without a bundler, replace the values directly:
+
+```javascript
+const { searchClient } = instantMeiliSearch(
- 'https://your-instance.meilisearch.io',
- 'your_search_api_key'
+);
+```</details> <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@getting_started/instant_meilisearch/javascript.mdxaround lines 100 - 118,
The snippet uses process.env.MEILISEARCH_URL and process.env.MEILISEARCH_API_KEY
which won’t work in a plain browser HTML file; update the copy around
instantMeiliSearch to explicitly state that process.env requires a build tool or
server-side environment (e.g., Vite/webpack/Node) and add a short
browser-compatible alternative that tells users to pass literal strings (or a
runtime-injected window/global variable) for the URL and API key instead of
process.env.</details> </blockquote></details> <details> <summary>getting_started/integrations/gatsby.mdx (1)</summary><blockquote> `186-213`: **Consider adding the install step for the search UI packages.** This section jumps straight into imports from `react-instantsearch` and `@meilisearch/instant-meilisearch`, but never installs them, so the example is not self-contained. A short npm/yarn snippet right before the code block would make it copy-pasteable. Based on learnings, "Documentation should be thorough, containing all information users need to use Meilisearch." <details> <summary>🤖 Prompt for AI Agents</summary>Verify each finding against the current code and only fix it if needed.
In
@getting_started/integrations/gatsby.mdxaround lines 186 - 213, Add an
npm/yarn install step for the UI and connector packages so the example is
copy-pasteable: mention installing react-instantsearch (or
react-instantsearch-dom vX if applicable) and@meilisearch/instant-meilisearch
before the code block (e.g., npm install react-instantsearch
@meilisearch/instant-meilisearchor the yarn equivalent). Ensure the install
snippet appears immediately above the example that imports InstantSearch,
SearchBox, Hits and instantMeiliSearch, and optionally note which package
provides instantMeiliSearch and which provides InstantSearch/SearchBox/Hits (to
make the dependencies clear).</details> </blockquote></details> </blockquote></details> <details> <summary>🤖 Prompt for all review comments with AI agents</summary>Verify each finding against the current code and only fix it if needed.
Inline comments:
In@getting_started/frameworks/laravel.mdx:
- Line 191: Replace the incorrect capitalization in the sentence "Of course, the
code is open-sourced on Github. 🎉"
by changing "Github" to the official product name "GitHub" so the link text
reads "GitHub. 🎉".- Line 186: Update the Multi-search link in the line containing
"Multi-search" so the URL points to
the correct multi-search endpoint
"/reference/api/search/perform-a-multi-search"; locate that exact markdown link
text in getting_started/frameworks/laravel.mdx and replace the href only,
leaving the link text unchanged.In
@getting_started/frameworks/symfony.mdx:
- Around line 196-203: The three Card components still link to the old
/products/... paths; update their hrefs to the new /learn/... namespace so
navigation matches the rest of the import. Locate the Card elements with titles
"Full-text search", "Filtering", and "AI-powered search" and change their href
values from "/products/full_text_search/overview" ->
"/learn/full_text_search/overview",
"/products/faceted_search/filter_search_results" ->
"/learn/faceted_search/filter_search_results", and
"/products/hybrid_search/getting_started" ->
"/learn/hybrid_search/getting_started".- Around line 11-14: Update the prerequisites to state "PHP 8.0 or higher" (the
code examples use PHP 8 features: attribute syntax like #[...] used in the
example classes and constructor property promotion in the constructor examples),
and do not attempt to downgrade the examples to 7.4; leave the examples as-is.
Also update the "next-step card" links at the bottom of the document to use the
/learn/ paths instead of /products/ for consistency with other framework guides
(replace any /products/... links in the next-step card block with the
corresponding /learn/... URLs).In
@getting_started/instant_meilisearch/docsearch.mdx:
- Around line 86-93: The docker example in docsearch.mdx sets
MEILISEARCH_HOST_URL and MEILISEARCH_API_KEY to literal quoted strings; update
the docker run snippet so the environment variables use placeholder tokens
<MEILISEARCH_URL> and <MASTER_KEY> instead of 'MEILISEARCH_URL'/'MASTER_KEY' for
MEILISEARCH_HOST_URL and MEILISEARCH_API_KEY, and add one short sentence below
the snippet clarifying that these placeholders must be replaced with the user’s
actual Meilisearch instance URL and API key before running the docs-scraper
command (referencing the docker run command and the
MEILISEARCH_HOST_URL/MEILISEARCH_API_KEY env names).- Around line 153-161: Replace all client-side examples that map apiKey to
MASTER_KEY with instructions to use a search-only key (e.g., the "Default Search
API Key" or a key named SEARCH_API_KEY) and update the explanatory text for the
hostUrl/apiKey/indexUid block to call out that apiKey must be a search-only key;
keep a clear note that MASTER_KEY is a server-side credential only (used in
backend code or deployment config), and ensure the config file example and the
warning text explicitly distinguish search-only keys from MASTER_KEY to prevent
accidental exposure in browser-shipped code.In
@getting_started/instant_meilisearch/react.mdx:
- Line 45: Update the broken glossary link for the InstantSearch docs by
replacing the incorrect path/getting_started/glossary/indexes#index-uidwith
the correct/learn/getting_started/indexes#index-uidin the Markdown that
mentions<InstantSearch>; apply the same replacement in the corresponding Vue
guide where the same link appears so both React and Vue guides point to the
correct glossary anchor.In
@getting_started/instant_meilisearch/vue.mdx:
- Line 69: Update the broken glossary link in the documentation line describing
the ais-instant-search widget: replace the incorrect URL
/getting_started/glossary/indexes#index-uidwith the correct path
/learn/getting_started/indexes#index-uidso the link to the "index-uid" anchor
resolves properly in the vue.mdx content mentioning the ais-instant-search
widget.In
@getting_started/integrations/meilisync.mdx:
- Around line 274-275: The "Full-text search" next-step Card currently links to
the old path "/products/full_text_search/overview"; update its href to the
current docs namespace used across the PR (e.g., change href on the Card with
title "Full-text search" and icon "magnifying-glass" to the equivalent
"/learn/..." path used elsewhere) so the internal link is not stale and follows
the new routing convention.In
@getting_started/integrations/postman.mdx:
- Around line 33-37: Update the alt text of the illustrative image where it
currently reads "Setting the 'URL' to http://localhost:7700/ and 'indexUID' to
indexUId in the Variables tab." — change the substring "indexUId" to "indexUID"
so the alt attribute exactly matches the rest of the docs; locate the <img ...
alt="..."> element in the postman example and correct the capitalization.In
@getting_started/sdks/dotnet.mdx:
- Around line 92-102: UpdateFilterableAttributesAsync returns a TaskInfo and
does not wait for the settings change to apply, so the subsequent call to
index.SearchAsync(...) may race and fail; fix it by capturing the
returned TaskInfo from UpdateFilterableAttributesAsync (e.g., var task = await
index.UpdateFilterableAttributesAsync(...)) and then calling await
index.WaitForTaskAsync(task.TaskUid) before calling index.SearchAsync, using the
existing WaitForTaskAsync method to ensure the filterable fields are applied.In
@getting_started/sdks/java.mdx:
- Around line 17-32: The Maven/Gradle install snippets are missing the Gson
dependency required by the examples that call new Gson().toJson(movies) and
import com.google.gson.Gson; add the Gson dependency (groupId
com.google.code.gson, artifactId gson, e.g., version 2.10.1) to the Maven
dependencies block and add the corresponding implementation line to the Gradle
snippet so the code compiles.In
@getting_started/sdks/javascript.mdx:
- Around line 71-80: The settings update is only enqueued by
updateFilterableAttributes and the subsequent search may run before it
completes; capture the returned EnqueuedTask from
client.index('movies').updateFilterableAttributes(...) and call await
client.waitForTask(task.taskUid) (using the same task variable) before invoking
client.index('movies').search(...) so the filterable attribute change has
finished applying.In
@getting_started/sdks/rust.mdx:
- Around line 18-23: Update the meilisearch-sdk dependency in the Cargo.toml
dependencies block: replace the existing meilisearch-sdk = "0.27" entry with
meilisearch-sdk = "0.32.0" so the getting_started Rust SDK example references
the latest stable release; ensure the change is made within the [dependencies]
section where meilisearch-sdk is declared.In
@getting_started/sdks/swift.mdx:
- Around line 100-112: The sample calls updateFilterableAttributes on index but
does not wait for the returned task to complete before running the filtered
search; capture the returned task from updateFilterableAttributes, wait for it
to finish successfully (e.g., poll the task status or call the SDK's
wait-for-task helper using the task id) and only then construct SearchParameters
and call index.search; also check the task succeeded before proceeding so you
don't get "attribute is not filterable" errors.- Around line 42-48: The Swift examples use ProcessInfo.processInfo.environment
but don't import the Foundation framework, causing compilation errors; add an
import Foundation at the top of the snippets that create the MeiliSearch client
(the block that defines client with MeiliSearch(...) and the similar block
around lines 117–124) so ProcessInfo is available before calling
ProcessInfo.processInfo.environment.- Around line 132-149: The example uses a top-level Task { } which may not run
to completion; replace the bare Task block with a proper async entry point
(e.g., define an@mainstruct Main with a static async main() throws and move
the current code into that method) so the awaited calls to client.index(...),
index.addDocuments(...), client.waitForTask(...), and index.search(...) reliably
execute; alternatively, keep the Task but ensure the process stays alive (e.g.,
call dispatchMain())—prefer the@mainasync main approach for minimal runnable
examples.
Outside diff comments:
In@getting_started/frameworks/strapi.mdx:
- Around line 63-65: Update the img alt text that currently contains the typo
"categorie's" to the correct "category's" in thetag (the alt string
beginning "Strapi dashboard: create an entry form, arrow indicating the location
of the ... location in the right side menu"); locate theelement and
replace "categorie's" with "category's" so the alt attribute reads correctly.In
@getting_started/instant_meilisearch/vue.mdx:
- Line 117: The heading "6.Start the app and search as you type" is missing a
space after the period; update the heading text in
getting_started/instant_meilisearch/vue.mdx from "6.Start the app and search as
you type" to "6. Start the app and search as you type" so it matches the spacing
style of other numbered headings.
Nitpick comments:
In@getting_started/instant_meilisearch/javascript.mdx:
- Around line 100-118: The snippet uses process.env.MEILISEARCH_URL and
process.env.MEILISEARCH_API_KEY which won’t work in a plain browser HTML file;
update the copy around instantMeiliSearch to explicitly state that process.env
requires a build tool or server-side environment (e.g., Vite/webpack/Node) and
add a short browser-compatible alternative that tells users to pass literal
strings (or a runtime-injected window/global variable) for the URL and API key
instead of process.env.In
@getting_started/integrations/gatsby.mdx:
- Around line 186-213: Add an npm/yarn install step for the UI and connector
packages so the example is copy-pasteable: mention installing
react-instantsearch (or react-instantsearch-dom vX if applicable) and
@meilisearch/instant-meilisearchbefore the code block (e.g., npm install
react-instantsearch@meilisearch/instant-meilisearchor the yarn equivalent).
Ensure the install snippet appears immediately above the example that imports
InstantSearch, SearchBox, Hits and instantMeiliSearch, and optionally note which
package provides instantMeiliSearch and which provides
InstantSearch/SearchBox/Hits (to make the dependencies clear).In
@getting_started/overview.mdx:
- Around line 50-57: The CardGroup/Card block uses relative hrefs
("getting_started/features", "getting_started/sdks/javascript"); update the Card
components' href props to use absolute paths (prefix with a leading slash) to
match the rest of the site and avoid resolution issues — e.g., change the href
values on the Card elements in the CardGroup to "/getting_started/features" and
"/getting_started/sdks/javascript".</details> --- <details> <summary>ℹ️ Review info</summary> <details> <summary>⚙️ Run configuration</summary> **Configuration used**: Organization UI **Review profile**: CHILL **Plan**: Pro **Run ID**: `a5b37133-71a1-4b96-9b00-ac357702ca02` </details> <details> <summary>📥 Commits</summary> Reviewing files that changed from the base of the PR and between 22e04761c3fb746f19879371fb3a541de0be39ab and 6ac564a08db49e08d87ab1a282b89e5aff5babfa. </details> <details> <summary>📒 Files selected for processing (27)</summary> * `docs.json` * `getting_started/features.mdx` * `getting_started/frameworks/laravel.mdx` * `getting_started/frameworks/rails.mdx` * `getting_started/frameworks/strapi.mdx` * `getting_started/frameworks/symfony.mdx` * `getting_started/instant_meilisearch/docsearch.mdx` * `getting_started/instant_meilisearch/javascript.mdx` * `getting_started/instant_meilisearch/react.mdx` * `getting_started/instant_meilisearch/vue.mdx` * `getting_started/integrations/firebase.mdx` * `getting_started/integrations/gatsby.mdx` * `getting_started/integrations/meilisearch_importer.mdx` * `getting_started/integrations/meilisync.mdx` * `getting_started/integrations/postman.mdx` * `getting_started/integrations/vercel.mdx` * `getting_started/overview.mdx` * `getting_started/sdks/dart.mdx` * `getting_started/sdks/dotnet.mdx` * `getting_started/sdks/go.mdx` * `getting_started/sdks/java.mdx` * `getting_started/sdks/javascript.mdx` * `getting_started/sdks/php.mdx` * `getting_started/sdks/python.mdx` * `getting_started/sdks/ruby.mdx` * `getting_started/sdks/rust.mdx` * `getting_started/sdks/swift.mdx` </details> </details> <!-- This is an auto-generated comment by CodeRabbit for review status -->
- Fix multi-search link pointing to wrong endpoint in laravel.mdx - Fix "Github" capitalization to "GitHub" in laravel.mdx - Fix broken /products/... card links in symfony.mdx and meilisync.mdx - Fix "categorie's" typo in strapi.mdx alt text - Fix missing space in "6.Start" heading in vue.mdx - Fix broken glossary links in react.mdx and vue.mdx - Fix "indexUId" capitalization in postman.mdx alt text - Use absolute paths for card hrefs in overview.mdx Entire-Checkpoint: 9c68757644a6
Update multi-search link in laravel.mdx and redirect in docs.json to use /reference/api/multi-search/perform-a-multi-search Entire-Checkpoint: 9c68757644a6
Entire-Checkpoint: 9c68757644a6
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@getting_started/frameworks/strapi.mdx`:
- Line 120: The sentence "Access the [search preview](/getting_started/overview)
confirm everything is working correctly by searching for “butter”." is missing
the word "to"; update this line so it reads "Access the [search
preview](/getting_started/overview) to confirm everything is working correctly
by searching for “butter”." to fix the grammar in the strapi.md x content.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 3d02489d-c3a8-4697-80bc-5d8ead1b05d8
📒 Files selected for processing (9)
docs.jsongetting_started/frameworks/laravel.mdxgetting_started/frameworks/strapi.mdxgetting_started/frameworks/symfony.mdxgetting_started/instant_meilisearch/react.mdxgetting_started/instant_meilisearch/vue.mdxgetting_started/integrations/meilisync.mdxgetting_started/integrations/postman.mdxgetting_started/overview.mdx
🚧 Files skipped from review as they are similar to previous changes (5)
- getting_started/instant_meilisearch/vue.mdx
- getting_started/frameworks/symfony.mdx
- getting_started/integrations/meilisync.mdx
- getting_started/overview.mdx
- getting_started/instant_meilisearch/react.mdx
…dated overview - Rewrite overview to position Meilisearch as indexing content for humans and AI - Add three pillars section: performance, relevancy, developer experience - Add glossary page with Meilisearch concepts, search terms, and infrastructure terms - Add good practices page covering formatting, chunking, batching, and indexing - Replace docs-scraper with community-maintained tauri-apps/meilisearch-docsearch - Remove Gatsby and MeiliSync pages (add redirects to GitHub repos) - Rename "Instant-meilisearch" nav group to "Frontend SDKs" - Move indexing best practices content into new good practices page - Add CLAUDE.md with writing style rules Entire-Checkpoint: 9c68757644a6
- Fix glossary: _geoPoint -> _geoBoundingBox for filtering - Fix contradictory batching heading in good practices - Fix process.env in browser example (instant_meilisearch/javascript) - Fix wrong search preview link in strapi guide - Clarify that AI/embeddings require configuration in overview - Point Vercel next steps to Cloud quick start instead of self-hosted - Explain why separate language indexes matter in good practices - Remove em/en dashes from strapi and vercel pages Entire-Checkpoint: 9c68757644a6
|
But mintlify don’t want to give me a link |
Update API reference links to match current OpenAPI-generated paths: - async-task-management/* → tasks/* and batches/* - webhooks/*, backups/*, health/*, experimental-features/* → management/* - search/perform-a-multi-search → multi-search/perform-a-multi-search - chats/chat-completions → chats/request-a-chat-completion - chats/get-chat-settings → chats/get-settings-of-a-chat-workspace - indexes/list-indexes → indexes/list-all-indexes - settings/get-localized-attributes → settings/get-localizedattributes - settings/get-prefix-search → settings/get-prefixsearch - settings/delete-searchableattributes → settings/reset-searchableattributes - Convert 5 absolute docs URLs to relative paths in ordering_ranking_rules - Fix /changelog → /changelog/changelog Entire-Checkpoint: 9c68757644a6
Both pages are superseded by the new getting_started/overview. Add redirects so existing links and bookmarks keep working. Entire-Checkpoint: 9c68757644a6
There was a problem hiding this comment.
Actionable comments posted: 7
♻️ Duplicate comments (2)
getting_started/instant_meilisearch/docsearch.mdx (2)
90-91:⚠️ Potential issue | 🟠 MajorUse real placeholders, not literal credential strings, in the Docker command.
Line 90 and Line 91 currently set
MEILISEARCH_HOST_URLandMEILISEARCH_API_KEYto literal text values, which breaks copy-paste usage.🔧 Suggested fix
docker run -t --rm \ --network=host \ - -e MEILISEARCH_HOST_URL='MEILISEARCH_URL' \ - -e MEILISEARCH_API_KEY='MASTER_KEY' \ + -e MEILISEARCH_HOST_URL="<MEILISEARCH_URL>" \ + -e MEILISEARCH_API_KEY="<MASTER_KEY>" \ -v <absolute-path-to-your-config-file>:/docs-scraper/config.json \ getmeili/docs-scraper:latest pipenv run ./docs_scraper config.json🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@getting_started/instant_meilisearch/docsearch.mdx` around lines 90 - 91, Replace the literal credential strings in the Docker env flags for MEILISEARCH_HOST_URL and MEILISEARCH_API_KEY with usable placeholders: change the values for MEILISEARCH_HOST_URL and MEILISEARCH_API_KEY in the Docker command (the two environment flags shown) to real placeholders such as a URL placeholder (e.g., https://your-meilisearch-host:7700) and a key placeholder (e.g., your_master_key) so the command can be copy-pasted and updated by users.
154-155:⚠️ Potential issue | 🔴 CriticalDo not map client-side
apiKeytoMASTER_KEY.Line 154 and Line 199 instruct browser-facing examples to use
MASTER_KEY, which is a critical credential exposure risk and conflicts with the warnings already present on the page.🔒 Suggested fix
-The `hostUrl` and the `apiKey` fields are the credentials of the Meilisearch instance. Following on from this tutorial, they are respectively `MEILISEARCH_URL` and `MASTER_KEY`. +The `hostUrl` and the `apiKey` fields are the credentials of the Meilisearch instance. In this tutorial, they are respectively `MEILISEARCH_URL` and `SEARCH_API_KEY` (or `Default Search API Key`). @@ -The `hostUrl` and the `apiKey` fields are the credentials of the Meilisearch instance. Following on from this tutorial, they are respectively `MEILISEARCH_URL` and `MASTER_KEY`. +The `hostUrl` and the `apiKey` fields are the credentials of the Meilisearch instance. In this tutorial, they are respectively `MEILISEARCH_URL` and `SEARCH_API_KEY` (or `Default Search API Key`).Also applies to: 199-200
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@getting_started/instant_meilisearch/docsearch.mdx` around lines 154 - 155, The docs currently instruct mapping the client-side apiKey to the sensitive MASTER_KEY (via hostUrl/apiKey examples); update the examples that set hostUrl and apiKey so they do NOT use MASTER_KEY—use a non-sensitive public/search-only key placeholder (e.g., MEILISEARCH_PUBLIC_KEY or a token retrieved from a secure proxy) or show retrieving a limited key from a server endpoint, and add a brief note next to the hostUrl/apiKey examples clarifying that MASTER_KEY must never be exposed in browser code; modify the occurrences referencing hostUrl, apiKey, MEILISEARCH_URL and MASTER_KEY accordingly.
🧹 Nitpick comments (5)
CLAUDE.md (1)
1-5: Consider linking this rule to the canonical docs style guide.To avoid style-guide drift, add a reference here to the main contributing/writing guide so both sources stay aligned.
As per coding guidelines, "Match the existing tone and structure of the docs, referencing
learn/resources/contributing_docs.mdxand surrounding files".🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@CLAUDE.md` around lines 1 - 5, Add a reference link from the "Writing style" section (the bullet "Never use em dashes (`—`)") to the canonical docs style guide so the rule stays aligned with the main contributing guide; edit CLAUDE.md to append or inline-link to the contributing/writing guide (e.g., reference learn/resources/contributing_docs.mdx or the canonical style guide URL) and ensure the link text clarifies it's the authoritative source for doc tone and structure.learn/async/paginating_tasks.mdx (1)
36-36: Simplify the wording in Line 36 for readability.“get all tasks request response” is hard to read. A shorter phrase like “get tasks response format” is clearer.
✏️ Suggested wording tweak
-It is possible none of the returned tasks are the ones you are looking for. In that case, you will need to use the [get all tasks request response](/reference/api/tasks/list-tasks) to navigate the results. +It is possible none of the returned tasks are the ones you are looking for. In that case, use the [get tasks response format](/reference/api/tasks/list-tasks) to navigate the results.As per coding guidelines, "Prefer short, direct sentences and avoid jargon when a simpler term exists in documentation".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@learn/async/paginating_tasks.mdx` at line 36, Replace the awkward phrase "get all tasks request response" with a clearer, shorter term and simplify the sentence: update the line containing "get all tasks request response" so it reads something like "If none of the returned tasks match, use the get tasks response format to page through the results." Ensure the revised sentence uses "get tasks response format" and keeps the same meaning about navigating paginated results.getting_started/glossary.mdx (1)
79-81: Merge or rename the duplicateTypo toleranceentries.Having the same glossary heading twice splits one concept across two anchors and makes linking or bookmarking awkward. A single entry—or a renamed second entry that explains the broader concept—will read much cleaner.
Also applies to: 185-187
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@getting_started/glossary.mdx` around lines 79 - 81, There are duplicate glossary headings "Typo tolerance" that split the concept across two anchors; consolidate them by merging the second instance into the first (move any unique content under the same "### Typo tolerance" heading) or rename the second heading to a distinct title (e.g., "Typo tolerance configuration" or "Disabling typo tolerance") and update its content to clarify the broader/alternate scope; locate the headings titled "Typo tolerance" in the glossary (the two identical "### Typo tolerance" headings) and either delete/merge the redundant section content into the primary heading or change the second heading text and adjust its copy so each anchor is unique and descriptive.getting_started/instant_meilisearch/javascript.mdx (1)
11-12: Match the framework claim to the guides you surface.The intro says this route works with React, Vue, Angular, and vanilla JavaScript, but the page only routes readers to React and Vue. Either add an Angular path here, or narrow the claim so the page matches what it helps users do.
Based on learnings, "Documentation should be thorough, containing all information users need to use Meilisearch."
Also applies to: 71-80
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@getting_started/instant_meilisearch/javascript.mdx` around lines 11 - 12, The page header claims "Framework support: Works with React, Vue, Angular, and vanilla JavaScript" but the body only surfaces React and Vue guides; update the content so headers and links match: either add an Angular guide/link (create or link to an existing Angular quickstart and add it to the framework list and relevant sections referenced around the same blocks) or change the framework list to only mention React, Vue, and vanilla JavaScript (remove "Angular") and update any other mentions in the same file (including the content area referenced around lines 71-80) so all framework claims align with available guides.docs.json (1)
158-213: Avoid two separateGetting startedentry points.This adds a top-level
Getting startedtab whileLearnstill keeps aGetting startedgroup. New users now have to guess which one is the real onboarding path. Renaming or folding the Learn subsection would make the funnel much clearer.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs.json` around lines 158 - 213, The top-level navigation defines a tab object with "tab": "Getting started" which duplicates the "Getting started" group under the Learn section; remove or rename one to avoid two entry points. Either delete the top-level tab object whose tab value is "Getting started" (so Learn’s Getting started group remains the single path), or keep the top-level tab and rename/fold the Learn subsection’s group named "Getting started" to something like "Learn: Getting started" (or merge its pages into the top-level tab). Update the JSON accordingly so there is only one clear onboarding entry for "Getting started".
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@getting_started/good_practices.mdx`:
- Around line 15-35: The JSON fenced example currently contains inline comments
and duplicate keys making it invalid; update the fenced snippet so both "Good"
and "Bad" examples are valid, minimal JSON: remove the inline comments from the
json block, split into two fenced blocks labeled "Good" and "Bad", keep the
"Good" example as the single object shown (title/brand/price/details) and change
the "Bad" example to a JSON array of objects (e.g., [{ "id": 1, "brandData": {
"brand": "Nike", "price": 120 } }, { "id": 2, "brandData": { "brand": "Adidas",
"price": 95 } }] or the provided array format) so there are no duplicate keys
and both blocks are parseable.
In `@getting_started/overview.mdx`:
- Around line 69-81: The "Choose your SDK" Card currently hardcodes the
JavaScript quick-start link (Card with title "Choose your SDK" and
href="/getting_started/sdks/javascript"), which contradicts the promise of a
choice; update that Card to point to a neutral SDK landing page (e.g.,
href="/getting_started/sdks" or similar) or replace it with multiple Cards (one
per SDK) inside the CardGroup so all SDK tracks are discoverable; make the
change in the CardGroup block where the Card title equals "Choose your SDK".
- Around line 22-29: Update the absolute latency claim inside the CardGroup (the
Card components titled "For humans" and "For AI") to soften the promise: replace
the unqualified "under 50ms" and "every query stays under 50 ms even on tens of
millions of documents" language with a qualified statement (e.g., "typically
under 50ms for common workloads" or "under 50ms for indexed queries in our
benchmarks") and add a parenthetical link or callout to the benchmark/details
page that explains test conditions and dataset size so readers can see the
context for the 50ms number.
In `@guides/embedders/huggingface.mdx`:
- Line 53: The link label and URL mismatch: the text says "get task endpoint"
while the href points to "/reference/api/tasks/list-tasks"; update the sentence
so the label and target match—either change the text to "list tasks endpoint" to
match "/reference/api/tasks/list-tasks" or change the URL to the correct "get
task" endpoint (e.g., "/reference/api/tasks/get-task") so the link destination
and label are consistent.
In `@guides/relevancy/ordering_ranking_rules.mdx`:
- Line 50: Replace the phrase "built in ranking rules" with the hyphenated form
"built-in ranking rules" in the guides/relevancy content (specifically the
sentence that also references "custom ranking rules") so the compound adjective
is formatted correctly; update the string used in the ordering_ranking_rules.mdx
content where that exact phrase appears.
In `@learn/indexing/optimize_indexing_performance.mdx`:
- Line 92: Update the broken link path string in the markdown table: replace
"/reference/api/settings/get-prefixsearch" with the correct
"/reference/api/settings/get-prefix-search" inside the text that mentions prefix
search (the link near "Disable [**prefix search**]"). Ensure the hyphenated path
is used exactly so the link resolves correctly.
In `@reference/errors/error_codes.mdx`:
- Line 87: The sentence incorrectly states reserved webhooks have isEditable set
to true; update that sentence to say isEditable is set to false so it matches
the later description that reserved webhooks are immutable, and verify any other
mentions of "isEditable" or "reserved webhooks" in this document (e.g., the line
in the errors section) are consistent with the immutable/false behavior.
---
Duplicate comments:
In `@getting_started/instant_meilisearch/docsearch.mdx`:
- Around line 90-91: Replace the literal credential strings in the Docker env
flags for MEILISEARCH_HOST_URL and MEILISEARCH_API_KEY with usable placeholders:
change the values for MEILISEARCH_HOST_URL and MEILISEARCH_API_KEY in the Docker
command (the two environment flags shown) to real placeholders such as a URL
placeholder (e.g., https://your-meilisearch-host:7700) and a key placeholder
(e.g., your_master_key) so the command can be copy-pasted and updated by users.
- Around line 154-155: The docs currently instruct mapping the client-side
apiKey to the sensitive MASTER_KEY (via hostUrl/apiKey examples); update the
examples that set hostUrl and apiKey so they do NOT use MASTER_KEY—use a
non-sensitive public/search-only key placeholder (e.g., MEILISEARCH_PUBLIC_KEY
or a token retrieved from a secure proxy) or show retrieving a limited key from
a server endpoint, and add a brief note next to the hostUrl/apiKey examples
clarifying that MASTER_KEY must never be exposed in browser code; modify the
occurrences referencing hostUrl, apiKey, MEILISEARCH_URL and MASTER_KEY
accordingly.
---
Nitpick comments:
In `@CLAUDE.md`:
- Around line 1-5: Add a reference link from the "Writing style" section (the
bullet "Never use em dashes (`—`)") to the canonical docs style guide so the
rule stays aligned with the main contributing guide; edit CLAUDE.md to append or
inline-link to the contributing/writing guide (e.g., reference
learn/resources/contributing_docs.mdx or the canonical style guide URL) and
ensure the link text clarifies it's the authoritative source for doc tone and
structure.
In `@docs.json`:
- Around line 158-213: The top-level navigation defines a tab object with "tab":
"Getting started" which duplicates the "Getting started" group under the Learn
section; remove or rename one to avoid two entry points. Either delete the
top-level tab object whose tab value is "Getting started" (so Learn’s Getting
started group remains the single path), or keep the top-level tab and
rename/fold the Learn subsection’s group named "Getting started" to something
like "Learn: Getting started" (or merge its pages into the top-level tab).
Update the JSON accordingly so there is only one clear onboarding entry for
"Getting started".
In `@getting_started/glossary.mdx`:
- Around line 79-81: There are duplicate glossary headings "Typo tolerance" that
split the concept across two anchors; consolidate them by merging the second
instance into the first (move any unique content under the same "### Typo
tolerance" heading) or rename the second heading to a distinct title (e.g.,
"Typo tolerance configuration" or "Disabling typo tolerance") and update its
content to clarify the broader/alternate scope; locate the headings titled "Typo
tolerance" in the glossary (the two identical "### Typo tolerance" headings) and
either delete/merge the redundant section content into the primary heading or
change the second heading text and adjust its copy so each anchor is unique and
descriptive.
In `@getting_started/instant_meilisearch/javascript.mdx`:
- Around line 11-12: The page header claims "Framework support: Works with
React, Vue, Angular, and vanilla JavaScript" but the body only surfaces React
and Vue guides; update the content so headers and links match: either add an
Angular guide/link (create or link to an existing Angular quickstart and add it
to the framework list and relevant sections referenced around the same blocks)
or change the framework list to only mention React, Vue, and vanilla JavaScript
(remove "Angular") and update any other mentions in the same file (including the
content area referenced around lines 71-80) so all framework claims align with
available guides.
In `@learn/async/paginating_tasks.mdx`:
- Line 36: Replace the awkward phrase "get all tasks request response" with a
clearer, shorter term and simplify the sentence: update the line containing "get
all tasks request response" so it reads something like "If none of the returned
tasks match, use the get tasks response format to page through the results."
Ensure the revised sentence uses "get tasks response format" and keeps the same
meaning about navigating paginated results.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 70a6a453-54a8-45a5-ba54-4ec969c2c83c
📒 Files selected for processing (41)
CLAUDE.mddocs.jsongetting_started/features.mdxgetting_started/frameworks/strapi.mdxgetting_started/glossary.mdxgetting_started/good_practices.mdxgetting_started/instant_meilisearch/docsearch.mdxgetting_started/instant_meilisearch/javascript.mdxgetting_started/integrations/vercel.mdxgetting_started/overview.mdxguides/computing_hugging_face_embeddings_gpu.mdxguides/embedders/bedrock.mdxguides/embedders/cloudflare.mdxguides/embedders/cohere.mdxguides/embedders/gemini.mdxguides/embedders/huggingface.mdxguides/embedders/mistral.mdxguides/embedders/openai.mdxguides/embedders/voyage.mdxguides/relevancy/ordering_ranking_rules.mdxlearn/async/asynchronous_operations.mdxlearn/async/filtering_tasks.mdxlearn/async/paginating_tasks.mdxlearn/async/working_with_tasks.mdxlearn/data_backup/dumps.mdxlearn/data_backup/snapshots.mdxlearn/getting_started/what_is_meilisearch.mdxlearn/indexing/indexing_best_practices.mdxlearn/indexing/multilingual-datasets.mdxlearn/indexing/optimize_indexing_performance.mdxlearn/relevancy/displayed_searchable_attributes.mdxlearn/resources/comparison_to_alternatives.mdxlearn/resources/experimental_features_overview.mdxlearn/resources/faq.mdxlearn/resources/sdks.mdxlearn/self_hosted/configure_meilisearch_at_launch.mdxlearn/self_hosted/getting_started_with_self_hosted_meilisearch.mdxlearn/update_and_migration/updating.mdxreference/api/pagination.mdxreference/errors/error_codes.mdxreference/errors/overview.mdx
💤 Files with no reviewable changes (1)
- learn/indexing/indexing_best_practices.mdx
✅ Files skipped from review due to trivial changes (4)
- guides/embedders/cohere.mdx
- guides/embedders/mistral.mdx
- guides/embedders/voyage.mdx
- learn/resources/sdks.mdx
🚧 Files skipped from review as they are similar to previous changes (2)
- getting_started/frameworks/strapi.mdx
- getting_started/features.mdx
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@docs.json`:
- Around line 899-901: The redirect entry currently maps "source":
"/learn/indexing/indexing_best_practices" to "destination":
"/getting_started/good_practices" but leaves legacy sources creating multi-hop
chains; add direct redirect entries for "/learn/advanced/indexing",
"/learn/cookbooks/indexing_best_practices", and
"/guides/performance/indexing_best_practices" and point each of them straight to
"/getting_started/good_practices" so there are no two- or three-hop redirects
(update the docs.json redirect list by adding these sources with the same
destination).
- Around line 1475-1477: Repoint the redirect entries that currently map
"/reference/api/chats" and "/reference/api/chats#prompts" (which go via
"/reference/api/chats/update-chat") so they directly target
"/reference/api/chats/update-settings-of-a-chat-workspace", and then remove or
repurpose the intermediate "/reference/api/chats/update-chat" redirect; after
making the change, verify the two new destinations
("/reference/api/multi-search/perform-a-multi-search" and
"/reference/api/chats/update-settings-of-a-chat-workspace") in the Mintlify
preview to ensure the slugs resolve correctly.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 3bf11497-833d-4413-8456-d0ef0c5f89f6
📒 Files selected for processing (4)
docs.jsonhome.mdxlearn/getting_started/what_is_meilisearch.mdxlearn/resources/comparison_to_alternatives.mdx
💤 Files with no reviewable changes (2)
- home.mdx
- learn/getting_started/what_is_meilisearch.mdx
- strapi.mdx: fix missing "to" in sentence - glossary.mdx: rename duplicate "Typo tolerance" heading - good_practices.mdx: split invalid JSON example into two valid blocks - docsearch.mdx: use angle-bracket placeholders in Docker command, replace MASTER_KEY with Default Search API Key in client-side context - huggingface.mdx: fix link text to match URL target - ordering_ranking_rules.mdx: hyphenate "built-in" - error_codes.mdx: fix isEditable from true to false for reserved webhooks Entire-Checkpoint: 9c68757644a6
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
reference/errors/error_codes.mdx (1)
87-87: Split this long sentence for readability.This is now semantically correct (
isEditableisfalse), but the sentence is dense and harder to scan.Suggested edit
-You tried to modify a reserved [webhook](/reference/api/management/list-webhooks). Reserved webhooks are configured by Meilisearch Cloud and have `isEditable` set to `false`. Webhooks created with an instance option are also immutable. +You tried to modify a reserved [webhook](/reference/api/management/list-webhooks). +Reserved webhooks are configured by Meilisearch Cloud and have `isEditable` set to `false`. +Webhooks created with an instance option are also immutable.As per coding guidelines, "Prefer shorter sentences; if a sentence runs over approximately 40 words, consider splitting or simplifying".
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@reference/errors/error_codes.mdx` at line 87, Split the long sentence into two shorter, clearer sentences while preserving meaning: state first that the webhook is reserved and configured by Meilisearch Cloud with `isEditable` set to `false`, and then in a second sentence note that webhooks created with an instance option are also immutable; keep the link text "webhook" and the `isEditable` property reference unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@getting_started/instant_meilisearch/docsearch.mdx`:
- Line 115: Update the instance of the product name "Vuepress plugin" in the
sentence that currently reads "If you use VuePress for your documentation, we
provide a [Vuepress
plugin](https://github.com/meilisearch/vuepress-plugin-meilisearch)." to use the
official capitalization "VuePress plugin" so both occurrences read "VuePress"
(i.e., change "Vuepress plugin" to "VuePress plugin") in the docstring where the
link text and surrounding sentence reference the plugin.
- Line 16: The in-page TOC anchor "[What's next?]" points to "#whats-next" which
doesn't match the actual heading "## Next steps"; update the link target to the
correct slug (e.g., change the anchor to "#next-steps") so the link resolves, or
alternatively rename the heading to "What's next?" to keep the original anchor;
modify the link or the heading in
getting_started/instant_meilisearch/docsearch.mdx, targeting the "[What's
next?]" anchor or the "## Next steps" heading accordingly.
- Around line 102-103: Replace the recommendation that users provide the
"Default Admin API Key" in production with guidance to create and use a scoped
API key that only grants the specific indexing/document-add permissions needed
for the scraper workflow (e.g., document.add or write/index permissions), advise
storing keys securely (avoid exposing them in CI logs), and keep admin-level
keys reserved for server-side administration; update the sentence that currently
starts "The API key should have the permissions to add documents..." to reflect
this scoped-key guidance and keep the existing Meilisearch security link for
further details.
---
Nitpick comments:
In `@reference/errors/error_codes.mdx`:
- Line 87: Split the long sentence into two shorter, clearer sentences while
preserving meaning: state first that the webhook is reserved and configured by
Meilisearch Cloud with `isEditable` set to `false`, and then in a second
sentence note that webhooks created with an instance option are also immutable;
keep the link text "webhook" and the `isEditable` property reference unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: bdebf45b-5052-4a6b-9cd9-6a4825e19ac2
📒 Files selected for processing (7)
getting_started/frameworks/strapi.mdxgetting_started/glossary.mdxgetting_started/good_practices.mdxgetting_started/instant_meilisearch/docsearch.mdxguides/embedders/huggingface.mdxguides/relevancy/ordering_ranking_rules.mdxreference/errors/error_codes.mdx
🚧 Files skipped from review as they are similar to previous changes (5)
- guides/relevancy/ordering_ranking_rules.mdx
- getting_started/good_practices.mdx
- getting_started/glossary.mdx
- guides/embedders/huggingface.mdx
- getting_started/frameworks/strapi.mdx
- Fix TOC anchor #whats-next → #next-steps to match actual heading - Recommend scoped key instead of Default Admin API Key for scraping - Fix "Vuepress" → "VuePress" capitalization Entire-Checkpoint: 9c68757644a6
Entire-Checkpoint: 9c68757644a6
Co-authored-by: CaroFG <48251481+CaroFG@users.noreply.github.com>

Summary
/products/,/resources/paths to existing docs)Test plan
npx mintlify devand verify the "Getting started" tab appears with all subpagesnpx mint broken-linksFixe #3490
Summary by CodeRabbit
New Features
Documentation