All keys, grouped by the context they act in. The top bar's key legend
adapts to the current view: only the keys that act on the resource kind on
screen are shown (helm's i/u/r, node ops' c/u/D, workload
restart/scale, …), and off-view keys are inert. The bar starts collapsed —
the corvid mark, the view name and the few most relevant keys — and ~
expands it to the full grouped legend (Nav · Sort · Actions · Logs · Panes ·
Agent); the choice persists to ui.topbar in the config, and narrow
terminals collapse automatically. The in-app help overlay (?) always
documents every view and shows the effective keys, including any remaps.
| Key | Context | Action |
|---|---|---|
: |
global | Open command bar — accepts pods, deploy all, helm, ns <name>, ctx <name>, ai, model, q |
? |
global | Help overlay — keybindings grouped by context plus : commands (Esc/q/? closes) |
~ |
global | Collapse/expand the top bar's grouped key legend (persists to ui.topbar) |
/ |
table | Open filter — name, ~fuzzy, /regex/, !exclude, -l k=v, -s hide Completed (Enter keeps, Esc clears) |
/ |
log pane | Open inline log search |
Enter |
table | Drill down: pods → containers; deploy → replicasets (history) → pods; helm release / Subscription / CSV → hierarchy tree |
Esc |
table | Pop one drill-down level |
Ctrl-W v / w / q |
table | Split workspace into two panes / focus the other pane / close the focused pane |
Shift-N/A/C/M |
table | Sort by name / age / CPU / MEM (repeat flips ▲/▼; sorts on data, not rendered strings) |
o |
table | Sort picker: choose any sortable column of the current view (builtins + custom columns) from a list; re-picking the active column flips ▲/▼. Clicking a column header sorts by it too |
0 |
global | Toggle all-namespaces view |
1-9 |
global | Jump to a favorite namespace (favorite_namespaces config, in order) |
d |
table | Describe selected resource (manifest + events) |
s |
pods table | Shell into selected pod (kubectl exec; offers kubectl debug fallback for distroless images) |
s |
nodes table | Node shell (kubectl debug node/; approval dialog — privileged pod with the host filesystem at /host, deleted on exit) |
Shift-F |
pods / services table | Port-forward the selected target (local port prompt; prefilled from declared ports) |
l |
pods table | Open / close log pane for selected pod |
L |
pods table | Merge logs of all currently filtered pods (up to 8) |
f |
log pane | Toggle JSON-formatted / raw display |
w |
log pane | Toggle line wrap |
t |
log pane | Toggle kubelet-timestamp prefix |
Ctrl-S |
log pane | Save the current buffer to $XDG_DATA_HOME/korvid/logs/ (default ~/.local/share/korvid/logs/) |
p |
log pane | Reload pane with previous (terminated) container logs |
n / N |
log pane | Jump to next / previous search hit |
Ctrl-D |
table | Delete selected resource (confirm dialog; cluster-scoped kinds require typing the name). On a Helm release: uninstall; on a Subscription (or a CSV whose Subscription is known): operator uninstall — a CSV with no known Subscription is a plain delete |
r |
table | Rolling restart of selected deployment / statefulset / daemonset (confirm dialog) |
S |
table | Scale selected deployment / replicaset / statefulset (replica prompt + confirm dialog) |
R |
pods table | In-place resize of pod CPU/memory requests/limits (Kubernetes 1.35+; prompt + confirm dialog) |
I |
operators tables | Install the selected catalog operator (wizard + confirm dialog) or approve a pending InstallPlan |
c / u |
nodes table | Cordon / uncordon the selected node (confirm dialog with server dry-run preview) |
Shift-D |
nodes table | Drain the selected node — PDB-aware impact preview (evictions, PDB-blocked pods, skipped DaemonSet/mirror pods, emptyDir warnings), typed-name confirm, live progress; press again to cancel mid-drain (node stays cordoned) |
e |
table | Edit selected resource manifest in $VISUAL/$EDITOR (kubectl edit style; confirm dialog before the PUT) |
i |
pods table | Open hint details overlay for a troubled pod (full container trouble + recent Warning events) |
i / u |
helm table | Install a chart / upgrade the selected release (wizard + dry-run preview + confirm dialog; needs helm on PATH) |
h |
helm table | Revision history of the selected release (the flat drill-down; Enter opens the hierarchy tree) |
r |
helm revisions table | Roll back the release to the selected revision (confirm dialog; needs helm on PATH) |
Ctrl-R |
chart picker | Manage chart repositories: list, add, refresh indexes |
Ctrl-T |
pods table | Transfer a file to/from the selected container (exec tar stream; upload needs approval) |
Ctrl-A |
global | Toggle AI agent panel |
q |
global | Quit |
Esc |
log pane | Close pane (or dismiss search / filter bar) |
App-level actions can be remapped via the keybindings: section of
~/.config/korvid/config.yaml, mapping an action name from the list
below to a new key (Textual key syntax — x, f1, ctrl+q, shift+g).
Keys handled outside bindings (Enter drill-down, Esc close/pop, and the
dialogs' own keys) are not remappable:
keybindings:
delete_resource: ctrl+x # free Ctrl-D for the terminal
sort_by_age: gAction names: quit, help, open_command, open_filter,
toggle_all_namespaces, describe, shell, logs, logs_multi,
log_format, log_wrap, log_timestamps, log_save, log_previous,
log_search_next, log_search_prev, sort_by_age, sort_by_cpu,
sort_by_mem, sort_picker, toggle_topbar, toggle_agent, delete_resource, rollout_restart,
resize_pod, scale_resource, edit_resource, hint_details, operator_install,
cordon_node, uncordon_node, drain_node, port_forward, transfer,
helm_install, helm_upgrade, helm_rollback, helm_history.
Unknown actions, duplicate keys, and keys that shadow another action's
default produce a startup warning and are skipped — never a crash. The
approval dialogs' confirm keys are not remappable by design: writes are
only ever confirmed by the fixed keystrokes. The help overlay (?) always
shows the effective keys.