A terminal UI for exploring and managing Kubernetes clusters. Browse resources, inspect details, and perform common kubectl operations through an interactive keyboard-driven interface.
- Multi-tab resource browsing - View Pods, Deployments, Services, and other resources in configurable tabs
- Search tab - Execute kubectl GET commands interactively from the first tab
- Command-based tabs - Configure tabs with any
kubectl getcommand — filter by namespace, labels, status, or any other criteria - Runtime config editing - Add new tabs or save commands to
config.yamlwithout leaving the TUI - Fuzzy search - Filter resources in real-time with intelligent matching
- Multiple output formats - View resources as table or YAML
- Resource actions - Describe, edit, delete resources; view logs
- Context & namespace switching - Quickly switch between clusters and namespaces
- Multi-select - Select multiple resources for bulk operations
- Fully configurable - Customize keybindings, tabs, and commands via YAML
go install github.com/clobrano/telekube@latestgit clone https://github.com/clobrano/telekube.git
cd telekube
make install- Go 1.21+
- kubectl configured with cluster access
telekube [--config /path/to/config.yaml]On first run, if --config flag is not provided, a default configuration file is created at ~/.config/telekube/config.yaml.
When you start Telekube, you'll see a list of resources organized in tabs. Here are the main views:
Pods view - Browse all pods across namespaces:

Deployments view - Monitor your deployments:

Add a new tab to monitor specific resources. First, enter the tab name:

Then enter your kubectl command:

The new tab appears and starts populating with results:

💡 Tip: Your new tabs are automatically saved to
~/.config/telekube/config.yamland will persist across sessions. See Runtime Config Editing for more details.
Access detailed information about your resources:
Log view - Stream and inspect pod logs:

Description view - Full resource details:

Filter resources - Use fuzzy search to find what you need:

The first tab is always the Search tab, which lets you run kubectl GET commands interactively.
- Navigate to the Search tab (press
1or useTab/Shift+Tab) - Press
Enterto open the command input - Type a kubectl command (e.g.,
get nodes -o wide,get pods -l app=nginx) - Press
Enterto execute and view results - Use
/to filter the results with fuzzy search
The Search tab is useful for ad-hoc queries without needing to configure a new tab.
You can add new tabs and save commands to config.yaml directly from the TUI — no editor required.
Press + from any tab to open a two-step dialog:
- Enter a name for the new tab (e.g.
Failing Pods) - Enter a
kubectl getcommand (e.g.pods -A --field-selector=status.phase!=Running)
The new tab is validated against the full config before config.yaml is written, so a bad command can never corrupt your configuration. On success the tab appears immediately and is focused.
| Context | Behaviour |
|---|---|
| Config tab (main view) | Saves the tab's current command to config.yaml immediately |
Config tab (inside the Enter edit dialog) |
Press w instead of Enter to apply the new command and save it in one step |
| Search tab | Opens a name prompt; saves the search command as a new permanent tab entry |
Changes are written atomically — the config is validated before the file is overwritten.
Press / to activate fuzzy filter mode. The filter uses fuzzy matching to filter resources in real-time as you type.
- Case-insensitive -
nginxmatchesNGINX,Nginx, etc. - Non-contiguous matching - Characters must appear in order but don't need to be adjacent.
ngxmatchesnginx,nxabcmatchesnginx-abc123 - Searches all columns - Matches against name, status, namespace, or any visible column
- Smart ranking - Results are sorted by match quality:
- Exact matches rank highest
- Matches at the start of words rank higher
- Consecutive character matches rank higher
- Shorter matches rank higher than longer ones
| Key | Action |
|---|---|
/ |
Activate fuzzy filter |
Enter |
Confirm filter and return to list |
Esc |
Cancel filter and show all resources |
| Query | Matches |
|---|---|
nginx |
nginx-deployment, my-nginx-pod |
ngx |
nginx, nginx-abc123 |
run |
pods with status Running |
def |
resources in default namespace |
| Key | Action |
|---|---|
j / Down |
Move cursor down |
k / Up |
Move cursor up |
g |
Go to first item |
G |
Go to last item |
Tab / l |
Next tab |
Shift+Tab / h |
Previous tab |
1-9 |
Jump to tab by number |
| Key | Action |
|---|---|
Enter |
View resource details (table format) |
Y |
View as YAML |
J |
View as JSON |
Esc |
Return to list view |
| Key | Action |
|---|---|
d |
Describe resource |
e |
Edit resource |
D |
Delete resource (with confirmation) |
L |
View logs (pods only) |
T |
Open system terminal |
s |
Open sort selector (sort by column) |
c |
Copy column data |
C |
Switch kubectl context |
n |
Switch namespace |
| Key | Action |
|---|---|
Space |
Toggle selection on current item |
a |
Select all |
A |
Deselect all |
| Key | Action |
|---|---|
+ |
Add a new tab (prompts for name then command) |
Ctrl+W |
Save current tab command to config.yaml |
Ctrl+W (Search tab) |
Save search command as a new named tab |
Enter (edit dialog) |
Apply new command (run only) |
Ctrl+W (edit dialog) |
Apply new command and save to config.yaml |
| Key | Action |
|---|---|
/ |
Search/filter resources |
r |
Refresh current view |
? |
Show help |
q |
Quit |
When viewing resource details (Enter, Y, or J), use these keys to navigate:
| Key | Action |
|---|---|
j / Down |
Scroll down |
k / Up |
Scroll up |
d |
Scroll half page down |
u |
Scroll half page up |
g |
Go to top |
G |
Go to bottom |
Esc / q |
Return to list |
Edit ~/.config/telekube/config.yaml to customize:
# Path to kubectl binary
kubectl_bin: "kubectl"
# Pager for long output (used by some actions)
pager: "less"
# Custom keybindings
keybindings:
quit: "q"
help: "?"
refresh: "r"
search: "/"
describe: "d"
logs: "L"
delete: "D"
edit: "e"
terminal: "T"
yaml_view: "Y"
json_view: "J"
switch_namespace: "n"
switch_context: "C"
copy_data: "c"
select: " "
select_all: "a"
deselect_all: "A"
up: "up"
down: "down"
tab_next: "tab"
tab_prev: "shift+tab"
delete_tab: "-"
# Configure resource tabs (command-based)
# Each tab runs a kubectl GET command (without the "kubectl" prefix, "get" is optional)
tabs:
- name: "Pods"
command: "pods -A"
- name: "Running"
command: "pods -A --field-selector=status.phase=Running"
- name: "Deployments"
command: "deployments -A"
- name: "Services"
command: "services -A"
- name: "Nodes"
command: "nodes -o wide"
# Tab options:
# command: kubectl GET command (required)
# sort_by: column name to sort by (e.g., "NAME", "AGE", "STATUS") or "creation_time" for the AGE column
# sort_reverse: true to reverse the sort order (default: false)
#
# Examples of tab commands:
# command: "pods -n kube-system" # Specific namespace
# command: "pods -l app=nginx" # Filter by label
# command: "events -A" # All events
#
# Examples with sorting:
# - name: "Newest Pods"
# command: "pods -A"
# sort_by: "creation_time" # Sort by AGE (newest first)
# - name: "Deployments by Name"
# command: "deployments -A"
# sort_by: "NAME"
# sort_reverse: true# Build
make build
# Run tests
make test
# Run with race detector
make build && ./telekube
# Install locally
make installMIT