Skip to content

zRPC Plugin Reference

VariableRequiredDescription
EDGEPLANE_ZRPC_PLUGIN_PATHYes (to enable)Absolute path to edgeplane_zrpc.wasm. If unset, edgeplaned uses the paste path — no behavior change.
EDGEPLANE_ZRPC_SESSIONSYes (to enable)Comma-separated list of Zellij session names to watch.

Both must be set for the plugin to activate.

The plugin requires these Zellij permissions, pre-seeded in permissions.kdl before the Zellij server starts:

PermissionWhy
ReadApplicationStateRead pane list and pane state
ReadCliPipesReceive commands sent via zellij pipe
WriteToStdinInject text into pane PTY stdin
ReadPaneContentsRead scrollback buffer
ChangeApplicationStateSend focus events (optional)

Find your Zellij cache directory:

Terminal window
zellij setup --check | grep 'CACHE DIR'

The permissions.kdl file format (raw absolute path as the node name — no file: prefix):

"/absolute/path/to/edgeplane_zrpc.wasm" {
ReadApplicationState
ReadCliPipes
WriteToStdin
ReadPaneContents
}

The plugin communicates over the edgeplane-zrpc named Zellij pipe. All payloads are JSON.

kindFieldsDescription
pingHealth check
injectpane_id: number, text: stringInject text + newline into pane PTY stdin
scrollbackpane_id: number, lines: numberRequest scrollback contents
list_panesRequest current pane manifest
kindFieldsDescription
pongResponse to ping
scrollback_responsepane_id: number, content: stringScrollback content
pane_listpanes: [{id, title, is_focused}]Pane manifest
pane_eventevent: "exit"|"focus_gained"|"resize", pane_id: numberLifecycle event
Terminal window
# Sent by edgeplaned internally — shown here for debugging
zellij pipe --name edgeplane-zrpc -- '{"kind":"inject","pane_id":1,"text":"run tests"}'

The plugin is a Rust bin crate targeting wasm32-wasip1. This is required — a cdylib on wasm32-wasip1 with Rust 1.82+ exports _initialize (WASI reactor) instead of _start (WASI command). Zellij 0.44.x requires _start and silently fails to instantiate reactor plugins; all subsequent zellij pipe calls hang indefinitely.

Build:

Terminal window
cargo build --release --target wasm32-wasip1 -p edgeplane-zrpc

Verify _start is exported:

Terminal window
wasm-tools print target/wasm32-wasip1/release/edgeplane_zrpc.wasm | grep '(export "_start"'

Filter edgeplaned logs for zRPC activity:

Terminal window
journalctl --user -u edgeplaned -f | grep zrpc

Zellij log for plugin instantiation failures:

Terminal window
tail -f "$(zellij setup --check | grep 'LOG DIR' | awk '{print $3}')/zellij.log" | grep edgeplane