Skip to content

Changelog

RadiatorTwo edited this page May 25, 2026 · 4 revisions

Changelog

Release notes for LoupixDeck.PluginSdk. The version surfaced at runtime is SdkInfo.Version; the host enforces a major-version match against the value declared in plugin.json (sdkVersion).

1.4.0

Host surface for browser launches and transient touch feedback, plus two forward-compatible command contracts.

IPluginHost additions

Member Purpose
bool OpenBrowser(string url) Opens url in the user's default browser. Host abstracts OS specifics (Windows shell-execute, Linux xdg-open) so OAuth flows don't need per-plugin platform branches.
void OverlayTouchText(int slot, string text, TimeSpan duration) Temporarily paints text on the touch slot at slot and restores the slot's normal content after duration. Fire-and-forget; later calls on the same slot supersede pending restores.
int GetTouchSlotForRotary(int rotaryIndex) Returns the touch slot adjacent to the rotary at rotaryIndex, or -1 when the active device has no such neighbour. Pair with OverlayTouchText for value-flash feedback without hard-coding device geometry.

CommandContext additions

Member Purpose
int? SourceIndex Identifier of the originating control when Target denotes an indexed source (rotary index for RotaryEncoder, touch slot for TouchButton, simple-button index for SimpleButton). null for chained or CLI invocations.

New command contracts (forward-compatible)

Type Purpose
IAdjustmentCommand Rotary-encoder value adjustment — turn invokes ApplyAdjustment, press invokes ApplyReset. Safe to implement now; the host wires it up when available.
IDisplayImageCommand Renders a dynamic PNG on a touch button. Safe to implement now alongside IDisplayCommand for graceful fallback.

1.3.0

Display-only setting headers and persisted-key enumeration.

PluginSettingKind additions

Member Purpose
Heading Display-only section header in dynamically built settings pages. Carries no value; used to group related controls.

IPluginSettings additions

Member Purpose
IEnumerable<string> Keys { get; } Enumerates every key currently present, in undefined order. Use it to discover prefixed entries — e.g. Keys.Where(k => k.StartsWith("alias:")) — without tracking them in a separate index.

Clone this wiki locally