Skip to content

Plugin API Versions

Every plugin declares the oldest API level it requires with plugin_api in plugin.toml. API levels are cumulative: use the oldest level that includes every capability your plugin needs to keep it compatible with as many Noctalia versions as possible.

Plugin APINoctalia versionIntroduced
3v5.0.0-beta.3Mandatory plugin_api compatibility declaration, replacing min_noctalia.
4v5.0.0-beta.4noctalia.httpStream() for streaming HTTP responses.
5v5.0.0-beta.4ui.dragSource() and ui.dropZone() for declarative panel drag and drop.
6v5.0.0-beta.4The string_map plugin setting type.
7v5.0.0-beta.4The allow_insecure_tls HTTP request option.
8v5.0.0-beta.4The dismiss_on_outside_click panel entry option.
9v5.0.0-beta.5Luau closures directly in UI tree callback props.
10v5.0.0-beta.5The keyboard_focus panel entry option.
11v5.0.0-beta.5The persistent panel entry option.
12v5.0.0-beta.5noctalia.systemStats(), noctalia.cpuCores(), and noctalia.nowMs().
13v5.0.0-beta.5The capture_keys panel entry option and the onKey callback.
14v5.0.0-beta.5The [widget.actions] entry table, declaring bar gesture defaults.
15v5.0.0-beta.6noctalia.openSettings(), opening the settings window at the plugin's own settings.
16v5.0.0-beta.6Per-interface network rates, sample timestamps, and disk mount/stat APIs.
17v5.0.0-beta.7Service entries start when the plugin is enabled instead of only at launch, and onExit(signal, reason) reports reload, disable, uninstall, or shutdown.
18v5.0.0-beta.7panel.setNeedsFrameTick(bool), delivering onFrameTick(deltaMs) to an open panel.
19v5.0.0-beta.7Timezone support on noctalia.formatTime, noctalia.isValidTimezone(name), and noctalia.timeFormat() / noctalia.dateFormat() mirroring [shell].time_format / date_format.
20v5.0.0-beta.7noctalia.sound.load() and noctalia.sound.play() for plugin audio.
21UnreleasedThe ui.markdown node, submitOnEnter on ui.input, and stickToBottom / onScroll / scrollToBottomRev on ui.scroll.

Noctalia currently supports plugin API levels 3 through 21. A plugin version declaring a level outside that range cannot run.

Raising a plugin’s level therefore drops it from every Noctalia below it. A source repo can keep those users covered by publishing older revisions in its catalog: Noctalia then installs the newest revision of the plugin its own API range allows, labels it in the store as an older version, and moves the user up to the newest one once they upgrade Noctalia. See keeping older Noctalia versions supported.