mirror of
https://github.com/navidrome/navidrome.git
synced 2026-01-03 06:15:22 +00:00
Minimal Navidrome Plugin Example
This is a minimal example demonstrating how to create a Navidrome plugin using Go and the Navidrome PDK.
Building
- Install TinyGo
- Build the plugin:
go mod tidy tinygo build -o plugin.wasm -target wasip1 -buildmode=c-shared . zip -j minimal.ndp manifest.json plugin.wasm
Or using the examples Makefile:
cd plugins/examples
make minimal.ndp
Installing
Copy minimal.ndp to your Navidrome plugins folder (default: <data-folder>/plugins/).
Configuration
Enable plugins in your navidrome.toml:
[Plugins]
Enabled = true
# Add the plugin to your agents list
Agents = "lastfm,spotify,minimal"
What This Example Demonstrates
- Plugin package structure (
.ndp= zip withmanifest.json+plugin.wasm) - Using the Navidrome PDK
metadatasubpackage - Implementing the
ArtistBiographyProviderinterface - Registration pattern with
metadata.Register()
PDK Usage
import "github.com/navidrome/navidrome/plugins/pdk/go/metadata"
type myPlugin struct{}
func init() {
metadata.Register(&myPlugin{})
}
func (p *myPlugin) GetArtistBiography(input metadata.ArtistRequest) (metadata.ArtistBiographyResponse, error) {
return metadata.ArtistBiographyResponse{Biography: "..."}, nil
}
Extending the Example
To add more capabilities, implement additional provider interfaces from the metadata package:
ArtistMBIDProvider- Get MusicBrainz ID for an artistArtistURLProvider- Get external URL for an artistSimilarArtistsProvider- Get similar artistsArtistImagesProvider- Get artist imagesArtistTopSongsProvider- Get top songs for an artistAlbumInfoProvider- Get album informationAlbumImagesProvider- Get album images
See the full documentation in /plugins/README.md for input/output formats.