Skip to content

JSON schemas, and TypeScript declarations, for building with Stream Deck.

License

Notifications You must be signed in to change notification settings

elgatosf/schemas

Repository files navigation

Stream Deck SDK banner

Schemas

Schemas npm package SDK documentation Join the Marketplace Makers Discord Elgato homepage

Collection of schemas, and TypeScript declarations, to support the creation and validation of Stream Deck SDK files.

npm install @elgato/schemas

Stream Deck

Plugin

Manifest

Manifest JSON file responsible for defining a Stream Deck plugin.

// TypeScript type.
import { type Manifest } from "@elgato/schemas/streamdeck/plugins";
// Schema as an object.
import manifest from "@elgato/schemas/streamdeck/plugins/json";
// Schema as an object, with experimental import attributes
import manifest from "@elgato/schemas/streamdeck/plugins/manifest.json" with { type: "json" };
https://schemas.elgato.com/streamdeck/plugins/manifest.json

Layout

Layout JSON file that defines the layout of an action on Stream Deck +.

// TypeScript type.
import { type Layout } from "@elgato/schemas/streamdeck/plugins";
// Schema as an object.
import layout from "@elgato/schemas/streamdeck/plugins/json";
// Schema as an object, with experimental import attributes
import layout from "@elgato/schemas/streamdeck/plugins/layout.json" with { type: "json" };
https://schemas.elgato.com/streamdeck/plugins/layout.json

Usage

Schemas can be referenced directly within JSON files, providing intellisense and validation, using the $schema property, for example:

{
    "$schema": "https://schemas.elgato.com/streamdeck/plugins/manifest.json",
    "Name": "Wave Link",
    "Version": "1.9.0.0",
    "Author": "Elgato"
    // ...
}

Keywords

Custom keywords used within the provided schemas can also be directly imported to assist with constructing a validator, such as Ajv. Please note, the custom keyword definitions will only register the keyword, and will not provide validation.

import { keywordDefinitions } from "@elgato/schemas";
import Ajv from "ajv";

// add the "filePath" keyword (excluding validation)
ajv.addKeyword(keywordDefinitions.filePath);