https://github.com/arnesacnussem/jellyfin-plugin-meilisearch
A search plugin for Jellyfin
https://github.com/arnesacnussem/jellyfin-plugin-meilisearch
jellyfin-plugin meilisearch
Last synced: 4 months ago
JSON representation
A search plugin for Jellyfin
- Host: GitHub
- URL: https://github.com/arnesacnussem/jellyfin-plugin-meilisearch
- Owner: arnesacnussem
- License: gpl-3.0
- Created: 2024-11-05T15:34:27.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2026-01-24T10:15:10.000Z (4 months ago)
- Last Synced: 2026-01-24T21:05:07.985Z (4 months ago)
- Topics: jellyfin-plugin, meilisearch
- Language: C#
- Homepage:
- Size: 165 KB
- Stars: 202
- Watchers: 6
- Forks: 11
- Open Issues: 10
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-jellyfin - jellyfin-plugin-meilisearch - Enhances Jellyfin search speed and accuracy by offloading queries to a Meilisearch instance. (🧩 Plugins / 📚 Library Management)
README
# Meilisearch Plugin for Jellyfin
A plugin for Jellyfin that improves search by utilizing Meilisearch as a search engine. Search logic is offloaded to a Meilisearch instance, and the response from Jellyfin is modified
Improved:
* Speed
* Results _([fuzzy matching](https://en.wikipedia.org/wiki/Approximate_string_matching), typos)_
> [!NOTE]
> As long as your client uses `/Items` endpoint for search, it should be supported seamlessly _I guess_
> Inspired by [JellySearch](https://gitlab.com/DomiStyle/jellysearch).
---
### Setup instructions
1. **Setup a Meilisearch instance** _(maybe a hosted one in the cloud will also work, but I don't recommend)_
- Docker is recommended. Example `docker-compose.yml`:
```
services:
meilisearch:
container_name: meilisearch
image: getmeili/meilisearch:v1.34 # older versions may have compatibility issues
restart: unless-stopped
environment:
MEILI_ENV: production
MEILI_NO_ANALYTICS: "true"
MEILI_MASTER_KEY: super-secret-key
volumes:
# meilisearch's data
- ./data:/meili_data
ports:
- 7700:7700
```
3. **Install the Meilisearch plugin**
- In Jellyfin:
1. Add the plugin Repository:
```
https://raw.githubusercontent.com/arnesacnussem/jellyfin-plugin-meilisearch/refs/heads/master/manifest.json
```
2. Install the Meilisearch plugin
3. Restart Jellyfin Server
4. **Configure the Meilisearch plugin**
- In Meilisearch plugin's page:
1. **Meilisearch URL**: URL to your Meilisearch instance, as seen by Jellyfin _(example: `http://meilisearch:7700`)_
2. **Meilisearch Api Key**: API key to access your Meilisearch instance _(if required)_ _(example: `super-secret-key`)_
3. Click `Save`
4. The plugin's page should show a healthy status
- Example:
```
{
"meilisearch": "Server: available",
"meilisearchOk": true,
"averageSearchTime": "0ms",
"indexStatus": {
"Database": "Data Source=/config/data/jellyfin.db;Cache=Default;Default Timeout=30;Pooling=True",
"Items": "20569",
"LastIndexed": "1/28/2026 4:10:01 PM"
}
}
```
> [!NOTE]
> You can also set the environment variables in Jellyfin, to configure the plugin without editing the Jellyfin UI: `MEILI_URL` and `MEILI_MASTER_KEY`
> [!NOTE]
> If you want share one Meilisearch instance across multiple Jellyfin instance, you can fill the `Meilisearch Index Name`, if leaving empty, it will use the server name.
5. Test Meilisearch plugin search
1. Try Jellyfin search
2. Issues? Check **Jellyfin's logs** and **Meilisearch's logs**
---
Index will update on following events:
- Server start
- Configuration change
- Library scan complete
- Update index task being triggered
---
### How it works
The core feature, which is to mutate the search request, is done by injecting an [`ActionFilter`](https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-8.0#action-filters).
So it may only support a few versions of Jellyfin. At the moment I'm using `Jellyfin 10.11.0`,
but it should work on other versions as long as the required parameter name of `/Items` endpoint doesn't change.
---
###
I've seen JellySearch, which is a wonderful project, but I don't really like setting up a reverse proxy or any of that hassle.
So I am writing this, but it still requires a Meilisearch instance.
At this moment, only the `/Items` endpoint is affected by this plugin, but it still improves a lot on my 200k items library.