Deluan 1a7ba7f293 feat: rewrite the wikimedia plugin using the XTP CLI
Signed-off-by: Deluan <deluan@navidrome.org>
2025-12-31 17:06:29 -05:00

107 lines
2.7 KiB
Markdown

# Navidrome Plugin Examples
This folder contains example plugins for Navidrome that demonstrate how to build metadata agents using the plugin system.
## Building
### Prerequisites
- [TinyGo](https://tinygo.org/getting-started/install/) (recommended) or Go 1.23+
- [Extism CLI](https://extism.org/docs/install) (optional, for testing)
### Build all plugins
```bash
make
```
This will compile all example plugins and place the `.wasm` files in this directory.
### Build a specific plugin
```bash
make minimal.wasm
make wikimedia.wasm
```
### Clean build artifacts
```bash
make clean
```
## Available Examples
| Plugin | Description |
|-------------------------|---------------------------------------------------------------|
| [minimal](minimal/) | A minimal example showing the basic plugin structure |
| [wikimedia](wikimedia/) | Fetches artist metadata from Wikidata, DBpedia, and Wikipedia |
## Testing with Extism CLI
You can test any plugin using the Extism CLI:
```bash
# Test the manifest
extism call minimal.wasm nd_manifest --wasi
# Test with input
extism call minimal.wasm nd_get_artist_biography --wasi \
--input '{"id":"1","name":"The Beatles"}'
```
For plugins that make HTTP requests, use `--allow-host` to permit access:
```bash
extism call wikimedia.wasm nd_get_artist_biography --wasi \  3s   ▼
--input '{"id":"1","name":"Yussef Dayes"}' \
--allow-host "query.wikidata.org" --allow-host "en.wikipedia.org"
```
## Installation
Copy any `.wasm` file to your Navidrome plugins folder:
```bash
cp wikimedia.wasm /path/to/navidrome/plugins/
```
Then enable plugins in your `navidrome.toml`:
```toml
[Plugins]
Enabled = true
Folder = "/path/to/navidrome/plugins"
```
And add the plugin to your agents list:
```toml
Agents = "lastfm,spotify,wikimedia"
```
## Creating Your Own Plugin
See the [minimal](minimal/) example for the simplest starting point, or [wikimedia](wikimedia/) for a more complete
example with HTTP requests, created with the [XTP CLI]((https://docs.xtp.dylibso.com/docs/cli).
### Bootstrapping a New Plugin
Use the XTP CLI to bootstrap a new plugin from a schema:
```bash
xtp plugin init \
--schema-file plugins/schemas/metadata_agent.yaml \
--template go \
--path ./my-plugin \
--name my-plugin
```
See the [schemas README](../schemas/README.md) for more information about available schemas
and supported languages.
For the simplest starting point, look at [minimal](minimal/). For a more complete example
with HTTP requests, see [wikimedia](wikimedia/).
For full documentation, see the [Plugin System README](../README.md).