Plugins extend Kwirth with new UI channels and backend capabilities — all hot-reloadable without restarting the container. Build once, install anywhere.
A Kwirth plugin is a self-contained bundle that adds a new channel tab to the Kwirth front-end and, optionally, a backend component that runs alongside Kwirth's core. Plugins follow the same lifecycle as built-in channels: the user selects a cluster, opens a tab, and the plugin takes over rendering and data fetching.
Plugins are packaged as a .tgz file containing a CJS backend bundle (back.js), an IIFE frontend bundle (front.js), and a package.json manifest. Once installed, Kwirth hot-reloads them — no container restart required.
Not every plugin observes cluster resources. An autonomous plugin needs nothing from the cluster — no namespace, pod or container — so it opens directly, without asking the user to pick a scope. It is a regular plugin in every other respect.
This is what lets you embed a standalone JavaScript application — a game, a dashboard, a small tool, an external widget — as a Kwirth channel, and have it inherit the framework's services for free: authentication, RBAC, persistence (ConfigMaps / Secrets / PVC / files), the real-time WebSocket, providers, theming and notifications. Build the app once; ship it as a channel and let Kwirth handle sign-in, permissions and state.
A plugin declares itself autonomous by setting cluster: false and resourced: false in its back-channel data — its only view becomes none, and Kwirth starts it once with no resource selection.
Some plugins run a back end of their own, always started, that produces genuinely valuable information — proactive alerts raised after investigating an incident, log messages already filtered down to what matters, an enriched picture of external traffic. Until now that information could only reach one place: that plugin's own front end.
A pluvider is a plugin that also publishes what it produces in-process, so any other plugin in the same Kwirth can subscribe to it — exactly the way channels already subscribe to the events or metrics providers. It is not a provider packaged next to a plugin: it is the same class, the same instance and the same information, reaching one more door.
Producers are addressed with a plugin: prefix (plugin:agora) and consumed with no new API at all — a channel subscribes to a pluvider exactly as it subscribes to a provider. The dependency is soft: if the producing plugin is not installed, the consumer still starts and still works.
Day-to-day cluster operations from the browser: interactive shell sessions (XTERM), pod and namespace restarts, one-shot command execution, and object inspection — no kubectl needed.
Container image vulnerability scanning via Trivy operator integration. CVE details, SBOM, audit checks, and exposed secrets in a unified view.
AvailableAutonomous AI agent for cluster analysis. Watches Kubernetes events and business data, runs configurable LLM triggers, and streams findings with severity levels in real time.
AvailableLLM-based log noise filter. Batches log lines, sends them to an LLM to learn regex patterns, then applies those patterns in-process — so only meaningful lines reach the screen.
AvailableInteractive 3D graph of your live Kubernetes cluster. Nodes represent workloads, services, ingresses, and PVCs; edges show ownership and routing. Updates in real time via Kubernetes events.
AvailableRSS feed reader for Kubernetes and AI news. Polls external feeds on a timer, deduplicates items, and streams new articles to the tab. Also serves as a reference for plugins that pull from external HTTP sources.
Dev / ReferenceReference plugin and development scaffold. A minimal working plugin with both frontend and backend components — use it as a starting point for your own plugin.
Dev / ReferenceVisual filesystem explorer for all Kubernetes containers. Navigate, copy, move, rename, delete, download, and upload files across any container — including cross-container copy/move operations.
AvailableReal-time log streaming from any container, pod or whole namespace, merged into one colour-coded live view with filtering, regex search and per-source names.
AvailableLive CPU / memory / network / I/O charts for any set of objects, straight from cAdvisor/kubelet — no Prometheus. Multiple chart types, aggregate or merge.
Built-inRule-based alerting on log patterns and metric thresholds. Detection runs server-side; alerts are colour-coded by severity and can be routed to a sender.
AvailableFull Kubernetes explorer & manager (Lens/K9s-style) — browse, edit and operate every object, with cross-artifact search. Also ships as a standalone desktop app.
Built-inCross-cluster direct messaging between connected users — WhatsApp-style delivery ticks and an offline mailbox that delivers on reconnect.
AvailableDiagnostic channel that subscribes to a running provider and streams its raw events into a tab — inspect exactly what a provider emits while building or troubleshooting.
Dev / ReferenceThe outbound twin of Provider Debug: pick a sender and one of its configurations, write a message by hand and read what the sender actually answered — a real send, because a dry run proves nothing.
Dev / ReferenceStructured audit trail for all Kwirth user actions — API key usage, config changes, plugin installs — exportable as JSON or forwarded via senders.
PlannedAny new observability mode, management tool, or integration you can imagine. The plugin API gives you full access to cluster state, WebSocket sessions, and the sender subsystem.
Build your ownEvery backend plugin must implement the IPlugin interface exported from @kwirthmagnify/kwirth-common-back:
"trivy", "pinocchio")Plugins follow a simple project structure. The backend compiles to CJS (dist/back.js), the frontend to an IIFE (dist/front.js) that registers on window.__kwirth_plugins__. Both are bundled with esbuild.
plugins/my-plugin/
src/
back/index.ts ← implements IPlugin
front/index.tsx ← registers on window.__kwirth_plugins__['my-plugin']
build.mjs ← esbuild script
package.json ← includes id, displayName, version, descriptionThe frontend bundle receives backendUrl and accessString as props so it can make authenticated API calls without importing from Kwirth core:
// src/front/index.tsx
import MyPluginPanel from './MyPluginPanel'
window.__kwirth_plugins__ = window.__kwirth_plugins__ ?? {}
window.__kwirth_plugins__['my-plugin'] = MyPluginPanel
// Props your component receives:
// { backendUrl: string, accessString: string, clusterName: string }See the echo plugin in plugins/echo/ for a complete working example, and the full API reference in the developer docs.
The full plugin API reference, lifecycle documentation, and development guide are in the Kwirth docs.
Developer docs → Echo plugin source