For plugin developers
Extend Shoal with your own pages, dashboard widgets and resource actions. A plugin is a small JavaScript bundle with a manifest, and the two bundled examples are a good place to start.
How it works
A Node module plus a sandboxed UI.
The Node side talks to your clusters through a permission-gated context. The UI side runs in a sandboxed frame and only reaches what the manifest declares.
󰗡
Register pages, dashboard widgets, sidebar entries, modals and resource actions
󰗡
Declare settings in the manifest and Shoal draws the settings form for you
󰗡
Store data per plugin and show notifications in the app
󰗡
Installed plugins run their Node code in a separate process
// plugin.json
{
"id": "my-first-plugin",
"name": "My First Plugin",
"version": "1.0.0",
"description": "Shows quick stats for the active cluster",
"author": "You",
"main": "index.js",
"renderer": "renderer.js",
"permissions": ["kubernetes", "ui", "storage"],
"license": { "type": "free", "spdx": "MIT" }
}
Permissions
Three capabilities, all opt-in.
Plugins only reach what the manifest declares. The manifest also accepts filesystem, network and notifications, which are reserved for 1.0 and grant nothing yet.
kubernetes
cluster reads and writes through kubectl, Helm and manifests
ui
notifications, modals and external links
storage
data the plugin keeps between runs
During the beta
Build from source today.
Run Shoal from source with npm run dev and drop your plugin folder into the plugins directory or use Load Unpacked Plugin. Development builds load unsigned plugins. Installed releases only load plugins signed with the Shoal key, so third-party plugins cannot be shared with users yet.
Planned for 1.0
Publishing and a plugin marketplace.
󰅐
A marketplace inside the app to find and install plugins
󰅐
Signing for third-party plugins so users can install them safely