• Stars
    star
    731
  • Rank 61,995 (Top 2 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created about 5 years ago
  • Updated 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

JavaScript client for the Meilisearch API

Meilisearch-JavaScript

Meilisearch JavaScript

Meilisearch | Meilisearch Cloud | Documentation | Discord | Roadmap | Website | FAQ

npm version Tests Prettier License Bors enabled

โšก The Meilisearch API client written for JavaScript

Meilisearch JavaScript is the Meilisearch API client for JavaScript developers.

Meilisearch is an open-source search engine. Learn more about Meilisearch.

Table of Contents

๐Ÿ“– Documentation

This readme contains all the documentation you need to start using this Meilisearch SDK.

For general information on how to use Meilisearchโ€”such as our API reference, tutorials, guides, and in-depth articlesโ€”refer to our main documentation website.

โšก Supercharge your Meilisearch experience

Say goodbye to server deployment and manual updates with Meilisearch Cloud. Get started with a 14-day free trial! No credit card required.

๐Ÿ”ง Installation

We recommend installing meilisearch-js in your project with your package manager of choice.

npm install meilisearch

meilisearch-js officially supports node versions >= 14 and <= 18.

Instead of using a package manager, you may also import the library directly into your HTML via a CDN.

Run Meilisearch

To use one of our SDKs, you must first have a running Meilisearch instance. Consult our documentation for instructions on how to download and launch Meilisearch.

Import

After installing meilisearch-js, you must import it into your application. There are many ways of doing that depending on your development environment.

import syntax

Usage in an ES module environment:

import { MeiliSearch } from 'meilisearch'

const client = new MeiliSearch({
  host: 'http://127.0.0.1:7700',
  apiKey: 'masterKey',
})

<script> tag

Usage in an HTML (or alike) file:

<script src='https://cdn.jsdelivr.net/npm/meilisearch@latest/dist/bundles/meilisearch.umd.js'></script>
<script>
  const client = new MeiliSearch({
    host: 'http://127.0.0.1:7700',
    apiKey: 'masterKey',
  })
</script>

require syntax

Usage in a back-end node.js or another environment supporting CommonJS modules:

const { MeiliSearch } = require('meilisearch')

const client = new MeiliSearch({
  host: 'http://127.0.0.1:7700',
  apiKey: 'masterKey',
})

React Native

To use meilisearch-js with React Native, you must also install react-native-url-polyfill.

Deno

Usage in a Deno environment:

import { MeiliSearch } from "https://esm.sh/meilisearch"

const client = new MeiliSearch({
  host: 'http://127.0.0.1:7700',
  apiKey: 'masterKey',
})

๐ŸŽฌ Getting started

Add documents

const { MeiliSearch } = require('meilisearch')
// Or if you are in a ES environment
import { MeiliSearch } from 'meilisearch'

;(async () => {
  const client = new MeiliSearch({
    host: 'http://127.0.0.1:7700',
    apiKey: 'masterKey',
  })

  // An index is where the documents are stored.
  const index = client.index('movies')

  const documents = [
      { id: 1, title: 'Carol', genres: ['Romance', 'Drama'] },
      { id: 2, title: 'Wonder Woman', genres: ['Action', 'Adventure'] },
      { id: 3, title: 'Life of Pi', genres: ['Adventure', 'Drama'] },
      { id: 4, title: 'Mad Max: Fury Road', genres: ['Adventure', 'Science Fiction'] },
      { id: 5, title: 'Moana', genres: ['Fantasy', 'Action']},
      { id: 6, title: 'Philadelphia', genres: ['Drama'] },
  ]

  // If the index 'movies' does not exist, Meilisearch creates it when you first add the documents.
  let response = await index.addDocuments(documents)

  console.log(response) // => { "uid": 0 }
})()

Tasks such as document addition always return a unique identifier. You can use this identifier taskUid to check the status (enqueued, processing, succeeded or failed) of a task.

Basic search

// Meilisearch is typo-tolerant:
const search = await index.search('philoudelphia')
console.log(search)

Output:

{
  "hits": [
    {
      "id": "6",
      "title": "Philadelphia",
      "genres": ["Drama"]
    }
  ],
  "offset": 0,
  "limit": 20,
  "estimatedTotalHits": 1,
  "processingTimeMs": 1,
  "query": "philoudelphia"
}

Using search parameters

meilisearch-js supports all search parameters described in our main documentation website.

await index.search(
  'wonder',
  {
    attributesToHighlight: ['*']
  }
)
{
  "hits": [
    {
      "id": 2,
      "title": "Wonder Woman",
      "genres": ["Action", "Adventure"],
      "_formatted": {
        "id": "2",
        "title": "<em>Wonder</em> Woman",
        "genres": ["Action", "Adventure"]
      }
    }
  ],
  "offset": 0,
  "limit": 20,
  "estimatedTotalHits": 1,
  "processingTimeMs": 0,
  "query": "wonder"
}

Custom search with filters

To enable filtering, you must first add your attributes to the filterableAttributes index setting.

await index.updateAttributesForFaceting([
    'id',
    'genres'
  ])

You only need to perform this operation once per index.

Note that Meilisearch rebuilds your index whenever you update filterableAttributes. Depending on the size of your dataset, this might take considerable time. You can track the process using the tasks API).

After you configured filterableAttributes, you can use the filter search parameter to refine your search:

await index.search(
  'wonder',
  {
    filter: ['id > 1 AND genres = Action']
  }
)
{
  "hits": [
    {
      "id": 2,
      "title": "Wonder Woman",
      "genres": ["Action","Adventure"]
    }
  ],
  "offset": 0,
  "limit": 20,
  "estimatedTotalHits": 1,
  "processingTimeMs": 0,
  "query": "wonder"
}

Placeholder search

Placeholder search makes it possible to receive hits based on your parameters without having any query (q). For example, in a movies database you can run an empty query to receive all results filtered by genre.

await index.search(
  '',
  {
    filter: ['genres = fantasy'],
    facets: ['genres']
  }
)
{
  "hits": [
    {
      "id": 2,
      "title": "Wonder Woman",
      "genres": ["Action","Adventure"]
    },
    {
      "id": 5,
      "title": "Moana",
      "genres": ["Fantasy","Action"]
    }
  ],
  "offset": 0,
  "limit": 20,
  "estimatedTotalHits": 2,
  "processingTimeMs": 0,
  "query": "",
  "facetDistribution": {
    "genres": {
      "Action": 2,
      "Fantasy": 1,
      "Adventure": 1
    }
  }
}

Note that to enable faceted search on your dataset you need to add genres to the filterableAttributes index setting. For more information on filtering and faceting, consult our documentation settings.

Abortable search

You can abort a pending search request by providing an AbortSignal to the request.

const controller = new AbortController()

index
  .search('wonder', {}, {
    signal: controller.signal,
  })
  .then((response) => {
    /** ... */
  })
  .catch((e) => {
    /** Catch AbortError here. */
  })

controller.abort()

Using Meilisearch behind a proxy

Custom request config

You can provide a custom request configuration. for example, with custom headers.

const client: MeiliSearch = new MeiliSearch({
  host: 'http://localhost:3000/api/meilisearch/proxy',
  requestConfig: {
    headers: {
      Authorization: AUTH_TOKEN
    },
    // OR
    credentials: 'include'
  }
})

Custom http client

You can use your own HTTP client, for example, with axios.

const client: MeiliSearch = new MeiliSearch({
  host: 'http://localhost:3000/api/meilisearch/proxy',
  httpClient: async (url, opts) => {
    const response = await $axios.request({
      url,
      data: opts?.body,
      headers: opts?.headers,
      method: (opts?.method?.toLocaleUpperCase() as Method) ?? 'GET'
    })

    return response.data
  }
})

๐Ÿค– Compatibility with Meilisearch

This package guarantees compatibility with version v1.x of Meilisearch, but some features may not be present. Please check the issues for more info.

๐Ÿ’ก Learn more

The following sections in our main documentation website may interest you:

This repository also contains more examples.

โš™๏ธ Contributing

We welcome all contributions, big and small! If you want to know more about this SDK's development workflow or want to contribute to the repo, please visit our contributing guidelines for detailed instructions.

๐Ÿ“œ API resources

Search

Make a search request

client.index<T>('xxx').search(query: string, options: SearchParams = {}, config?: Partial<Request>): Promise<SearchResponse<T>>

Make a search request using the GET method (slower than the search method)

client.index<T>('xxx').searchGet(query: string, options: SearchParams = {}, config?: Partial<Request>): Promise<SearchResponse<T>>

Multi Search

Make multiple search requests

client.multiSearch(queries?: MultiSearchParams, config?: Partial<Request>): Promise<Promise<MultiSearchResponse<T>>>

multiSearch uses the POST method when performing its request to Meilisearch.

Search For Facet Values

Search for facet values

client.index<T>('myIndex').searchForFacetValues(params: SearchForFacetValuesParams, config?: Partial<Request>): Promise<SearchForFacetValuesResponse>

Documents

Add or replace multiple documents

client.index('myIndex').addDocuments(documents: Document<T>[]): Promise<EnqueuedTask>

Add or replace multiple documents in string format

client.index('myIndex').addDocumentsFromString(documents: string, contentType: ContentType, queryParams: RawDocumentAdditionOptions): Promise<EnqueuedTask>

Add or replace multiple documents in batches

client.index('myIndex').addDocumentsInBatches(documents: Document<T>[], batchSize = 1000): Promise<EnqueuedTask[]>

Add or update multiple documents

client.index('myIndex').updateDocuments(documents: Array<Document<Partial<T>>>): Promise<EnqueuedTask>

Add or update multiple documents in string format

client.index('myIndex').updateDocumentsFromString(documents: string, contentType: ContentType, queryParams: RawDocumentAdditionOptions): Promise<EnqueuedTask>

Add or update multiple documents in batches

client.index('myIndex').updateDocumentsInBatches(documents: Array<Document<Partial<T>>>, batchSize = 1000): Promise<EnqueuedTask[]>

Get Documents

client.index.getDocuments(parameters: DocumentsQuery = {}): Promise<DocumentsResults<T>>>

Get one document

client.index('myIndex').getDocument(documentId: string): Promise<Document<T>>

Delete one document

client.index('myIndex').deleteDocument(documentId: string | number): Promise<EnqueuedTask>

Delete multiple documents

client.index('myIndex').deleteDocuments(params: DocumentsDeletionQuery | DocumentsIds): Promise<EnqueuedTask>

Delete all documents

client.index('myIndex').deleteAllDocuments(): Promise<Types.EnqueuedTask>

Tasks

Get all tasks

client.getTasks(parameters: TasksQuery): Promise<TasksResults>

Get one task

client.getTask(uid: number): Promise<Task>

Delete tasks

client.deleteTasks(parameters: DeleteTasksQuery = {}): Promise<EnqueuedTask>

Cancel tasks

client.cancelTasks(parameters: CancelTasksQuery = {}): Promise<EnqueuedTask>

Get all tasks of an index

client.index('myIndex').getTasks(parameters: TasksQuery): Promise<TasksResults>

Get one task of an index

client.index('myIndex').getTask(uid: number): Promise<Task>

Wait for one task

Using the client
client.waitForTask(uid: number, { timeOutMs?: number, intervalMs?: number }): Promise<Task>
Using the index
client.index('myIndex').waitForTask(uid: number, { timeOutMs?: number, intervalMs?: number }): Promise<Task>

Wait for multiple tasks

Using the client
client.waitForTasks(uids: number[], { timeOutMs?: number, intervalMs?: number }): Promise<Task[]>
Using the index
client.index('myIndex').waitForTasks(uids: number[], { timeOutMs?: number, intervalMs?: number }): Promise<Task[]>

Indexes

Get all indexes in Index instances

client.getIndexes(parameters: IndexesQuery): Promise<IndexesResults<Index[]>>

Get all indexes

client.getRawIndexes(parameters: IndexesQuery): Promise<IndexesResults<IndexObject[]>>

Create a new index

client.createIndex<T>(uid: string, options?: IndexOptions): Promise<EnqueuedTask>

Create a local reference to an index

client.index<T>(uid: string): Index<T>

Get an index instance completed with information fetched from Meilisearch

client.getIndex<T>(uid: string): Promise<Index<T>>

Get the raw index JSON response from Meilisearch

client.getRawIndex(uid: string): Promise<IndexObject>

Get an object with information about the index

client.index('myIndex').getRawInfo(): Promise<IndexObject>

Update Index

Using the client
client.updateIndex(uid: string, options: IndexOptions): Promise<EnqueuedTask>
Using the index object
client.index('myIndex').update(data: IndexOptions): Promise<EnqueuedTask>

Delete index

Using the client
client.deleteIndex(uid): Promise<void>
Using the index object
client.index('myIndex').delete(): Promise<void>

Get specific index stats

client.index('myIndex').getStats(): Promise<IndexStats>
Return Index instance with updated information
client.index('myIndex').fetchInfo(): Promise<Index>
Get Primary Key of an Index
client.index('myIndex').fetchPrimaryKey(): Promise<string | undefined>
Swap two indexes
client.swapIndexes(params: SwapIndexesParams): Promise<EnqueuedTask>

Settings

Get settings

client.index('myIndex').getSettings(): Promise<Settings>

Update settings

client.index('myIndex').updateSettings(settings: Settings): Promise<EnqueuedTask>

Reset settings

client.index('myIndex').resetSettings(): Promise<EnqueuedTask>

Pagination Settings

Get pagination

client.index('myIndex').getPagination(): Promise<PaginationSettings>

Update pagination

client.index('myIndex').updatePagination(pagination: PaginationSettings): Promise<EnqueuedTask>

Reset pagination

client.index('myIndex').resetPagination(): Promise<EnqueuedTask>

Synonyms

Get synonyms

client.index('myIndex').getSynonyms(): Promise<Synonyms>

Update synonyms

client.index('myIndex').updateSynonyms(synonyms: Synonyms): Promise<EnqueuedTask>

Reset synonyms

client.index('myIndex').resetSynonyms(): Promise<EnqueuedTask>

Stop words

Get stop words

client.index('myIndex').getStopWords(): Promise<string[]>

Update stop words

client.index('myIndex').updateStopWords(stopWords: string[] | null ): Promise<EnqueuedTask>

Reset stop words

client.index('myIndex').resetStopWords(): Promise<EnqueuedTask>

Ranking rules

Get ranking rules

client.index('myIndex').getRankingRules(): Promise<string[]>

Update ranking rules

client.index('myIndex').updateRankingRules(rankingRules: string[] | null): Promise<EnqueuedTask>

Reset ranking rules

client.index('myIndex').resetRankingRules(): Promise<EnqueuedTask>

Distinct Attribute

Get distinct attribute

client.index('myIndex').getDistinctAttribute(): Promise<string | void>

Update distinct attribute

client.index('myIndex').updateDistinctAttribute(distinctAttribute: string | null): Promise<EnqueuedTask>

Reset distinct attribute

client.index('myIndex').resetDistinctAttribute(): Promise<EnqueuedTask>

Searchable attributes

Get searchable attributes

client.index('myIndex').getSearchableAttributes(): Promise<string[]>

Update searchable attributes

client.index('myIndex').updateSearchableAttributes(searchableAttributes: string[] | null): Promise<EnqueuedTask>

Reset searchable attributes

client.index('myIndex').resetSearchableAttributes(): Promise<EnqueuedTask>

Displayed attributes

Get displayed attributes

client.index('myIndex').getDisplayedAttributes(): Promise<string[]>

Update displayed attributes

client.index('myIndex').updateDisplayedAttributes(displayedAttributes: string[] | null): Promise<EnqueuedTask>

Reset displayed attributes

client.index('myIndex').resetDisplayedAttributes(): Promise<EnqueuedTask>

Filterable attributes

Get filterable attributes

client.index('myIndex').getFilterableAttributes(): Promise<string[]>

Update filterable attributes

client.index('myIndex').updateFilterableAttributes(filterableAttributes: string[] | null): Promise<EnqueuedTask>

Reset filterable attributes

client.index('myIndex').resetFilterableAttributes(): Promise<EnqueuedTask>

Sortable attributes

Get sortable attributes

client.index('myIndex').getSortableAttributes(): Promise<string[]>

Update sortable attributes

client.index('myIndex').updateSortableAttributes(sortableAttributes: string[] | null): Promise<EnqueuedTask>

Reset sortable attributes

client.index('myIndex').resetSortableAttributes(): Promise<EnqueuedTask>

Faceting

Get faceting

client.index('myIndex').getFaceting(): Promise<Faceting>

Update faceting

client.index('myIndex').updateFaceting(faceting: Faceting): Promise<EnqueuedTask>

Reset faceting

client.index('myIndex').resetFaceting(): Promise<EnqueuedTask>

Typo tolerance

Get typo tolerance

client.index('myIndex').getTypoTolerance(): Promise<TypoTolerance>

Update typo tolerance

client.index('myIndex').updateTypoTolerance(typoTolerance: TypoTolerance | null): Promise<EnqueuedTask>

Reset typo tolerance

client.index('myIndex').resetTypoTolerance(): Promise<EnqueuedTask>

Keys

Get keys

client.getKeys(parameters: KeysQuery): Promise<KeysResults>

Get one key

client.getKey(keyOrUid: string): Promise<Key>

Create a key

client.createKey(options: KeyCreation): Promise<Key>

Update a key

client.updateKey(keyOrUid: string, options: KeyUpdate): Promise<Key>

Delete a key

client.deleteKey(keyOrUid: string): Promise<void>

isHealthy

Return true or false depending on the health of the server

client.isHealthy(): Promise<boolean>

Health

Check if the server is healthy

client.health(): Promise<Health>

Stats

Get database stats

client.getStats(): Promise<Stats>

Version

Get binary version

client.getVersion(): Promise<Version>

Dumps

Trigger a dump creation process

client.createDump(): Promise<EnqueuedTask>

Meilisearch provides and maintains many SDKs and integration tools like this one. We want to provide everyone with an amazing search experience for any kind of project. For a full overview of everything we create and maintain, take a look at the integration-guides repository.

More Repositories

1

meilisearch

A lightning-fast search API that fits effortlessly into your apps, websites, and workflow
Rust
46,587
star
2

meilisearch-php

PHP wrapper for the Meilisearch API
PHP
602
star
3

heed

A fully typed LMDB wrapper with minimum overhead ๐Ÿฆ
Rust
586
star
4

meilisearch-go

Golang wrapper for the Meilisearch API
Go
515
star
5

meilisearch-js-plugins

The search client to use Meilisearch with InstantSearch.
TypeScript
469
star
6

meilisearch-laravel-scout

MeiliSearch integration for Laravel Scout
PHP
465
star
7

milli

Search engine library for Meilisearch โšก๏ธ
Rust
464
star
8

meilisearch-python

Python wrapper for the Meilisearch API
Python
453
star
9

meilisearch-rust

Rust wrapper for the Meilisearch API.
Rust
350
star
10

MeiliES

A Rust based event store using the Redis protocol
Rust
324
star
11

meilisearch-rails

Meilisearch integration for Ruby on Rails
Ruby
295
star
12

docs-scraper

Scrape documentation into Meilisearch
Python
284
star
13

meilisearch-dotnet

.NET wrapper for the Meilisearch API
C#
256
star
14

charabia

Library used by Meilisearch to tokenize queries and documents
Rust
250
star
15

mini-dashboard

mini-dashboard for Meilisearch
JavaScript
227
star
16

strapi-plugin-meilisearch

A strapi plugin to add your collections to Meilisearch
JavaScript
220
star
17

meilisearch-kubernetes

Meilisearch on Kubernetes Helm charts and manifests
Mustache
208
star
18

arroy

An Approximate Nearest Neighbors library in Rust, based on random projections and LMDB and optimized for memory usage ๐Ÿ’ฅ
Rust
207
star
19

meilisearch-ruby

Ruby SDK for the Meilisearch API
Ruby
196
star
20

meilisearch-react

194
star
21

meilisearch-java

Java client for Meilisearch
Java
183
star
22

docs-searchbar.js

Front-end search bar for documentation with Meilisearch
JavaScript
166
star
23

meilisearch-vue

154
star
24

documentation

Meilisearch documentation
MDX
145
star
25

integration-guides

Central reference for Meilisearch integrations.
Shell
137
star
26

meilisearch-symfony

Seamless integration of Meilisearch into your Symfony project.
PHP
124
star
27

awesome-meilisearch

A curated list of awesome Meilisearch resources
103
star
28

meilisearch-swift

Swift client for the Meilisearch API
Swift
93
star
29

firestore-meilisearch

Fulltext search on Firebase with Meilisearch
TypeScript
85
star
30

ecommerce-demo

Nuxt 3 ecommerce site search with filtering and facets powered by Meilisearch
Vue
84
star
31

meilisearch-dart

The Meilisearch API client written for Dart
Dart
78
star
32

saas-demo

App search in a CRM use case, powered by Meilisearch
PHP
75
star
33

vuepress-plugin-meilisearch

Add a relevant and typo tolerant search bar to your VuePress
JavaScript
64
star
34

product

Public feedback and ideation discussions for Meilisearch product ๐Ÿ”ฎ
55
star
35

meilisearch-wordpress

WordPress plugin for Meilisearch.
PHP
53
star
36

demos

A list of Meilisearch demos with open-source code and live preview โšก๏ธ
CoffeeScript
52
star
37

demo-movies

Next.js app to find streaming platform to watch movies
JavaScript
47
star
38

gatsby-plugin-meilisearch

A plugin to index your Gatsby content to Meilisearch based on graphQL queries
JavaScript
40
star
39

landing

Meilisearch's landing page
JavaScript
35
star
40

meilisearch-migration

Scripts to update Meilisearch version's.
Shell
34
star
41

devrel

Anything Developer Relations at Meili
CSS
26
star
42

meilisearch-angular

Instant Meilisearch for Angular Framework
24
star
43

meilisearch-digitalocean

Meilisearch services on DigitalOcean
Python
24
star
44

grenad

Tools to sort, merge, write, and read immutable key-value pairs ๐Ÿ…
Rust
24
star
45

deserr

Deserialization library with focus on error handling
Rust
24
star
46

scrapix

TypeScript
21
star
47

meilisearch-aws

AWS services for Meilisearch
Python
20
star
48

cargo-flaky

A cargo sub-command to helps you find flaky tests
Rust
20
star
49

meilisearch-gcp

Meilisearch services on GCP
Python
20
star
50

madness

an async mdns library for tokio
Rust
19
star
51

specifications

Track specification elaboration.
17
star
52

meilisearch-importer

A CLI to import massive CSV and NdJson into Meilisearch
Rust
17
star
53

cloud-providers

โ˜ Meilisearch DevOps Tools for the Cloud โ˜
Shell
17
star
54

demo-finding-crates

Expose all crates from crates.io with MeiliSearch
Rust
17
star
55

transplant

Rust
15
star
56

engine-team

Repository gathering the development process of the core-team
15
star
57

obkv

A micro key-value store where the key is always one byte
Rust
12
star
58

compute-embeddings

A small tool to compute the embeddings of a list of JSON documents
Rust
12
star
59

cloud-scripts

Cloud scripts for cloud provider agnostic configuration
Shell
9
star
60

demo-finding-rubygems

Alternative search bar for RubyGems
Ruby
8
star
61

minimeili-raft

A small implementation of a dummy Meilisearch running on top of Raft
Rust
7
star
62

strapi-plugin-meilisearch-v4

Work in progress
JavaScript
6
star
63

meili-aoc

meili-aoc
Rust
6
star
64

searchbar.js

wip
JavaScript
6
star
65

demo-MoMA

A MeiliSearch demo using the Museum Of Modern Art Collection
JavaScript
6
star
66

vercel-demo

A website that lets you know where to watch a movie built on Next.js and Meilisearch, deployed on Vercel with the Meilisearch + Vercel integration.
JavaScript
6
star
67

mini-search-engine-presentation

A simple and "short" presentation of the search engine
5
star
68

jayson

Rust
4
star
69

meilisearch-flutter

[wip] A basic UI kit with Meilisearch search widgets for Flutter
CMake
4
star
70

nelson

Rust
4
star
71

demo-finding-pypi

Alternative search bar for PyPI packages
Python
4
star
72

nextjs-starter-meilisearch-table

TypeScript
3
star
73

open-api

3
star
74

js-project-boilerplate

A boilerplate providing basic configuration for JavaScript projects in Meilisearch
3
star
75

synonyms

2
star
76

.github

2
star
77

parallel-write-exp

A parallel indexer experiment for Meilisearch
Rust
2
star
78

devops-tools

Shell
2
star
79

discord-bot-productboard

JavaScript
2
star
80

strois

A simple non-async S3 client based on the REST API
Rust
2
star
81

datasets

2
star
82

poc-vector-store-recall

A experimental tool that uses the vector store to increase Meilisearch's recall
Rust
2
star
83

actions

Meilisearch Github Actions
JavaScript
1
star
84

devspector

Develop specification inspector
JavaScript
1
star
85

design-team

1
star
86

movies-react-demo

Created with CodeSandbox
HTML
1
star
87

ansible-vm-benchmarks

Ansible Playbook to index datasets on several typology of Instance on a specific Meilisearch version/commit
Rust
1
star
88

akamai-purge

A Rust helper to purge Akamai cache
Rust
1
star
89

poc-heed-codec

A repository to help us define the new design of heed
Rust
1
star
90

mainspector

Main specification inspector
JavaScript
1
star
91

massive-meilisearch-sampling

A program that generates and sends dataset and samples update/deletes to a Meilisearch server
Rust
1
star
92

benchboard

Benchmark dashboard
Rust
1
star
93

settings_guessr

A tool that guess your settings by using the dataset
Rust
1
star
94

alberto

A program that displays the size of the documents in a Meilisearch database.
Rust
1
star
95

musicbrainz-demo

A demo showcasing Meilisearch with a large musics dataset coming from Musicbrainz
JavaScript
1
star
96

meilisearch-webhook-usage-example

Example of how to use the meilisearch webhook
Rust
1
star
97

meilikeeper

A sync zookeeper client on top of the official C client
Rust
1
star
98

zookeeper-client-sync

zookeeper-client-sync
Rust
1
star