plugins/examples/minimal/README.md
This is a minimal example demonstrating how to create a Navidrome plugin using Go and the Navidrome PDK.
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
Copy minimal.ndp to your Navidrome plugins folder (default: <data-folder>/plugins/).
Enable plugins in your navidrome.toml:
[Plugins]
Enabled = true
# Add the plugin to your agents list
Agents = "lastfm,spotify,minimal"
.ndp = zip with manifest.json + plugin.wasm)metadata subpackageArtistBiographyProvider interfacemetadata.Register()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
}
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 imagesSee the full documentation in /plugins/README.md for input/output formats.