Plugins
June 12, 2026 ยท View on GitHub
spotatui runs user-written Lua plugins. They react to playback events, add commands and key
bindings, draw popups and playbar segments, restyle the theme, and make async HTTP requests.
See docs/scripting.md for the full API and
examples/plugins/ for runnable examples.
Installing a plugin
Plugins published as git repositories install with one command (requires git):
spotatui plugin add owner/repo # clone + record in the lockfile
spotatui plugin list # show installed plugins
spotatui plugin update # update all to their latest commit
spotatui plugin remove <name> # uninstall
spotatui plugin new <name> # scaffold a new plugin to start from
Plugins are cloned into ~/.config/spotatui/plugins/<name>/ and loaded at startup. Restart
spotatui after installing, and bind any commands the plugin registers under plugin_commands in
config.yml.
Plugins are not sandboxed and run with full app privileges and network access, so only install ones you trust. See Trust and safety.
You can also drop a single .lua file into ~/.config/spotatui/plugins/ by hand.
First-party examples
These ship in this repo under examples/plugins/:
- track-notifier - "Now playing" toast and playbar segment on every track change.
- track-info-popup - a command that pops up details of the current track.
- accent-cycler - a command that rotates the theme accent color.
- now-playing-webhook - POSTs a JSON payload to a webhook on track change.
- session-stats - a directory plugin (with a
require-d helper) that tracks session plays.
Sharing your own plugin
Run spotatui plugin new <name> to scaffold a starting point. A shareable plugin is just a git
repository with a main.lua (or init.lua) entry point at its root. Helper modules sit alongside
it and load via require("module"). Document any command and a suggested key binding in your
README, but ship the binding as a suggestion, not a hard-coded key.
Tag your repository with the GitHub topic spotatui-plugin so it's discoverable, and open a pull
request adding it to this list - a short description and the owner/repo install line is all it
takes.