TUI Dashboard¶
The Terminal User Interface (TUI) provides a k9s-like experience for managing Kubernetes clusters directly from your terminal.
Path note
This page uses ~/.config/k13d/... examples in code blocks. That is now also the default config directory on macOS.
Overview¶
┌─────────────────────────────────────────────────────────────────┐
│ k13d │ Context: minikube │ Namespace: default │ ? for help │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────┐ ┌─────────────────────────┐ │
│ │ Pods (8) │ │ AI Assistant │ │
│ │ │ │ │ │
│ │ NAME READY STATUS │ │ Ask me anything about │ │
│ │ nginx-abc123 1/1 Running │ │ your cluster... │ │
│ │ api-def456 2/2 Running │ │ │ │
│ │ db-ghi789 1/1 Running │ │ > Why is nginx failing? │ │
│ │ │ │ │ │
│ └─────────────────────────────────┘ └─────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ :pods Filter: /nginx │
└─────────────────────────────────────────────────────────────────┘
Getting Started¶
Launch TUI Mode¶
k13d uses the standard Kubernetes client loading rules for kubeconfig and current context. Use KUBECONFIG or your current kubeconfig context instead of --kubeconfig / --context flags.
Navigation¶
Basic Navigation¶
| Key | Action |
|---|---|
| J / Down | Move down |
| K / Up | Move up |
| Tab | Move focus to the AI prompt |
| Shift+Tab | Move focus to AI chat history |
| Esc | Close modal / Return to main view |
| Ctrl+E | Toggle AI panel |
| Q | Quit (with confirmation) |
Resource Navigation¶
| Key | Action |
|---|---|
| : | Command mode (e.g., :pods, :svc) |
| / | Filter current table |
| Enter / Right | Open related resource |
| Left / Esc | Go back |
| G | Go to first item |
| Shift+G | Go to last item |
| Ctrl+F | Page down |
| Ctrl+B | Page up |
Namespace quick-select keeps 0 pinned to all namespaces and reorders ++1-9++ so your most recently used namespaces move to the front, similar to k9s.
Panel Focus¶
| Key | Action |
|---|---|
| Tab | Move between the table and AI prompt |
| Shift+Tab | Jump into AI chat history |
| Esc | Return focus to the resource table |
AI Panel Width¶
| Key | Action |
|---|---|
| Alt+H | Make the AI panel narrower |
| Alt+L | Make the AI panel wider |
| Alt+F | Expand the AI panel to full size, then restore the split layout |
| Alt+0 | Reset the AI panel to its default width |
Resource Commands¶
Viewing Resources¶
| Command | Description |
|---|---|
:pods | View pods |
:svc or :services | View services |
:deploy or :deployments | View deployments |
:rs or :replicasets | View replica sets |
:sts or :statefulsets | View stateful sets |
:ds or :daemonsets | View daemon sets |
:jobs | View jobs |
:cronjobs | View cron jobs |
:cm or :configmaps | View config maps |
:secrets | View secrets |
:ingress | View ingresses |
:pv | View persistent volumes |
:pvc | View persistent volume claims |
:nodes | View nodes |
:ns or :namespaces | View namespaces |
:events | View events |
:helm | View Helm releases |
Namespace Commands¶
| Command | Description |
|---|---|
:ns default | Switch to default namespace |
:ns kube-system | Switch to kube-system |
:ns all | View all namespaces |
Management Commands¶
| Command | Description |
|---|---|
:alias | View all configured resource aliases |
:model | Open AI model profile selector |
:model <name> | Switch directly to a named model profile |
:plugins | View available plugins with shortcuts |
:health | Check system status |
:audit | View audit log |
Autocomplete¶
When typing a command, k13d provides smart autocomplete:
- Single match: Dimmed hint text appears (press Tab to accept)
- Multiple matches: Dropdown overlay appears above command bar
- Up / Down to navigate
- Tab or Enter to select
- Esc to dismiss
- Custom aliases from
aliases.yamlincluded in results
Resource Aliases¶
Define custom command shortcuts in ~/.config/k13d/aliases.yaml:
aliases:
pp: pods
dep: deployments
svc: services
sec: secrets
cm: configmaps
ds: daemonsets
sts: statefulsets
Usage¶
- Type
:ppto navigate to Pods (alias resolves automatically) - Type
:aliasto see all active aliases (built-in + custom) - Custom aliases integrate with autocomplete — type
:pand press Tab - If a custom alias conflicts with a built-in, the custom alias wins
Resource Actions¶
General Actions¶
| Key | Action | Description |
|---|---|---|
| Y | YAML | View resource YAML |
| D | Describe | Describe resource |
| E | Edit | Edit resource (opens $EDITOR) |
| Ctrl+D | Delete | Delete resource (with confirmation) |
Pod-Specific Actions¶
| Key | Action | Description |
|---|---|---|
| L | Logs | Stream pod logs |
| P | Previous Logs | View previous container logs |
| S | Shell | Open a shell inside the selected pod |
| A | Attach | Attach to the selected pod |
| Enter | Containers | Show the pod's container list |
| Shift+F | Port Forward | Start a new port forward |
| F | Active Port Forwards | Show running port forwards |
Deployment Actions¶
| Key | Action | Description |
|---|---|---|
| Shift+S | Scale | Scale replicas |
| Shift+R | Restart | Rollout restart |
| Z | ReplicaSets | Jump to related ReplicaSets |
| Enter / Right | Related Pods | Drill down into related resources |
Node Actions¶
| Key | Action | Description |
|---|---|---|
| C | Cordon | Mark node unschedulable |
| Shift+C | Uncordon | Mark node schedulable |
| Shift+D | Drain | Drain node |
Node View¶
:nodesshows whether a node is acting ascontrol-planeorworkerin theROLEcolumn.CPUandMEMprefer live node metrics. When metrics-server is unavailable, k13d falls back to scheduled pod requests and prefixes the cell with~.GPUshows scheduled GPU requests versus allocatable GPU capacity. Kubernetes metrics-server does not provide live GPU utilization, so this column is request-based by design.
AI Assistant¶
Using the AI Panel¶
- Press Tab to focus on the AI panel
- Type your question in the boxed prompt area
- Press Enter to send
- Press Shift+Tab to move into transcript history
- With the AI panel open, return focus to the table and press Enter on a row to attach or detach that resource as AI context
- Use J / K or ++pgup++ / ++pgdn++ to browse older replies
- Press Tab to return to the prompt
The prompt area is boxed separately from the transcript so it is easier to see whether you are typing a new message or browsing previous output.
You can keep the table readable while chatting by resizing the right-side AI panel with Alt+H, Alt+L, and Alt+0, or temporarily expand it with Alt+F and restore the split layout with the same shortcut.
When a row is attached to AI, it keeps a subtle highlight in the table and stays available to the assistant even if you navigate to another resource view.
Agentic AI is kubectl-first by default. bash and MCP tools are opt-in through config.yaml, and unsupported interactive kubectl flows such as kubectl edit, kubectl port-forward, and kubectl exec -it are blocked instead of shown as approvable actions.
Chat History¶
Previous Q&A sessions are preserved within each TUI session. Press Shift+Tab to focus the transcript, then use:
- J / K or Up / Down to move line by line
- ++pgup++ / ++pgdn++ to move by a page
- G / Shift+G to jump to the top or bottom
- Tab to return to the prompt
Model Switching¶
Switch AI models on the fly:
- Type
:modelto see all configured profiles - Type
:model gpt-4oto switch directly - Active model marked with
*in selector
Use Shift+O to edit the current active LLM connection from the TUI settings modal.
For the exact file persistence behavior, including when TUI updates llm, when it syncs the active profile, and how :model rewrites active_model, see Model Settings & Storage.
AI Actions on Resources¶
| Key | Action | Description |
|---|---|---|
| Shift+L | AI Analyze | Deep analysis of selected resource |
| H | Explain This | Get explanation of resource |
Tool Approval¶
When AI requests to execute a command:
┌──────────────────────────────────────────────┐
│ Decision Required │
│ │
│ kubectl get pods -n production │
│ │
│ Reject (N / Esc) Approve (Y / Enter) │
└──────────────────────────────────────────────┘
The request opens as a centered modal, matching the Web UI approval flow more closely.
| Key | Action |
|---|---|
| Y / Enter | Approve this command |
| N / Esc | Reject this command |
Filtering and Search¶
Filter Syntax¶
/nginx # Contains "nginx"
/^nginx # Starts with "nginx"
/nginx$ # Ends with "nginx"
/nginx.*running # Regex pattern
Quick Filter¶
| Key | Action |
|---|---|
| / | Start filter mode |
| Esc | Clear filter |
| Enter | Apply filter |
Status Bar¶
The status bar shows:
- Current resource type
- Selection index / total count
- Active filter
- Kubernetes context
- Current namespace
Plugins¶
Extend k13d with external CLI tools via ~/.config/k13d/plugins.yaml. Plugins bind keyboard shortcuts to commands that run with the selected resource's context.
Quick Start¶
Create ~/.config/k13d/plugins.yaml:
plugins:
dive:
shortCut: "Ctrl-I"
description: "Dive into container image layers"
scopes: [pods]
command: dive
args: [$IMAGE]
Then in the TUI:
- Navigate to Pods (
:pods) - Select a pod with
j/k - Press Ctrl+I to launch
divewith the pod's container image
Using Plugins¶
| Action | How |
|---|---|
| View all plugins | Type :plugins |
| Run a plugin | Press the plugin's shortcut while on a matching resource |
| Confirm execution | Press Execute in the confirmation modal (if confirm: true) |
Example Plugins¶
plugins:
# Analyze container image layers
dive:
shortCut: "Ctrl-I"
description: "Dive into container image layers"
scopes: [pods]
command: dive
args: [$IMAGE]
# Debug pod with ephemeral container
debug:
shortCut: "Shift-D"
description: "Debug pod with ephemeral container"
scopes: [pods]
command: kubectl
args: [debug, -n, $NAMESPACE, $NAME, -it, --image=busybox]
confirm: true
# Background port-forward
port-forward:
shortCut: "Shift-F"
description: "Port-forward to localhost:8080"
scopes: [pods, services]
command: kubectl
args: [port-forward, -n, $NAMESPACE, $NAME, "8080:80"]
background: true
confirm: true
# Multi-pod log streaming
stern:
shortCut: "Shift-S"
description: "Stream logs with stern (by app label)"
scopes: [deployments]
command: stern
args: [-n, $NAMESPACE, $LABELS.app]
# Open in external tool (all resources)
lens:
shortCut: "Ctrl-O"
description: "Open in Lens"
scopes: ["*"]
command: lens
args: [--context, $CONTEXT]
background: true
Tip
Plugins with background: true run without suspending the TUI. Use this for port-forwarding or opening external applications.
See Configuration > Plugins for the full reference including all available variables.
Custom Hotkeys¶
Define custom keyboard shortcuts in ~/.config/k13d/hotkeys.yaml to execute external commands:
hotkeys:
stern-logs:
shortCut: "Shift-L"
description: "Stern multi-pod logs"
scopes: [pods, deployments]
command: stern
args: ["-n", "$NAMESPACE", "$NAME"]
port-forward-8080:
shortCut: "Ctrl-P"
description: "Port forward to 8080"
scopes: [pods, services]
command: kubectl
args: [port-forward, -n, "$NAMESPACE", "$NAME", "8080:8080"]
Hotkeys support $NAMESPACE, $NAME, and $CONTEXT variable expansion. Set dangerous: true to require confirmation before execution.
Per-Resource Sort Defaults¶
Configure default sort in ~/.config/k13d/views.yaml:
views:
pods:
sortColumn: AGE
sortAscending: false # Newest first
deployments:
sortColumn: NAME
sortAscending: true # Alphabetical
services:
sortColumn: TYPE
sortAscending: true
Sort preferences are applied automatically when navigating to each resource. k13d detects column types (numeric, age, ready format, string) for proper sorting.
Context Switching¶
Switch between Kubernetes clusters:
- Type
:contextor:ctx - Select from available contexts (current marked with
*) - Press Enter to switch
On switch, k13d reconnects to the new cluster, reloads namespaces, and refreshes all resource data.
Customization¶
Theme Configuration¶
k13d uses a Tokyo Night-inspired theme by default.
Configuration File¶
# ~/.config/k13d/config.yaml
ui:
theme: tokyo-night # or: light, dark, nord
refresh_interval: 5s
show_header: true
show_status: true
Keyboard Shortcuts Reference¶
Global¶
| Key | Action |
|---|---|
| ? | Show help |
| Ctrl+C | Quit |
| Esc | Cancel / Back |
Navigation¶
| Key | Action |
|---|---|
| J / K | Up / Down |
| G / Shift+G | First / Last |
| Ctrl+F / Ctrl+B | Page Down / Up |
| Tab | Switch panel |
Actions¶
| Key | Action |
|---|---|
| Y | YAML |
| D | Describe |
| L | Logs |
| S | Shell |
| E | Edit |
| Shift+S | Scale |
| Shift+R | Restart |
| Ctrl+D | Delete |
AI¶
| Key | Action |
|---|---|
| Shift+L | AI Analyze |
| H | Explain This |
Tips and Tricks¶
1. Quick Namespace Switch¶
2. Resource Shortcuts¶
:po # pods
:svc # services
:deploy # deployments
:no # nodes
:alias # view all aliases
:model # switch AI model
:plugins # view plugins
3. Filter + Action¶
4. Vim-Style Navigation¶
If you're familiar with Vim:
j/kfor up/downggfor topGfor bottom/for search
Next Steps¶
- Web Dashboard - Web UI alternative
- Keyboard Shortcuts - Complete shortcut reference
- AI Assistant - AI features