Extend the dashboard with custom data sources. Plugins are standalone executables that communicate via JSON-over-stdio — write one in any language, in under 50 lines.
schema_version: 1) but subject to breaking changes until further notice. Pin your plugin to a specific Dofek version if stability matters. Once the contract stabilizes, the API will follow semver.
Dofek spawns your plugin as a child process. Every refresh cycle, it writes a poll request to stdin and reads your JSON response from stdout. That's the entire contract.
Dofek owns the tick rate. No backpressure, no buffering, no message floods. Your plugin just responds when asked.
No ports, no sockets, no service discovery. stdin/stdout pipes are inherited at spawn. Use stderr for your debug logs.
If your plugin crashes, Dofek restarts it with exponential backoff: 1s → 2s → 4s → 8s → 16s → 30s cap.
Newline-delimited JSON. One object per line, terminated by \n. Your plugin receives poll requests on stdin and writes responses to stdout.
| FIELD | TYPE | DESCRIPTION |
|---|---|---|
| type | "poll" | Always "poll" |
| timestamp_ms | u64 | Unix timestamp in milliseconds |
| processes | array | Current system processes — ignore if not needed |
All three arrays are optional — include only what your plugin provides. On the first response, include a manifest field to identify your plugin.
Each response can include panels (dock UI), process annotations (watchlist labels), and metrics (ticker pills). Mix and match as needed.
panels — Plugin Dock UIPanel content is rendered in the plugin dock at the bottom of the watchlist. The first panel's values appear inline next to the plugin name.
process_annotations — Enrich Process Rows| FIELD | REQUIRED | VALUES |
|---|---|---|
| pid | yes | Must match a running process |
| label | no | Any string — shown on the process row |
| category | no | "ai" "dev" "watch" |
| ai_state | no | "idle" "loading" "inferring" |
metrics — Ticker Bar Pills| FIELD | TYPE | DESCRIPTION |
|---|---|---|
| id | string | Unique, namespaced (e.g., "ollama.running") |
| label | string | Short label for the ticker pill |
| value | f64 | Numeric value |
| unit | string | Suffix (empty string for no unit) |
Dofek tracks each plugin's health and displays a colored indicator in the dock.
Edit a plugin response and see how it renders in the Dofek dock. Validates your JSON in real-time.
Generate a starter template for your plugin. Fill in the details, pick a language, and copy the code.
← Click GENERATE to create a plugin template
timeout_ms (default 2s) to respond to each pollplugin_name.metric_name to avoid collisions