← Back to home

Kwirth Plugins

Plugins extend Kwirth with new UI channels and backend capabilities — all hot-reloadable without restarting the pod. Build once, install anywhere.

What is a plugin?

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 pod restart required.

Browser → Kwirth front → loads front.js (IIFE, registers on window.__kwirth_plugins__)
Kwirth back → loads back.js (CJS, registers IPlugin / IChannel)
Plugin → receives ClusterInfo, WebSocket session, senders, providers

Available plugins

🔧

Ops

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.

Available
🛡️

Trivy Security Scanner

Container image vulnerability scanning via Trivy operator integration. CVE details, SBOM, audit checks, and exposed secrets in a unified view.

Available
🤖

Pinocchio AI

Autonomous AI agent for cluster analysis. Watches Kubernetes events and business data, runs configurable LLM triggers, and streams findings with severity levels in real time.

Available
🚫

Censor

LLM-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.

Available
🌍

Topology

Interactive 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.

Available
📰

News

RSS 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 / Reference
📡

Echo

Reference 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 / Reference
📂

Fileman

Visual filesystem explorer for all Kubernetes containers. Navigate, copy, move, rename, delete, download, and upload files across any container — including cross-container copy/move operations.

Available
📝

Audit Logger

Structured audit trail for all Kwirth user actions — API key usage, config changes, plugin installs — exportable as JSON or forwarded via senders.

Planned
⚙️

Your Plugin

Any 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 own

Plugin interface

Every backend plugin must implement the IPlugin interface exported from @kwirthmagnify/kwirth-common-back:

id: stringUnique identifier (e.g. "trivy", "pinocchio")
getChannel(clusterInfo)Returns an IChannel instance that handles a specific cluster connection
startPlugin(context)Called once at startup — receive senders, providers, and cluster context
stopPlugin()Called on graceful shutdown
getConfigSchema?()Optional — returns field definitions so the UI can render a config form

Build your own plugin

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.

senders/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, description

The 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.

Ready to build a plugin?

The full plugin API reference, lifecycle documentation, and development guide are in the Kwirth docs.

Developer docs → Echo plugin source