Back to Serial Studio

Extensions

doc/help/Extensions.md

3.2.78.9 KB
Original Source

Extensions

What are Extensions?

Extensions are add-ons that enhance Serial Studio. Supported types include:

  • Themes — Customize the entire look and feel of the application, including code editor syntax colors.
  • Frame Parsers — JavaScript functions that decode custom binary or text protocols into structured data.
  • Project Templates — Ready-to-use .ssproj project files for common sensor configurations.
  • Plugins — External programs (Python, native binaries, etc.) that connect to Serial Studio's API server to provide custom real-time data processing, visualization, and analysis.

Extensions are downloaded from online repositories and installed locally. You can browse, install, update, and uninstall them from the Extension Manager dialog.

Opening the Extension Manager

Click the Extensions button in the toolbar. The Extension Manager has three views:

  • Grid View — Browse available extensions with search and type filtering.
  • Detail View — View README, metadata, screenshot, and install/uninstall controls.
  • Repository Settings — Manage repository URLs (Pro only).

Installing an Extension

  1. Open the Extension Manager.
  2. Click Refresh to fetch the latest catalog.
  3. Browse or search for an extension. Use the type dropdown to filter by Themes, Plugins, etc.
  4. Click an extension card to open the detail view.
  5. Click Install. A progress bar shows download status.
  6. Once installed, the extension is immediately available:
    • Themes appear in the theme dropdown in Preferences.
    • Plugins can be launched from the detail view with the Run button.

Uninstalling an Extension

  1. Open the Extension Manager and find the installed extension (it shows an Installed badge).
  2. Click the card, then click Uninstall.
  3. For plugins: stop the plugin first if it's running.
  4. If you were using an uninstalled theme, Serial Studio falls back to Default.

Updating an Extension

When a newer version is available, the card shows an Update badge. Click the card and press Install to update.

Plugins

Plugins are external processes that connect to Serial Studio to receive live data, compute statistics, display custom visualizations, and more. Plugins can connect via:

  • gRPC (port 8888) — High-performance binary streaming. Recommended for real-time frame data. See the gRPC Server documentation.
  • TCP/JSON (port 7777) — JSON-based protocol. See the API Reference for details.

Running a Plugin

  1. Install the plugin from the Extension Manager.
  2. Click the plugin card to open the detail view.
  3. Click Run. The plugin starts and its output appears in the log panel.
  4. Click Stop to terminate it.

Plugin Requirements

  • The API server must be enabled (Serial Studio will prompt you if it's not).
  • Python plugins require Python 3.6+ installed on your system.
  • Plugins that use gRPC require the grpcio Python package (auto-installed on first run).
  • All running plugins are automatically stopped when Serial Studio exits.

Platform Support

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):

  • macOS: darwin/* (always universal)
  • Linux: linux/x86_64, linux/arm64
  • Windows: windows/*, windows/x86_64

If 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.json reference, code examples, state persistence, and distribution instructions.

Repositories

A repository is a URL pointing to a manifest.json file that lists available extensions. Serial Studio ships with a default community repository.

Managing Repositories (Pro)

Custom repository management is available in Serial Studio Pro. This enables:

  • Company-internal extensions — Host private repositories on your intranet or private GitHub.
  • Community collections — Third-party extension collections hosted anywhere.
  • Local development — Point to a local folder while developing extensions.

To manage repositories:

  1. Open the Extension Manager.
  2. Click the Repos button in the toolbar.
  3. Add URLs, browse for local folders, or remove existing entries.
  4. Click Reset to restore the default community repository.

Creating Extensions

Repository Structure

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

manifest.json

The manifest lists paths to each extension's info.json:

json
{
  "version": 1,
  "repository": "My Extensions",
  "extensions": [
    "theme/my-theme/info.json",
    "plugin/my-plugin/info.json"
  ]
}

info.json Format

Each extension has an info.json with metadata:

json
{
  "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"
  ]
}

Plugin info.json

Plugins add entry, runtime, and optionally platforms and grpc fields. See the Plugin Development guide for the complete reference and examples.

Field Reference

FieldRequiredDescription
idYesUnique identifier (lowercase, hyphens).
typeYestheme, frame-parser, project-template, or plugin.
titleYesDisplay name in the Extension Manager.
descriptionYesShort description shown on the card.
authorYesAuthor name or organization.
versionYesSemantic version string (e.g., "1.0.0").
licenseNoLicense identifier (e.g., "MIT").
categoryNoCategory for filtering.
screenshotNoRelative path to a preview image.
filesYesArray of relative file paths to download/install.
entryPluginsScript or binary entry point.
runtimePluginsInterpreter command (e.g., "python3"). Empty for native binaries.
terminalPluginstrue to launch in a system terminal window.
grpcPluginstrue if the plugin uses gRPC streaming (port 8888) instead of TCP/JSON.
platformsPluginsPer-platform overrides for entry, runtime, and files.

Hosting

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 Persistence

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.

API Access

The Extension Manager is accessible via the API on TCP port 7777 or gRPC port 8888:

CommandDescription
extensions.listList all available extensions.
extensions.getInfoGet details for a specific extension (extensionId).
extensions.installInstall an extension by index (addonIndex).
extensions.uninstallUninstall an extension by index (addonIndex).
extensions.refreshRefresh catalogs from all repositories.
extensions.saveStateSave plugin state to the project (pluginId, state).
extensions.loadStateLoad plugin state from the project (pluginId).
extensions.listRepositoriesList repository URLs (Pro only).
extensions.addRepositoryAdd a repository URL (Pro only).
extensions.removeRepositoryRemove a repository by index (Pro only).

Installed Extension Location

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