@elgato/schemas
Version:
Collection of schemas, and TypeScript declarations, to support the creation and validation of Stream Deck SDK files
95 lines (67 loc) • 3.93 kB
Markdown
<div align="center">
[](https://docs.elgato.com/sdk)
# Schemas
[](https://www.npmjs.com/package/@elgato/schemas)
[](https://docs.elgato.com/sdk)
[](https://discord.gg/GehBUcu627)
[](https://elgato.com)
</div>
Collection of schemas, and TypeScript declarations, to support the creation and validation of Stream Deck SDK files.
```bash
npm install @elgato/schemas
```
## Stream Deck
### Plugin
#### Manifest
Manifest JSON file responsible for defining a Stream Deck plugin.
```ts
// TypeScript type.
import { type Manifest } from "@elgato/schemas/streamdeck/plugins";
```
```js
// Schema as an object.
import manifest from "@elgato/schemas/streamdeck/plugins/json";
```
```js
// 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 +.
```ts
// TypeScript type.
import { type Layout } from "@elgato/schemas/streamdeck/plugins";
```
```js
// Schema as an object.
import layout from "@elgato/schemas/streamdeck/plugins/json";
```
```js
// 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:
```jsonc
{
"$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.
```ts
import { keywordDefinitions } from "@elgato/schemas";
import Ajv from "ajv";
// add the "filePath" keyword (excluding validation)
ajv.addKeyword(keywordDefinitions.filePath);
```