Open Stream Deck

Манифест

opensd.toml: поля плагина, действия, поля формы и настройки по умолчанию.

Автор пишет opensd.toml. При упаковке CLI проверяет его и кладёт в пакет manifest.json с теми же ключами.

sdk = 1
id = "com.example.counter"
name = "Counter"
version = "1.0.0"
author = "Example"
description = "Счётчик нажатий"
homepage = "https://example.com"
license = "MIT"
icon = "assets/icon.svg"
min_app = "0.2.0"

[runtime]
type = "wasm"            # "wasm" или "js"
main = "plugin.wasm"

[ui]
inspector = "ui/inspector.html"   # страница настроек кнопки по умолчанию
settings = "ui/settings.html"     # окно настроек всего плагина

[package]
include = ["assets", "ui"]        # что попадёт в пакет, кроме кода и манифеста

[permissions]
loopback = ["9222-9322"]
network = ["https://api.example.com"]
clipboard = true

[[permissions.launch]]
id = "editor"
name = "Example Editor"
windows = ["%LOCALAPPDATA%/Programs/Editor/editor.exe"]
macos = ["/Applications/Editor.app"]
linux = ["/usr/bin/editor"]
args = ["--port={0}"]

[[actions]]
id = "com.example.counter.increment"
name = "Увеличить"
description = "Каждое нажатие прибавляет единицу"
icon = "assets/key.svg"
controllers = ["key"]
settings = { count = 0, step = 1 }
title = { align = "bottom", size = 14, color = "#ffffff" }
gestures = { long_press = 600 }

[[actions.fields]]
id = "step"
label = "Шаг"
type = "number"
min = 1
max = 100

[[actions.states]]
image = "assets/key.svg"

Поля верхнего уровня

ПолеТипОбязательноОписание
sdkчислодаМажорная версия SDK. Сейчас 1
idстрокадаОбратная доменная запись в нижнем регистре: буквы, цифры, дефис, точки. До 128 символов
nameстрокадаНазвание в интерфейсе, до 64 символов
versionстрокадаSemVer
authorстрокадаАвтор или организация
descriptionстроканетОписание, до 512 символов
homepageстроканетСсылка https://
licenseстроканетИдентификатор SPDX
iconпутьнетИконка плагина
min_appстроканетМинимальная версия приложения, SemVer
runtimeтаблицадаtype и main
uiтаблицанетinspector и settings, пути к HTML
packageтаблицанетinclude: каталоги и файлы для пакета. По умолчанию ["assets", "ui"]
permissionsтаблицанетРазрешения, см. ниже
actionsмассивдаОт 1 до 64 действий

Действие

ПолеТипОписание
idстрокаНачинается с <id плагина>.
nameстрокаНазвание
descriptionстрокаПодсказка
iconпутьЗначок в списке действий
controllersмассив"key" для кнопок, "side" для боковой полосы. По умолчанию ["key"]
inspectorпутьСвоя страница настроек кнопки. Перекрывает ui.inspector
fieldsмассивПоля формы, которую рисует приложение. Используются, если у действия нет HTML-страницы
settingsтаблицаНачальные настройки экземпляра
statesмассивСостояния: image, title, show_title. До 16
titleтаблицаСтиль подписи по умолчанию: align (top, middle, bottom), size (6..32), color (#rrggbb), bold
gesturesтаблицаЖесты, которые считает хост: long_press, hold, repeat в миллисекундах

Поля формы

ПолеОписание
idКлюч в настройках экземпляра
labelПодпись
typetext, textarea, number, select, toggle, color
placeholder, hintПодсказки
defaultЗначение, если ключа нет в настройках
optionsДля select: массив { value, label }
min, max, stepДля number

Пользователь меняет поле, приложение сохраняет значение и отправляет плагину событие settings.

Разрешения из [permissions] описаны в разделе разрешения, жесты в разделе протокол, поля формы и HTML-страницы в разделе настройки.