doc/help/Extensions.md
Extensions are add-ons that enhance Serial Studio. Supported types include:
.ssproj project files for common sensor configurations.Extensions are downloaded from online repositories and installed locally. You can browse, install, update, and uninstall them from the Extension Manager dialog.
Click the Extensions button in the toolbar. The Extension Manager has three views:
When a newer version is available, the card shows an Update badge. Click the card and press Install to update.
Plugins are external processes that connect to Serial Studio to receive live data, compute statistics, display custom visualizations, and more. Plugins can connect via:
grpcio Python package (auto-installed on first run).Plugins can provide platform-specific entry points for different operating systems and CPU architectures. When a plugin uses the platforms field in its metadata, Serial Studio automatically selects the correct binary or script for your system.
Platform keys use the format os/arch or os/* (for universal builds):
darwin/* (always universal)linux/x86_64, linux/arm64windows/*, windows/x86_64If a plugin is not available for your platform, the Install button is disabled and an Unavailable badge is shown.
Developing your own plugin? See the Plugin Development guide for the full
info.jsonreference, code examples, state persistence, and distribution instructions.
A repository is a URL pointing to a manifest.json file that lists available extensions. Serial Studio ships with a default community repository.
Custom repository management is available in Serial Studio Pro. This enables:
To manage repositories:
my-repo/
manifest.json
theme/my-theme/
info.json
my-theme.json
code-editor/my-theme.xml
plugin/my-plugin/
info.json
plugin.py
run.sh
run.cmd
frame-parser/my-parser/
info.json
my-parser.js
The manifest lists paths to each extension's info.json:
{
"version": 1,
"repository": "My Extensions",
"extensions": [
"theme/my-theme/info.json",
"plugin/my-plugin/info.json"
]
}
Each extension has an info.json with metadata:
{
"id": "my-theme",
"type": "theme",
"title": "My Custom Theme",
"description": "A dark theme with company branding.",
"author": "Your Name",
"version": "1.0.0",
"license": "MIT",
"category": "Dark",
"screenshot": "screenshot.png",
"files": [
"info.json",
"my-theme.json",
"code-editor/my-theme.xml"
]
}
Plugins add entry, runtime, and optionally platforms and grpc fields. See the Plugin Development guide for the complete reference and examples.
| Field | Required | Description |
|---|---|---|
id | Yes | Unique identifier (lowercase, hyphens). |
type | Yes | theme, frame-parser, project-template, or plugin. |
title | Yes | Display name in the Extension Manager. |
description | Yes | Short description shown on the card. |
author | Yes | Author name or organization. |
version | Yes | Semantic version string (e.g., "1.0.0"). |
license | No | License identifier (e.g., "MIT"). |
category | No | Category for filtering. |
screenshot | No | Relative path to a preview image. |
files | Yes | Array of relative file paths to download/install. |
entry | Plugins | Script or binary entry point. |
runtime | Plugins | Interpreter command (e.g., "python3"). Empty for native binaries. |
terminal | Plugins | true to launch in a system terminal window. |
grpc | Plugins | true if the plugin uses gRPC streaming (port 8888) instead of TCP/JSON. |
platforms | Plugins | Per-platform overrides for entry, runtime, and files. |
GitHub: Create a repository and share the raw manifest URL:
https://raw.githubusercontent.com/your-org/extensions/main/manifest.json
Local folder: Use Browse in the Repository Settings to select a folder containing manifest.json.
Any web server: Host files on HTTP(S). Relative paths in files resolve against the info.json URL.
Plugin state (open windows, settings, configurations) is saved in the project file alongside widget layout data. This means different projects can have different plugin setups.
State is saved automatically when the device disconnects, the plugin is stopped, or Serial Studio exits. State is restored when the plugin starts or a new device connects. Plugins that were running when Serial Studio closed are automatically relaunched on the next startup.
For details on using the state persistence API from code, see the Plugin Development guide.
The Extension Manager is accessible via the API on TCP port 7777 or gRPC port 8888:
| Command | Description |
|---|---|
extensions.list | List all available extensions. |
extensions.getInfo | Get details for a specific extension (extensionId). |
extensions.install | Install an extension by index (addonIndex). |
extensions.uninstall | Uninstall an extension by index (addonIndex). |
extensions.refresh | Refresh catalogs from all repositories. |
extensions.saveState | Save plugin state to the project (pluginId, state). |
extensions.loadState | Load plugin state from the project (pluginId). |
extensions.listRepositories | List repository URLs (Pro only). |
extensions.addRepository | Add a repository URL (Pro only). |
extensions.removeRepository | Remove a repository by index (Pro only). |
Extensions are installed to your workspace under Extensions/:
~/Documents/Serial Studio/Extensions/
installed.json
theme/my-theme/
info.json
my-theme.json
code-editor/my-theme.xml
plugin/my-plugin/
info.json
plugin.py
run.sh