Packaging and Distribution
Pack only the compiled plugin
Stream Deck plugins are distributed as .streamDeckPlugin installer files generated from the compiled *.sdPlugin directory.
1. Build before packing​
npm run build
Then validate:
streamdeck validate com.example.deploy-tools.sdPlugin
Then pack:
streamdeck pack com.example.deploy-tools.sdPlugin
The pack command validates supporting files, bundles the plugin directory, and outputs a .streamDeckPlugin installer file.
2. What belongs in *.sdPlugin​
com.example.deploy-tools.sdPlugin/
├── bin/
│ └── plugin.js
├── imgs/
├── logs/
├── ui/
│ └── deploy.html
└── manifest.json
Include:
- compiled JavaScript,
- property inspector HTML and local assets,
- icons and images,
- manifest,
- runtime files required by the plugin.
Exclude:
- source maps if not intended,
- tests,
- local notes,
.envfiles,- private keys,
- generated caches,
- development-only logs.
Use .sdignore to exclude files from packaging. It follows .gitignore-style patterns.
3. Local install test​
Before sharing a plugin:
- Stop the watch process.
- Build from a clean source tree.
- Pack the plugin.
- Install the generated
.streamDeckPlugin. - Restart Stream Deck.
- Add every action to a new profile.
- Open every property inspector.
- Test fresh settings and imported/old settings.
- Test after Stream Deck app restart.
- Test on Windows and macOS if you support both.
4. DRM readiness​
Elgato's distribution docs describe DRM protection for Marketplace-distributed plugins. Current docs note:
- Node.js plugins need
@elgato/streamdeckv2 or newer for DRM readiness. - Distributed plugin files are immutable.
- The manifest is protected and should not be read as runtime configuration.
- DRM protection is applied after upload and processing in Maker Console.
Practical rule: never design runtime behavior around modifying packaged files.
Do this instead:
- store runtime state in action settings,
- generate runtime files outside the plugin bundle,
- keep non-sensitive constants in a separate JSON file or embedded code,
- use OS-level storage for secrets.
5. Marketplace checklist​
Before submitting:
- Validate the plugin.
- Use stable UUIDs.
- Check plugin and action names for clarity.
- Provide good icons and gallery material.
- Confirm images are not blurry on physical hardware.
- Confirm property inspectors work offline if they use local assets.
- Confirm no secrets or local paths are packaged.
- Confirm logs do not expose sensitive data.
- Review Elgato's current plugin guidelines.
- Upload through Maker Console.
6. Versioning​
Use a clear versioning policy:
1.0.0.0 initial release
1.0.1.0 bug fix
1.1.0.0 new action or non-breaking behavior
2.0.0.0 breaking behavior or settings migration
Do not change UUIDs when releasing a new version.
7. Release notes template​
## 1.1.0.0
Added:
- New Deploy Status action.
Changed:
- Improved production confirmation copy.
Fixed:
- Prevented stale titles after Stream Deck restart.
Compatibility:
- Requires Stream Deck 7.1 or newer.
8. Quick smoke test script​
npm run build
streamdeck validate com.example.deploy-tools.sdPlugin
streamdeck pack com.example.deploy-tools.sdPlugin
Run this before every release candidate.