Skip to main content

Bundled Plugins

Every user-facing feature ships as a plugin — one Qt plugin DLL/SO per feature in plugins/, loaded at runtime. The host has no compile-time knowledge of any of them; they coordinate only through the module context (events and services). This is the same mechanism your own SDK plugins use.

PluginPlugin idWhat it does
Overlayframelift.overlayPlayback-controls HUD, idle screen, and on-screen notifications.
Playlistframelift.playlistDirectory scanning, the playlist panel, and file navigation.
Historyframelift.historyRecently-played entries with saved resume positions.
SettingsMenuframelift.settings_menuThe settings pages, plugin catalogue, and keybind editor.
DebugOverlayframelift.debug_overlayLive playback and runtime diagnostic overlay.
Benchmarkframelift.benchmarkPerformance benchmark overlay and system stats.
RemoteStreamframelift.remote_streamRemote URL entry and HTTP/HTTPS/RTSP streaming.
ContextMenuframelift.context_menuA shared right-click menu surface other plugins extend via a service.

Toggling them

Because they are ordinary plugins, any of these can be disabled at runtime from Settings → Plugins (which writes plugins.ini), or by deleting the plugin DLL/SO from plugins/. The SettingsMenu, host UI, and playback paths are the ones most features depend on, so disabling them affects the most.

How they cooperate

A few representative interactions illustrate the events-first design:

  • History publishes an OpenFileRequestEvent when you pick an entry; Playlist subscribes and actually opens the file.
  • Playlist publishes FileOpenedEvent / FileEndedEvent; History consumes them to update entries and resume positions.
  • Any plugin publishes a NotificationEvent; Overlay subscribes and shows it.
  • SettingsMenu renders other plugins' pages without knowing their types, via the ISettingsRegistry service.

See Cross-Plugin Communication for the mechanics.