Services
Services are pure abstract interfaces looked up through ctx.GetService<T>().
Each has a stable InterfaceId string used as its registry key. This page lists
the interfaces shipped with the SDK.
For how to look up and register services, see Cross-Plugin Communication.
Host services
Registered by the host before any plugin installs, so they are always available in
OnInstall. Discover each with GetService<T>() and null-check.
Settings — ISettingsStore, ISettingsRegistry
Declared in <framelift/services.h>.
ISettingsStore— typed host-setting getters (GetSettingBool/Int/Float/Stringkeyed by"section.name"), commit +SaveSettings()(settings-menu only), change-callback registration, and per-plugin INI sections viaGetModuleSettings("section")→IModuleSettings.ISettingsRegistry— register settings pages and keybind entries (RegisterSettingsPage,RegisterKeybindEntry) so the SettingsMenu plugin can render them without knowing your types, plus theEnumerate*walks it uses.
See Settings.
Media playback — interface family
The playback backend (FFmpeg + libass) is exposed as a family of small interfaces
in <framelift/platform/IMediaPlayer.h> rather than one god-object. One host
object implements them all; fetch only the facet you need:
| Interface | Covers |
|---|---|
IMediaPlayback | LoadFile, SetPause/TogglePause, Seek/SeekAbsolute, image timing, playback + read-ahead options, the PollEvent source behind media events. |
IMediaProperties | Async property queries: GetDoubleAsync, GetInt64Async, GetStringAsync, GetDisplaySizeAsync, ObserveProperty. |
IAudioControl | Mute/volume, normalization, audio track enumeration/selection, output devices, audio preferences. |
ISubtitleControl | Subtitle track enumeration/selection, visibility, delay, appearance styling. |
IVideoOutput | Video presentation surface (host-internal; rarely needed by plugins). |
Window & platform
Declared in <framelift/platform.h>.
IAppWindow— plugin-visible window title and fullscreen state (SetTitle,IsFullscreen/SetFullscreen).IEventPump— inject custom events into the Qt-owned event loop (RegisterCustomEventType,PushCustomEvent,PushQuitEvent).IFileDialog— native open/save file dialogs.
Other registered services
The host also registers Hotkeys (keybind dispatch — see
Keybinds), FocusManager, ContextMenu, IPluginCatalog
(installed plugins), and IAppPaths (config directory), each keyed by its own
InterfaceId.
Feature services
Provided by the corresponding feature plugins, so they are present only when that
plugin is enabled — always null-check the result of GetService. Declared in
<framelift/services.h>.
IHistory
int GetMostRecent(char* buf, int cap) const noexcept; // most recent path; buf may be null
double GetResumePos(const char* path) const noexcept; // 0.0 if not found
GetMostRecent follows the buffer convention: returns the full length excluding
NUL; pass buf=nullptr to query the required size.
History updates (adding entries, updating resume positions) flow through events
(FileOpenedEvent / FileEndedEvent) rather than this interface.
Defining your own
Any plugin can publish a service: a pure abstract class with a unique
InterfaceId and POD-only method signatures, registered with
ctx.RegisterService<IMyService>(this). See
Cross-Plugin Communication
and the ABI rules.