Kubetui is a terminal user interface (TUI) tool designed for real-time monitoring of Kubernetes resources, enabling developers and operators to access critical information about their applications and infrastructure with ease.
Key Features:
Real-time monitoring of Kubernetes pods and container logs, with the ability to toggle between JSON and single-line display modes.
Customizable pod columns via CLI flags or config presets, allowing users to tailor the view according to their needs.
Dynamic column selection for runtime customization, enhancing flexibility in resource monitoring.
Support for monitoring ConfigMaps, secrets, network resources, and events, providing comprehensive insight into cluster activity.
Clipboard/text copy functionality and mouse event support for a seamless user experience.
Audience & Benefit:
Ideal for developers and Kubernetes operators seeking an efficient way to monitor and manage their clusters. Kubetui streamlines workflows by offering a user-friendly interface that simplifies resource exploration and monitoring, ultimately improving operational efficiency.
Installable via winget on Windows, Kubetui is a powerful tool designed with a focus on practicality and usability in Kubernetes environments.
README
kubetui
Kubetui is a terminal user interface (TUI) tool designed for monitoring Kubernetes resources.
It provides an easy-to-use interface for developers and operators to access important information about their applications and infrastructure.
Kubetui offers the following features to help you monitor and manage your Kubernetes resources:
Pods List and Container Logs: Browse pods and stream their container logs, with JSON pretty-print toggling (f/p) and a powerful Log Query (regex, label/field selectors, resource targeting, jq/JMESPath).
Node List and Detail: View nodes with status, roles, age, and version, plus a detail pane.
ConfigMap and Secret Watching: Monitor ConfigMaps and Secrets, and decode their (Base64) data.
Network-related Resources: List Services, Ingresses, NetworkPolicies, and Gateway API resources (Gateway / HTTPRoute), and view details for the selected one.
Events Watching: Stay updated with a real-time view of Kubernetes events.
Arbitrary Resource Watching (List / YAML): Select any resource kinds with f and watch them as a list, or inspect a selected resource's raw YAML with y.
Customizable Columns: Pick visible columns and order via a runtime dialog (t), CLI flags / presets (Pod / Node), and label columns. See Column Customization.
Column-aware Filter: Filter table rows by column with include/exclude regex and server-side label selectors, with inline help. See Filter.
Namespace Multiple Selections: Select and view multiple namespaces simultaneously.
Context Selection: Switch the Kubernetes context you operate on (with namespace carry-over / caching).
Adjustable Split Layout: Toggle vertical/horizontal pane split at runtime (Shift+s) or at startup (-s v|h).
Clipboard Support: Copy text with the mouse; the backend is selectable (system / OSC52, SSH- and tmux-friendly). See Clipboard.
Mouse Support: Click to focus and select, click tabs to switch, scroll with the wheel, and drag to select text for copying.
Incremental Search: Search within text views with / and jump between matches with n / N.
(beta) Customizable UI Appearance: Theme border styles, colors, and text attributes via a config file.
Overall, kubetui is a powerful tool designed to provide a safe and efficient way to access and monitor your Kubernetes resources. With its user-friendly interface and comprehensive features, it simplifies the process of managing your applications and infrastructure.
Installation
To install kubetui, you can use the following methods:
Kubetui is available on Chocolatey, the package manager for Windows. Install it by running the following command:
choco install kubetui
openSUSE Tumbleweed
For openSUSE Tumbleweed, you can install kubetui using the zypper package manager. Run the following command to install:
zypper install kubetui
Using cargo install
Kubetui is available on crates.io, the official Rust package registry. Install it by running the following command:
cargo install kubetui
Make sure you have Rust and Cargo installed before running the command.
Downloading the binary
Alternatively, you can download the precompiled binary from the GitHub Release page that matches your operating system. Once downloaded, you can run the binary directly without any additional installation steps.
Choose the method that suits your needs and preferences.
Usage
kubetui
$ kubetui -h
An intuitive Terminal User Interface (TUI) tool for real-time monitoring and exploration of Kubernetes resources.
Usage: kubetui [OPTIONS] [COMMAND]
Commands:
completion Generate completion script
Options:
-h, --help Print help
-V, --version Print version
-A, --all-namespaces[=] Select all namespaces [default: false]
-c, --context Context
-C, --kubeconfig kubeconfig path
--clipboard Clipboard mode (auto, system, or osc52) [env: KUBETUI_CLIPBOARD=] [default: auto]
--config-file Config file path
-l, --logging Logging
-n, --namespaces Namespaces (e.g. -n val1,val2,val3 | -n val1 -n val2 -n val3)
--node-columns Comma-separated columns for the node table: builtin names (e.g. name,status), defined label-column names, or "full" for all builtins
--node-columns-preset Preset name for node columns (e.g. "default", "wide"). If both are specified, `--node-columns` overrides this
--pod-columns Comma-separated list of columns to show in pod table (e.g. name,status,ip). Use "full" to show all available columns
--pod-columns-preset Preset name for pod columns (e.g. "default", "full"). If both are specified, `--pod-columns` overrides this
-s, --split-direction Window split direction [default: v]
Column Customization
The Pod, Node, Config, and Network tables all support column customization.
Pod and Node additionally support presets and a CLI flag for selecting columns at startup; Config and Network use the runtime dialog and label columns.
CLI flags (Pod / Node)
kubetui --pod-columns=name,ready,status,age
kubetui --pod-columns=full # show all builtin columns
kubetui --pod-columns-preset=default
kubetui --node-columns=name,status,roles,age,version
kubetui --node-columns-preset=wide
Notes:
The NAME column is always included even if not specified.
full expands to all builtin columns and cannot be combined with other columns.
--pod-columns overrides --pod-columns-preset; same for --node-columns / --node-columns-preset.
Runtime column dialog (all four tabs)
Press t while a table is focused (Pod / Node / Config / Network) to open the column selection dialog.
Space or Enter: toggle visibility
J / K: reorder columns
Required columns like NAME are always enabled and fixed.
Label columns
You can register labels as table columns under theme..label_columns. Each entry maps a short name to a label key. The name is used as the upper-cased column header, in the column dialog, and in filter expressions across all four tabs; for Pod and Node it can additionally appear in --*-columns flag values and presets. The cell value is taken from metadata.labels[]; resources without the label show an empty cell.
Define reusable presets under theme.pod.column_presets / theme.node.column_presets, and set a startup default with default_preset.
theme:
pod:
default_preset: minimal
column_presets:
default:
- name
- status
- age
- ip
- node
minimal:
- name
- status
- age
node:
default_preset: default
column_presets:
default:
- name
- status
- roles
- age
- version
wide:
- full
topology:
- name
- status
- roles
- zone # label column
- instance # label column
Resolution order at startup: CLI flag (---columns) > preset (---columns-preset) > theme..default_preset > builtin default.
Filter (Column-Aware)
Pod, Node, Config, and Network tables share a column-aware filter. Open the filter input with /, type the expression, and press Enter to apply (or Esc to clear the active filter and close the form).
Press ? (or type help) inside the filter input to open the per-tab filter help dialog with the columns available in the current tab.
Syntax summary
TERM [ TERM ]...
Term
Meaning
``
Bare value — treated as NAME: (regex include).
NAME:
Include rows whose NAME matches.
:
Include rows whose COL matches.
!:
Exclude rows whose COL matches.
label:
Kubernetes labelSelector applied server-side (e.g. label:app=nginx,env=prod). Last label: wins if repeated.
Same column, multiple includes → OR (in-list): STATUS:Running STATUS:Pending → STATUS in (Running, Pending).
Different columns, includes → AND across columns: NAME:web STATUS:Running → NAME~web AND STATUS~Running.
Any matching exclude → row excluded.
Column names ignore case, spaces, -, and _.
Values with whitespace must be quoted: STATUS:"CreateContainerConfigError". Escape ", ', or \ inside quotes with \.
Inactive terms
A term on a column that is currently not shown stays in the filter but is not applied. The title shows (inactive: COL) until the column is shown again (e.g. via the column dialog). Unknown columns produce an error.
Notes per tab
Pod / Config / Network: namespace is not filterable — use the namespace selector (n / N) instead. A namespace:<...> term returns a dedicated guidance message (rather than a generic unknown-column error) in all three tabs.
Node: cluster-scoped, so there is no namespace concept; namespace:<...> is treated as a plain unknown-column error.
Shell Completion
Kubetui supports shell completion for Bash and Zsh. You can enable the completion by adding the following to your shell configuration file:
For Bash (add to ~/.bashrc or ~/.bash_profile):
source <(kubetui completion bash)
For Zsh (add to ~/.zshrc):
source <(kubetui completion zsh)
Clipboard
Kubetui supports three clipboard backends, selectable via --clipboard or the KUBETUI_CLIPBOARD environment variable:
Mode
Behavior
auto
(default) OSC52 when an SSH session is detected (SSH_CONNECTION / SSH_CLIENT / SSH_TTY); otherwise the system clipboard, falling back to OSC52 if unavailable.
system
Always use the system clipboard (X11 / Wayland / macOS / Windows).
osc52
Always emit OSC52 escape sequences — works over SSH and inside tmux without a system clipboard.
You can customize the UI appearance and several feature settings by specifying a configuration file using the --config-file flag:
kubetui --config-file /path/to/your/config.yaml
The configuration file can also be located at $XDG_CONFIG_HOME/kubetui/config.yaml (or ~/.config/kubetui/config.yaml when $XDG_CONFIG_HOME is unset).
The configuration file allows you to modify:
Border Styles: Customize the border styles of different UI components.
Colors: Change the colors of text, backgrounds, and borders.
Text Attributes: Modify text attributes such as bold, italic, and underline.
Per-tab settings: theme.pod / theme.node / theme.config / theme.network accept label_columns (register labels as columns and filter terms) and column_presets / default_preset (Pod and Node only).
Status highlights: theme.pod.highlights and theme.event.highlights accept regex → style rules.
A sample configuration file is available at example/config.yaml to help you get started.
Log Query
The Log Query feature empowers you to retrieve logs from multiple Pods and their containers. Using regular expressions, selectors, and specified resources, you can precisely define the log retrieval targets. This functionality also allows you to filter logs using regular expressions, providing a powerful and flexible log querying experience.
Usage Example
pod:app container:nginx log:401
pod:api log:error jq:.message
pod:api log:error jmespath:message
When entering ? or help in the log query form, the help dialog will be displayed.
Supported Queries
Query
Alias
Description
pod:\
pods, po, p
Include Pods that match the regular expression in log retrieval target.
!pod:\
!pods, !po, !p
Exclude Pods that match the regular expression from log retrieval target. Can be defined multiple times.
container:\
containers, co, c
Include containers that match the regular expression in log retrieval target.
!container:\
!containers, !co, !c
Exclude containers that match the regular expression from log retrieval target. Can be defined multiple times.
log:\
logs, lo, l
Retrieve logs that match the regular expression. Can be defined multiple times.
!log:\
!logs, !lo, !l
Exclude logs that match the regular expression. Can be defined multiple times.
label:\
labels
Include Pods with labels matching the selector in log retrieval target. Cannot be specified with resource.
field:\
fields
Include Pods with fields matching the selector in log retrieval target.
jq:\
Apply jq filter to JSON logs. Extract fields or restructure output (e.g., jq:.message, jq:{ts:.time}).
jmespath:\
jmes, jm
Apply JMESPath filter to JSON logs. Simpler syntax for common queries (e.g., jmespath:message, jm:data.id).
limit:\
lim
Override the log buffer size for this query (e.g., limit:5000). Takes precedence over logging.max_lines.
/\
Include Pods belonging to the specified resource in log retrieval target. Cannot be specified with label.
Supported resources:
Resource
Alias
pod
po, pods
replicaset
rs, replicasets
deployment
deploy, deployments
statefulset
sts, statefulsets
daemonset
ds, daemonsets
job
jobs
service
svc, services
Query String Escaping
When including spaces in queries such as or, enclose the string with " or '. For example:
pod:"a b"
label:"environment in (production, qa)"
If you use ", ', or \ within the quoted string, escape them with \. For example:
(while filter form is focused) Open the per-tab filter help dialog
t
Open the column selection dialog (Pod / Node / Config / Network)
Column Dialog
Key
Description
Space, Enter
Toggle column visibility
J, K
Reorder columns
Esc
Close the dialog
Dialog
Key
Description
Down, Up, PgDn, PgUp
Change the selected item / Scroll the view
Tab, Shift+Tab
Change the focus of the view within the active tab
Enter
Select an item and trigger an event
ESC
Close the window or terminate the app (when the dialog is not open)
Context Dialog
Key
Description
Enter
Switch context and use previously cached namespaces
Ctrl+Space
Switch context and preserve current namespaces (if available)
Input Form
Key
Description
Home
Move the cursor to the beginning
End
Move the cursor to the end
Ctrl+w
Delete text from the cursor to the beginning
Ctrl+k
Delete text from the cursor to the end
Left, Right
Move the cursor to the previous / next character
Container Logs View
Key
Description
f, p
Toggle between pretty print and single-line display for JSON logs.
Enter
Insert a blank line.
Inline notices
Two kinds of inline [kubetui] lines may appear within the log stream:
Yellow [kubetui] : : Per-namespace non-fatal notice during setup (e.g. the resource specified by deployment/ does not exist in some of the selected namespaces). Other namespaces continue to stream logs.
Red [kubetui] : A stream-side error encountered while logs are flowing. The stream continues; the error state of the widget is not toggled.
Contributing
Bug reports and pull requests are welcome.
License
This software is available as open source under the terms of the MIT License.