# KDash - A fast and simple dashboard for Kubernetes




[](https://crates.io/crates/kdash)


[](https://coveralls.io/github/kdash-rs/kdash?branch=main)
[](https://github.com/kdash-rs/kdash/releases)


[](https://twitter.com/intent/follow?screen_name=deepu105)

A simple terminal dashboard for Kubernetes built with Rust [](https://twitter.com/intent/follow?screen_name=kdashrs)

## New since v0.6.2
- **Troubleshoot tab** surfaces severity-ranked findings for Pods, PVCs, and ReplicaSets, then lets you jump straight into containers, logs, describe, and YAML.
- **Events tab** shows Kubernetes events with namespace, involved kind, reason, count, message, and age, with the same describe/YAML workflows as other resources.
- **Deeper drill-down navigation** lets you move from workloads to owned Pods, from Pods to Containers, and from Nodes to the Pods scheduled on them.
- **Aggregate workload logs** combine logs from all pods owned by a workload into a single stream.
- **Inline `/` filtering** now works across resource tables and views, including Contexts, Help, Utilization, Troubleshoot, More, and Dynamic resource menus.
- **Smarter resource tab and menu counts** hide zero-count badges in the resource tabs, show cached counts for Dynamic menu entries, and use `?` when a Dynamic kind has not been fetched into cache yet.
- **Configurable keybindings and themes** let you override shortcuts and colors, and `log_tail_lines` lets you set the initial history fetched before live log streaming starts.
- **Better diagnostics and reliability** include recent-error dump to file, kubeconfig live reload, friendlier errors, and smoother log/render performance.
- **Configurable CLI Info** lets you disable built-in probes, add custom commands with optional regex-based version extraction
- **More columns** are shown if viewport is wide enough for most resources including a new 'w' keybind to show all.
## Sponsors
Thanks to the sponsors of [@deepu105](https://github.com/sponsors/deepu105) who makes maintaining projects like KDash sustainable. Consider [sponsoring](https://github.com/sponsors/deepu105) if you like the work.
## Installation
### Homebrew (Mac & Linux)
```bash
brew tap kdash-rs/kdash
brew install kdash
# If you need to be more specific, use:
brew install kdash-rs/kdash/kdash
```
To upgrade
```bash
brew upgrade kdash
```
### Scoop (Windows - Recommended way)
```bash
scoop bucket add kdash-bucket https://github.com/kdash-rs/scoop-kdash
scoop install kdash
```
### Chocolatey (Windows)
Chocolatey package is located [here](https://chocolatey.org/packages/kdash).
Since validation of the package takes forever, it may take a long while to become available after a release. I would recommend using Scoop instead for Windows.
```bash
choco install kdash
# Version number may be required for newer releases, if available:
choco install kdash --version=0.4.3
```
To upgrade
```bash
choco upgrade kdash --version=0.4.3
```
### Cargo
If you have Cargo installed then you install KDash from crates.io
```bash
cargo install kdash
# if you face issues with k8s-openapi crate try the below
cargo install --locked kdash
```
You can also clone the repo and run `cargo run` or `make` to build and run the app
### Nix (Maintained by third party)
Try out kdash via `nix run nixpkgs#kdash` or add `kdash` to your
`configuration.nix` for permanent installation.
### Install script
Run the below command to install the latest binary. Run with sudo if you don't have write access to `/usr/local/bin`. Else the script will install to the current directory. Alternatively, set `BIN_DIR` environment variable e.g. `BIN_DIR=~/.local/bin` to override the default install location.
```sh
### Manual
Binaries for macOS (x86_64, arm64), Linux GNU/MUSL(x86_64, armv6, armv7, aarch64) and Windows (x86_64, aarch64) are available on the [releases](https://github.com/kdash-rs/kdash/releases) page
1. Download the latest [binary](https://github.com/kdash-rs/kdash/releases) for your OS.
1. For Linux/macOS:
1. `cd` to the file you just downloaded and run `tar -C /usr/local/bin -xzf downloaded-file-name`. Use sudo if required.
1. Run with `kdash`
1. For Windows:
1. Use 7-Zip or TarTool to unpack the tar file.
1. Run the executable file `kdash.exe`
### Docker
Run KDash as a Docker container by mounting your `KUBECONFIG`. For example the below command for the default path
```bash
docker run --rm -it -v ~/.kube/config:/root/.kube/config deepu105/kdash
# If you want localhost access from the container
docker run --network host --rm -it -v ~/.kube/config:/root/.kube/config deepu105/kdash
```
You can also clone this repo and run `make docker` to build a docker image locally and run it using the above command
## Troubleshooting
**Note**: This may not work properly if you run Kubernetes locally using Minikube or Kind
> Note: On Debian/Ubuntu you might need to install `libxcb-xfixes0-dev` and `libxcb-shape0-dev`. On Fedora `libxcb` and `libxcb-devel` would be needed.
> Note: On Linux you might need to have package `xorg-dev` (Debian/Ubuntu) or `xorg-x11-server-devel` (Fedora) or equivalent installed for the copy to clipboard features to work
> Note: If you are getting compilation error from openSSL. Make sure perl and perl-core are installed for your OS.
## USAGE:
```bash
kdash
```
Press `?` while running the app to see keybindings
## Configuration
KDash supports config-based keybinding and theme overrides, plus a configurable default for historical log lines fetched before live streaming starts.
By default it reads config from:
- `~/.config/kdash/config.yaml`
You can also point it at a specific file with:
```bash
KDASH_CONFIG=/path/to/config.yaml kdash
```
Theme overrides support separate light and dark values:
```yaml
theme:
dark:
primary: "#89B4FA"
background: "#11111B"
light:
primary: "#D20F39"
background: "#FAF7F0"
```
Keybindings are overridden by binding name:
```yaml
keybindings:
filter: f
help: h
describe_resource: i
resource_yaml: v
```
Log streaming history can also be tuned:
```yaml
log_tail_lines: 250
```
CLI Info entries can be configured too. Built-in entries remain enabled by default, missing binaries are hidden by default, you can disable any built-in by label, and you can add custom probes with a label plus command:
```yaml
cli_info:
hide_missing_binaries: false
disable_defaults:
- docker
custom:
- label: istioctl
command: ["istioctl", "version"]
regex: '\b(v?[0-9]+\.[0-9]+\.[0-9]+)\b'
```
Set `hide_missing_binaries: false` if you want missing CLIs to stay visible as `Not found`.
Built-in labels are: `kubectl client`, `kubectl server`, `docker`, `docker-compose`, `podman`, `containerd`, `helm`, and `kind`. For custom commands, `regex` is optional: if provided, the first capture group is shown; otherwise the first non-empty stdout line is shown.
See the sample config in [assets/kdash.sample-config.yaml](assets/kdash.sample-config.yaml) for a complete example with both custom keybindings and custom light/dark theme overrides.
## FLAGS:
- `-h, --help`: Prints help information
- `-V, --version`: Prints version information
- `-t, --tick-rate <tick-rate>`: Set the tick rate (milliseconds): the lower the number the higher the FPS.
- `-p, --poll-rate <poll-rate>`: Set the network call polling rate (milliseconds, should be multiples of tick-rate): the lower the number the higher the network calls.
- `--log-tail-lines <log-tail-lines>`: Set how many historical log lines to fetch before live streaming starts.
- `-d, --debug[=<debug>]`: Enables debug mode and writes logs to `kdash-debug-<timestamp>.log` file in the current directory. Default behavior is to write INFO logs. Pass a log level to overwrite the default [possible values: info, debug, trace, warn, error]
## Limitations/Known issues
- **[Linux/Docker]** Copy to clipboard feature is OS/arch dependent and might crash in some Linux distros and is not supported on `aarch64` and `arm` machines.
- **[macOS]** KDash looks better on iTerm2 since macOS's default Terminal app makes the colors render weird.
- **[Windows]** KDash looks better on CMD since Powershell's default theme makes the colors look weird.
- **[Windows]** If using k3d for local clusters, set the server URL to 127.0.0.1 as 0.0.0.0 doesn't work with kube-rs. You can use `k3d cluster create --api-port 127.0.0.1:6550` or change the `cluster.server` value in your `.kube/config` for the k3d cluster to `127.0.0.1:<port>`.
## Features
- CLI info
- Node metrics
- Resource watch (configurable polling interval with `-p` flag)
- Custom resource definitions
- Troubleshoot tab for Pods, PVCs, and ReplicaSets
- Describe resources & copy the output
- Get YAML for resources & copy the output
- Stream container logs
- Aggregate workload logs
- Drill down from workloads/nodes to Pods and from Pods to Containers
- Open a shell in the selected pod container from the Containers view. KDash temporarily suspends the UI while the interactive shell is active and restores it when you exit.
- Context
- Context info
- Context watch
- Change namespace
- Context switch
- Resources utilizations for nodes, pods and namespaces based on metrics server. Requires [metrics-server](https://kubernetes.io/docs/tasks/debug-application-cluster/resource-metrics-pipeline/#metrics-server) to be deployed on the cluster.
- Dark/Light themes (Catppuccin Macchiato/Latte by default)
- Sensible keyboard shortcuts
- Configurable keybindings, theme overrides, and log tail defaults
- Inline filtering across resource views and menus
- Dynamic menu entries show cached item counts when available and `?` when the count is not cached yet
## Screenshots
### Overview screen

### Container logs screen (light theme)

### Pod describe screen (light theme)

### Contexts screen

### Utilization screen

## Libraries used
- [ratatui](https://github.com/ratatui-org/ratatui)
- [crossterm](https://github.com/crossterm-rs/crossterm)
- [clap](https://github.com/clap-rs/clap)
- [tokio](https://github.com/tokio-rs/tokio)
- [duct.rs](https://github.com/oconnor663/duct.rs)
- [kube-rs](https://github.com/clux/kube-rs)
- [serde](https://github.com/serde-rs/serde)
- [kubectl-view-allocations](https://github.com/davidB/kubectl-view-allocations)
- [copypasta](https://github.com/alacritty/copypasta)
## How does this compare to K9S?
[K9S](https://github.com/derailed/k9s) is a beast compared to this as it offers way more features including CRUD actions.
KDash only offers a view of the resources with a focus on speed and UX. Really, if something is slow or has bad UX then please raise a bug. Hence the UI/UX is designed to be more user-friendly and easier to navigate with contextual help everywhere and a tab system to switch between different resources easily.
At least for now, there are no plans to add full CRUD for resources but in the future, we might.
## Licence
MIT
## Creator
- [Deepu K Sasidharan](https://deepu.tech/)
## [Contributors](https://github.com/kdash-rs/kdash/graphs/contributors)