A lightning-fast search engine API bringing AI-powered hybrid search to your sites and applications.
This report summarizes scanner evidence for meilisearch/meilisearch, a Rust project with 59,729 GitHub stars. SynthScan examined 289,808 lines of code across 834 source files, recording 442 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.7 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 429 finding(s).
Are imports declared and package/API names verified? 13 finding(s).
Are wrappers, guards, and repeated structures necessary? 0 finding(s).
Which changes need focused human review? 442 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 442 distinct pattern matches across 10 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | BENCHMARKS.md | 121 | They are JSON files with the following structure (comments are not actually supported, to make your own, remove them or | COMMENT |
| LOW | BENCHMARKS.md | 141 | "assets": { | COMMENT |
| LOW | config.toml | 1 | # This file shows the default configuration of Meilisearch. | COMMENT |
| LOW | config.toml | 21 | # All gathered data is used solely for the purpose of improving Meilisearch, and can be deleted at any time. | COMMENT |
| LOW | config.toml | 41 | COMMENT | |
| LOW | config.toml | 61 | COMMENT | |
| LOW | config.toml | 81 | # Prevents a Meilisearch instance from throwing an error when `import_snapshot` does not point to a valid snapshot file. | COMMENT |
| LOW | config.toml | 101 | COMMENT | |
| LOW | config.toml | 121 | COMMENT | |
| LOW | external-crates/async-openai/src/error.rs | 1 | //! Errors originating from API calls, parsing responses, and reading-or-writing to the file system. | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 1 | //! Rust library for OpenAI | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 21 | //! let client = Client::with_config(http_client::policy::IpPolicy::danger_always_allow(), config); | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 41 | //! let client = Client::new(http_client::policy::IpPolicy::danger_always_allow()); | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 61 | //! | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 81 | //! // Note that `async-openai` only implements OpenAI spec | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 101 | COMMENT | |
| LOW | external-crates/async-openai/src/lib.rs | 121 | // mod project_service_accounts; | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 141 | pub use client::Client; | COMMENT |
| LOW | external-crates/async-openai/src/lib.rs | 161 | // pub use users::Users; | COMMENT |
| LOW | external-crates/async-openai/src/completion.rs | 41 | } | COMMENT |
| LOW | external-crates/async-openai/src/uploads.rs | 21 | /// | COMMENT |
| LOW | external-crates/async-openai/src/chat.rs | 21 | COMMENT | |
| LOW | external-crates/async-openai/src/file.rs | 21 | /// Upload a file that can be used across various endpoints. Individual files can be up to 512 MB, and the size of a | COMMENT |
| LOW | …rnal-crates/async-openai/src/types/assistant_stream.rs | 21 | /// We emit events whenever a new object is created, transitions to a new state, or is being | COMMENT |
| LOW | …rnal-crates/async-openai/src/types/assistant_stream.rs | 41 | ThreadRunCreated(RunObject), | COMMENT |
| LOW | …rnal-crates/async-openai/src/types/assistant_stream.rs | 61 | #[serde(rename = "thread.run.cancelling")] | COMMENT |
| LOW | …rnal-crates/async-openai/src/types/assistant_stream.rs | 81 | /// Occurs when a [run step](https://platform.openai.com/docs/api-reference/run-steps/step-object) fails. | COMMENT |
| LOW | external-crates/async-openai/src/types/batch.rs | 1 | use std::collections::HashMap; | COMMENT |
| LOW | external-crates/async-openai/src/types/assistant.rs | 61 | /// The default strategy. This strategy currently uses a `max_chunk_size_tokens` of `800` and `chunk_overlap_tokens` | COMMENT |
| LOW | external-crates/async-openai/src/types/assistant.rs | 81 | #[derive(Clone, Serialize, Debug, Deserialize, PartialEq)] | COMMENT |
| LOW | external-crates/async-openai/src/types/assistant.rs | 101 | pub tool_resources: Option<AssistantToolResources>, | COMMENT |
| LOW | external-crates/async-openai/src/types/assistant.rs | 181 | COMMENT | |
| LOW | external-crates/async-openai/src/types/assistant.rs | 221 | /// | COMMENT |
| LOW | external-crates/async-openai/src/types/assistant.rs | 241 | /// The name of the assistant. The maximum length is 256 characters. | COMMENT |
| LOW | external-crates/async-openai/src/types/moderation.rs | 41 | /// Either a URL of the image or the base64 encoded image data | COMMENT |
| LOW | external-crates/async-openai/src/types/moderation.rs | 61 | } | COMMENT |
| LOW | external-crates/async-openai/src/types/moderation.rs | 81 | pub illicit: bool, | COMMENT |
| LOW | external-crates/async-openai/src/types/moderation.rs | 101 | /// Content that depicts death, violence, or physical injury in graphic detail. | COMMENT |
| LOW | external-crates/async-openai/src/types/moderation.rs | 121 | /// The score for the category 'illicit/violent'. | COMMENT |
| LOW | external-crates/async-openai/src/types/embedding.rs | 21 | Float, | COMMENT |
| LOW | external-crates/async-openai/src/types/fine_tuning.rs | 61 | /// Scaling factor for the learning rate. A smaller learning rate may be useful to avoid | COMMENT |
| LOW | external-crates/async-openai/src/types/fine_tuning.rs | 81 | /// See [upload file](https://platform.openai.com/docs/api-reference/files/create) for how to upload a file. | COMMENT |
| LOW | external-crates/async-openai/src/types/fine_tuning.rs | 101 | /// The ID of an uploaded file that contains validation data. | COMMENT |
| LOW | external-crates/async-openai/src/types/fine_tuning.rs | 161 | } | COMMENT |
| LOW | external-crates/async-openai/src/types/fine_tuning.rs | 201 | } | COMMENT |
| LOW | external-crates/async-openai/src/types/completion.rs | 21 | /// The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of t | COMMENT |
| LOW | external-crates/async-openai/src/types/completion.rs | 41 | #[serde(skip_serializing_if = "Option::is_none")] | COMMENT |
| LOW | external-crates/async-openai/src/types/completion.rs | 61 | COMMENT | |
| LOW | external-crates/async-openai/src/types/completion.rs | 81 | /// [See more information about frequency and presence penalties.](https://platform.openai.com/docs/guides/text-gene | COMMENT |
| LOW | external-crates/async-openai/src/types/completion.rs | 101 | /// Accepts a json object that maps tokens (specified by their token ID in the GPT tokenizer) to an associated bias | COMMENT |
| LOW | external-crates/async-openai/src/types/upload.rs | 1 | use crate::error::OpenAIError; | COMMENT |
| LOW | external-crates/async-openai/src/types/run.rs | 181 | #[derive(Clone, Serialize, Default, Debug, Deserialize, Builder, PartialEq)] | COMMENT |
| LOW | external-crates/async-openai/src/types/audit_log.rs | 141 | /// The details for events with the type `api_key.created`. | COMMENT |
| LOW | external-crates/async-openai/src/types/audit_log.rs | 161 | pub login_failed: Option<AuditLogLoginFailed>, | COMMENT |
| LOW | external-crates/async-openai/src/types/audit_log.rs | 181 | #[serde(rename = "service_account.updated")] | COMMENT |
| LOW | external-crates/async-openai/src/types/image.rs | 61 | COMMENT | |
| LOW | external-crates/async-openai/src/types/image.rs | 81 | /// The model to use for image generation. | COMMENT |
| LOW | external-crates/async-openai/src/types/image.rs | 101 | pub size: Option<ImageSize>, | COMMENT |
| LOW | external-crates/async-openai/src/types/project_users.rs | 41 | #[builder(name = "ProjectUserCreateRequestArgs")] | COMMENT |
| LOW | external-crates/async-openai/src/types/audio.rs | 181 | #[builder(setter(into, strip_option), default)] | COMMENT |
| 350 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | crates/index-scheduler/src/dump.rs | 55 | self.index_scheduler.queue.batches.all_batches.put(&mut self.wtxn, &batch.uid, &batch)?; | CODE |
| CRITICAL | crates/index-scheduler/src/dump.rs | 252 | self.index_scheduler.queue.tasks.all_tasks.put(&mut self.wtxn, &task.uid, &task)?; | CODE |
| CRITICAL | crates/index-scheduler/src/dump.rs | 314 | self.index_scheduler.queue.tasks.index_tasks.put(&mut self.wtxn, &index, &bitmap)?; | CODE |
| CRITICAL | crates/index-scheduler/src/dump.rs | 324 | self.index_scheduler.queue.batches.index_tasks.put(&mut self.wtxn, &index, &bitmap)?; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | README.md | 111 | - **[Conversational search](https://www.meilisearch.com/docs/capabilities/conversational_search/overview?utm_campaign=os | CODE |
| HIGH | external-crates/async-openai/src/types/fine_tuning.rs | 175 | /// default tags are generated by OpenAI: "openai/finetune", "openai/{base-model}", "openai/{ftjob-abcdef}". | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | external-crates/async-openai/src/types/chat.rs | 835 | /// - If set to 'auto', the system will utilize scale tier credits until they are exhausted. | COMMENT |
| MEDIUM | crates/meilisearch-types/src/webhooks.rs | 16 | // headers are case insensitive, so to make the redaction robust we iterate over qualifying headers | COMMENT |
| MEDIUM | .github/workflows/check-openapi-file.yml | 58 | # Lints the OpenAPI file for best practices (descriptions, examples, naming conventions, etc.) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/milli/src/lib.rs | 476 | "name": "John Doe", | CODE |
| LOW | crates/milli/src/lib.rs | 488 | { "name": "John Doe" }, | CODE |
| LOW | crates/meilisearch/tests/documents/add_documents.rs | 2766 | "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec metus erat, consequat in blandit | CODE |
| LOW | crates/meilisearch/tests/documents/add_documents.rs | 2766 | "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec metus erat, consequat in blandit | CODE |
| LOW | crates/meilisearch/tests/assets/test_set.json | 200 | "about": "Consectetur occaecat dolore esse eiusmod enim ea aliqua eiusmod amet velit laborum. Velit quis consequat c | CODE |
| LOW | crates/meilisearch/tests/assets/test_set.json | 417 | "about": "Et velit cupidatat velit incididunt mollit. Occaecat do labore aliqua dolore excepteur occaecat ut veniam | CODE |
| LOW | crates/meilisearch/tests/assets/test_set.json | 1120 | "about": "Occaecat officia veniam consectetur aliqua laboris dolor irure nulla. Lorem ipsum sit nisi veniam mollit e | CODE |
| LOW | crates/meilisearch/tests/assets/test_set.json | 1363 | "about": "Non ad ipsum elit commodo fugiat Lorem ipsum reprehenderit. Commodo incididunt officia cillum eiusmod offi | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/milli/src/update/new/extract/cache.rs | 509 | // Don't forget to put the first entry back into the heap. | COMMENT |
| LOW | …i/src/update/new/indexer/post_processing/facet_bulk.rs | 118 | // We also don't forget to store the group size corresponding | COMMENT |
| LOW | …i/src/update/new/indexer/post_processing/facet_bulk.rs | 139 | // We don't forget to store the group size corresponding | COMMENT |
| LOW | crates/milli/src/update/facet/bulk.rs | 238 | // don't forget to give the leftover bitmaps as well | COMMENT |
| LOW | crates/milli/src/update/facet/bulk.rs | 314 | // don't forget to insert the leftover elements into the writer as well | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | crates/milli/src/vector/settings.rs | 320 | #[schema(value_type = Option<String>, example = json!("your-api-key"))] | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/meilisearch/tests/search/filters.rs | 608 | // Step 1: Add a filterable attribute with BOTH comparison and equality features | COMMENT |
| LOW⚡ | crates/meilisearch/tests/search/filters.rs | 621 | // Step 2: Add documents | COMMENT |
| LOW⚡ | crates/meilisearch/tests/search/filters.rs | 626 | // Step 3: Remove the comparison feature but keep equality | COMMENT |
| LOW | crates/meilisearch/tests/search/filters.rs | 639 | // Step 4: Test that equality filter still works | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | crates/meilisearch/tests/search/filters.rs | 608 | // Step 1: Add a filterable attribute with BOTH comparison and equality features | COMMENT |
| LOW⚡ | crates/meilisearch/tests/search/filters.rs | 621 | // Step 2: Add documents | COMMENT |
| LOW⚡ | crates/meilisearch/tests/search/filters.rs | 626 | // Step 3: Remove the comparison feature but keep equality | COMMENT |
| LOW | crates/meilisearch/tests/search/filters.rs | 639 | // Step 4: Test that equality filter still works | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/publish-release-assets.yml | 20 | # Check if the tag has the v<nmumber>.<number>.<number> format. | COMMENT |