Open Stream Deck

Пакет .opensd

Формат пакета: состав архива, индекс целостности index.json и правила для путей и размеров.

Плагин распространяется одним архивом .opensd. Внутри нет исполняемых файлов операционной системы. Пакет создаёт opensd pack, проверяет opensd check, а показывает содержимое opensd inspect.

Состав

ФайлНазначение
manifest.jsonМанифест плагина. Генерируется из opensd.toml при упаковке
index.jsonИндекс целостности: размер и SHA-256 каждого файла
runtime.mainКод плагина: plugin.wasm или plugin.js (имя задаёт манифест)
ОстальноеКартинки, страницы настроек, шрифты и прочие ресурсы

index.json:

{
  "format": "opensd",
  "format_version": 1,
  "id": "com.example.counter",
  "version": "1.0.0",
  "files": {
    "manifest.json": { "size": 812, "sha256": "…" },
    "plugin.wasm": { "size": 41233, "sha256": "…" }
  }
}

Индекс перечисляет все файлы архива, кроме себя. Лишний файл, отсутствующий файл, несовпадение размера или хэша делают пакет недействительным.

Правила

ПараметрОграничение
Записей в архиве2048
Суммарный распакованный размер64 МиБ
Один файл16 МиБ
Модуль WASM16 МиБ, линейная память не больше 64 МиБ
Код JavaScript8 МиБ, UTF-8
  • Пути относительные, с прямым слешем, без .., ., пустых сегментов, двоеточий, обратных слешей, зарезервированных имён Windows и символов <>"|?*.
  • Имена, отличающиеся только регистром, запрещены.
  • Каталоги, ссылки и специальные записи запрещены.
  • Файлы с сигнатурами PE, ELF и Mach-O запрещены под любым именем.
  • manifest.json и index.json должны описывать один и тот же id и version.

SHA-256 подтверждает целостность относительно индекса. Это не подпись автора: тот, кто меняет пакет, может пересчитать индекс. Подписи издателей появятся в отдельной версии формата.