Skip to content

Latest commit

 

History

92 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

telekube

A terminal UI for exploring and managing Kubernetes clusters. Browse resources, inspect details, and perform common kubectl operations through an interactive keyboard-driven interface.

Features

  • 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 get command — filter by namespace, labels, status, or any other criteria
  • Runtime config editing - Add new tabs or save commands to config.yaml without 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

Installation

go install github.com/clobrano/telekube@latest

From source

git clone https://github.com/clobrano/telekube.git
cd telekube
make install

Requirements

  • Go 1.21+
  • kubectl configured with cluster access

Usage

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.

Visual Tour

Initial Views

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: Pods view

Deployments view - Monitor your deployments: Deployments view

Creating Custom Tabs

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

Then enter your kubectl command: Create tab - command

The new tab appears and starts populating with results: New tab empty New tab populating

💡 Tip: Your new tabs are automatically saved to ~/.config/telekube/config.yaml and will persist across sessions. See Runtime Config Editing for more details.

Viewing Details

Access detailed information about your resources:

Log view - Stream and inspect pod logs: Logs part 1 Logs part 2

Description view - Full resource details: Description view

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

Search Tab

The first tab is always the Search tab, which lets you run kubectl GET commands interactively.

  1. Navigate to the Search tab (press 1 or use Tab/Shift+Tab)
  2. Press Enter to open the command input
  3. Type a kubectl command (e.g., get nodes -o wide, get pods -l app=nginx)
  4. Press Enter to execute and view results
  5. Use / to filter the results with fuzzy search

The Search tab is useful for ad-hoc queries without needing to configure a new tab.

Runtime Config Editing

You can add new tabs and save commands to config.yaml directly from the TUI — no editor required.

Add a new tab (+)

Press + from any tab to open a two-step dialog:

  1. Enter a name for the new tab (e.g. Failing Pods)
  2. Enter a kubectl get command (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.

Save a tab command (w)

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.

Fuzzy Filter

Press / to activate fuzzy filter mode. The filter uses fuzzy matching to filter resources in real-time as you type.

How fuzzy filter works

  • Case-insensitive - nginx matches NGINX, Nginx, etc.
  • Non-contiguous matching - Characters must appear in order but don't need to be adjacent. ngx matches nginx, nxabc matches nginx-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

Filter controls

Key Action
/ Activate fuzzy filter
Enter Confirm filter and return to list
Esc Cancel filter and show all resources

Examples

Query Matches
nginx nginx-deployment, my-nginx-pod
ngx nginx, nginx-abc123
run pods with status Running
def resources in default namespace

Keyboard Shortcuts

Navigation

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

Views

Key Action
Enter View resource details (table format)
Y View as YAML
J View as JSON
Esc Return to list view

Actions

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

Selection

Key Action
Space Toggle selection on current item
a Select all
A Deselect all

Config editing

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

Other

Key Action
/ Search/filter resources
r Refresh current view
? Show help
q Quit

Detail View

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

Configuration

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

Development

# Build
make build

# Run tests
make test

# Run with race detector
make build && ./telekube

# Install locally
make install

License

MIT

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages