Full Code of derailed/k9s for AI

master 96342c5b7ac3 cached
1027 files
2.8 MB
788.5k tokens
4963 symbols
1 requests
Download .txt
Showing preview only (3,130K chars total). Download the full file or copy to clipboard to get everything.
Repository: derailed/k9s
Branch: master
Commit: 96342c5b7ac3
Files: 1027
Total size: 2.8 MB

Directory structure:
gitextract_p45lhan2/

├── .codebeatsettings
├── .dockerignore
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── lint.yml
│       ├── stales-issues.yml
│       ├── stales-prs.yml
│       └── test.yml
├── .gitignore
├── .golangci.yml
├── .goreleaser.yml
├── .semaphore/
│   └── semaphore.yml
├── .travis.yml
├── CNAME
├── COPYING
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── change_logs/
│   ├── release_0.1.1.md
│   ├── release_0.1.10.md
│   ├── release_0.1.11.md
│   ├── release_0.1.2.md
│   ├── release_0.1.3.md
│   ├── release_0.1.4.md
│   ├── release_0.1.5.md
│   ├── release_0.1.6.md
│   ├── release_0.1.7.md
│   ├── release_0.1.8.md
│   ├── release_0.1.9.md
│   ├── release_0.10.0.md
│   ├── release_0.10.1.md
│   ├── release_0.10.2.md
│   ├── release_0.10.3.md
│   ├── release_0.10.4.md
│   ├── release_0.10.5.md
│   ├── release_0.10.6.md
│   ├── release_0.10.7.md
│   ├── release_0.10.8.md
│   ├── release_0.10.9.md
│   ├── release_0.11.0.md
│   ├── release_0.11.1.md
│   ├── release_0.11.2.md
│   ├── release_0.11.3.md
│   ├── release_0.12.0.md
│   ├── release_0.2.0.md
│   ├── release_0.2.1.md
│   ├── release_0.2.2.md
│   ├── release_0.2.3.md
│   ├── release_0.2.4.md
│   ├── release_0.2.5.md
│   ├── release_0.2.6.md
│   ├── release_0.3.0.md
│   ├── release_0.3.1.md
│   ├── release_0.3.2.md
│   ├── release_0.3.3.md
│   ├── release_0.4.0.md
│   ├── release_0.4.1.md
│   ├── release_0.4.2.md
│   ├── release_0.4.3.md
│   ├── release_0.4.4.md
│   ├── release_0.4.5.md
│   ├── release_0.4.6.md
│   ├── release_0.4.7.md
│   ├── release_0.4.8.md
│   ├── release_0.5.0.md
│   ├── release_0.5.1.md
│   ├── release_0.5.2.md
│   ├── release_0.6.0.md
│   ├── release_0.6.1.md
│   ├── release_0.6.2.md
│   ├── release_0.6.3.md
│   ├── release_0.6.4.md
│   ├── release_0.6.5.md
│   ├── release_0.6.6.md
│   ├── release_0.6.7.md
│   ├── release_0.7.0.md
│   ├── release_0.7.1.md
│   ├── release_0.7.10.md
│   ├── release_0.7.11.md
│   ├── release_0.7.12.md
│   ├── release_0.7.13.md
│   ├── release_0.7.2.md
│   ├── release_0.7.3.md
│   ├── release_0.7.4.md
│   ├── release_0.7.5.md
│   ├── release_0.7.6.md
│   ├── release_0.7.7.md
│   ├── release_0.7.8.md
│   ├── release_0.7.9.md
│   ├── release_0.8.0.md
│   ├── release_0.8.1.md
│   ├── release_0.8.2.md
│   ├── release_0.8.3.md
│   ├── release_0.8.4.md
│   ├── release_0.9.0.md
│   ├── release_0.9.1.md
│   ├── release_0.9.2.md
│   ├── release_0.9.3.md
│   ├── release_v0.13.0.md
│   ├── release_v0.13.1.md
│   ├── release_v0.13.2.md
│   ├── release_v0.13.3.md
│   ├── release_v0.13.4.md
│   ├── release_v0.13.5.md
│   ├── release_v0.13.6.md
│   ├── release_v0.13.7.md
│   ├── release_v0.13.8.md
│   ├── release_v0.14.0.md
│   ├── release_v0.14.1.md
│   ├── release_v0.15.0.md
│   ├── release_v0.15.1.md
│   ├── release_v0.15.2.md
│   ├── release_v0.16.0.md
│   ├── release_v0.16.1.md
│   ├── release_v0.17.0.md
│   ├── release_v0.17.1.md
│   ├── release_v0.17.2.md
│   ├── release_v0.17.3.md
│   ├── release_v0.17.4.md
│   ├── release_v0.17.5.md
│   ├── release_v0.17.6.md
│   ├── release_v0.17.7.md
│   ├── release_v0.18.0.md
│   ├── release_v0.18.1.md
│   ├── release_v0.19.0.md
│   ├── release_v0.19.1.md
│   ├── release_v0.19.2.md
│   ├── release_v0.19.3.md
│   ├── release_v0.19.4.md
│   ├── release_v0.19.5.md
│   ├── release_v0.19.6.md
│   ├── release_v0.19.7.md
│   ├── release_v0.20.0.md
│   ├── release_v0.20.1.md
│   ├── release_v0.20.2.md
│   ├── release_v0.20.3.md
│   ├── release_v0.20.4.md
│   ├── release_v0.20.5.md
│   ├── release_v0.21.0.md
│   ├── release_v0.21.1.md
│   ├── release_v0.21.10.md
│   ├── release_v0.21.2.md
│   ├── release_v0.21.3.md
│   ├── release_v0.21.4.md
│   ├── release_v0.21.5.md
│   ├── release_v0.21.6.md
│   ├── release_v0.21.7.md
│   ├── release_v0.21.8.md
│   ├── release_v0.21.9.md
│   ├── release_v0.22.0.md
│   ├── release_v0.22.1.md
│   ├── release_v0.23.0.md
│   ├── release_v0.23.1.md
│   ├── release_v0.23.10.md
│   ├── release_v0.23.2.md
│   ├── release_v0.23.3.md
│   ├── release_v0.23.4.md
│   ├── release_v0.23.5.md
│   ├── release_v0.23.6.md
│   ├── release_v0.23.7.md
│   ├── release_v0.23.8.md
│   ├── release_v0.23.9.md
│   ├── release_v0.24.0.md
│   ├── release_v0.24.1.md
│   ├── release_v0.24.10.md
│   ├── release_v0.24.11.md
│   ├── release_v0.24.12.md
│   ├── release_v0.24.13.md
│   ├── release_v0.24.14.md
│   ├── release_v0.24.15.md
│   ├── release_v0.24.2.md
│   ├── release_v0.24.3.md
│   ├── release_v0.24.4.md
│   ├── release_v0.24.5.md
│   ├── release_v0.24.6.md
│   ├── release_v0.24.7.md
│   ├── release_v0.24.8.md
│   ├── release_v0.24.9.md
│   ├── release_v0.25.0.md
│   ├── release_v0.25.1.md
│   ├── release_v0.25.10.md
│   ├── release_v0.25.11.md
│   ├── release_v0.25.12.md
│   ├── release_v0.25.13.md
│   ├── release_v0.25.14.md
│   ├── release_v0.25.15.md
│   ├── release_v0.25.16.md
│   ├── release_v0.25.17.md
│   ├── release_v0.25.18.md
│   ├── release_v0.25.19.md
│   ├── release_v0.25.2.md
│   ├── release_v0.25.20.md
│   ├── release_v0.25.21.md
│   ├── release_v0.25.3.md
│   ├── release_v0.25.4.md
│   ├── release_v0.25.5.md
│   ├── release_v0.25.6.md
│   ├── release_v0.25.7.md
│   ├── release_v0.25.8.md
│   ├── release_v0.25.9.md
│   ├── release_v0.26.0.md
│   ├── release_v0.26.1.md
│   ├── release_v0.26.2.md
│   ├── release_v0.26.3.md
│   ├── release_v0.26.4.md
│   ├── release_v0.26.5.md
│   ├── release_v0.26.6.md
│   ├── release_v0.26.7.md
│   ├── release_v0.27.0.md
│   ├── release_v0.27.1.md
│   ├── release_v0.27.2.md
│   ├── release_v0.27.3.md
│   ├── release_v0.27.4.md
│   ├── release_v0.28.0.md
│   ├── release_v0.28.1.md
│   ├── release_v0.28.2.md
│   ├── release_v0.29.0.md
│   ├── release_v0.29.1.md
│   ├── release_v0.30.0.md
│   ├── release_v0.30.1.md
│   ├── release_v0.30.2.md
│   ├── release_v0.30.3.md
│   ├── release_v0.30.4.md
│   ├── release_v0.30.5.md
│   ├── release_v0.30.6.md
│   ├── release_v0.30.7.md
│   ├── release_v0.30.8.md
│   ├── release_v0.31.0.md
│   ├── release_v0.31.1.md
│   ├── release_v0.31.2.md
│   ├── release_v0.31.3.md
│   ├── release_v0.31.4.md
│   ├── release_v0.31.5.md
│   ├── release_v0.31.6.md
│   ├── release_v0.31.7.md
│   ├── release_v0.31.8.md
│   ├── release_v0.31.9.md
│   ├── release_v0.32.0.md
│   ├── release_v0.32.1.md
│   ├── release_v0.32.2.md
│   ├── release_v0.32.3.md
│   ├── release_v0.32.4.md
│   ├── release_v0.32.5.md
│   ├── release_v0.32.6.md
│   ├── release_v0.32.7.md
│   ├── release_v0.40.0.md
│   ├── release_v0.40.1.md
│   ├── release_v0.40.10.md
│   ├── release_v0.40.11.md
│   ├── release_v0.40.2.md
│   ├── release_v0.40.3.md
│   ├── release_v0.40.4.md
│   ├── release_v0.40.5.md
│   ├── release_v0.40.6.md
│   ├── release_v0.40.7.md
│   ├── release_v0.40.8.md
│   ├── release_v0.40.9.md
│   ├── release_v0.50.0.md
│   ├── release_v0.50.1.md
│   ├── release_v0.50.10.md
│   ├── release_v0.50.11.md
│   ├── release_v0.50.12.md
│   ├── release_v0.50.13.md
│   ├── release_v0.50.14.md
│   ├── release_v0.50.15.md
│   ├── release_v0.50.16.md
│   ├── release_v0.50.17.md
│   ├── release_v0.50.18.md
│   ├── release_v0.50.2.md
│   ├── release_v0.50.3.md
│   ├── release_v0.50.4.md
│   ├── release_v0.50.5.md
│   ├── release_v0.50.6.md
│   ├── release_v0.50.7.md
│   ├── release_v0.50.8.md
│   └── release_v0.50.9.md
├── cmd/
│   ├── info.go
│   ├── info_test.go
│   ├── root.go
│   ├── testdata/
│   │   ├── k9s.yaml
│   │   └── k9s1.yaml
│   └── version.go
├── go.mod
├── go.sum
├── internal/
│   ├── client/
│   │   ├── client.go
│   │   ├── client_test.go
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── errors.go
│   │   ├── gvr.go
│   │   ├── gvr_test.go
│   │   ├── gvrs.go
│   │   ├── helper_test.go
│   │   ├── helpers.go
│   │   ├── metrics.go
│   │   ├── metrics_test.go
│   │   ├── switch_context_test.go
│   │   ├── testdata/
│   │   │   ├── config
│   │   │   ├── config.1
│   │   │   └── config.2
│   │   └── types.go
│   ├── color/
│   │   ├── colorize.go
│   │   └── colorize_test.go
│   ├── config/
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── benchmark.go
│   │   ├── benchmark_test.go
│   │   ├── color.go
│   │   ├── color_test.go
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── data/
│   │   │   ├── config.go
│   │   │   ├── context.go
│   │   │   ├── context_int_test.go
│   │   │   ├── context_test.go
│   │   │   ├── dir.go
│   │   │   ├── dir_test.go
│   │   │   ├── feature_gate.go
│   │   │   ├── helpers.go
│   │   │   ├── helpers_test.go
│   │   │   ├── ns.go
│   │   │   ├── ns_test.go
│   │   │   ├── proxy.go
│   │   │   ├── testdata/
│   │   │   │   ├── configs/
│   │   │   │   │   ├── aws_ct.yaml
│   │   │   │   │   ├── ct-1-1.yaml
│   │   │   │   │   ├── ct-1-2.yaml
│   │   │   │   │   ├── ct-2-1.yaml
│   │   │   │   │   └── def_ct.yaml
│   │   │   │   └── data/
│   │   │   │       └── k9s/
│   │   │   │           ├── cl-1/
│   │   │   │           │   ├── ct-1-1/
│   │   │   │           │   │   └── config.yaml
│   │   │   │           │   └── ct-1-2/
│   │   │   │           │       └── config.yaml
│   │   │   │           └── cl-2/
│   │   │   │               └── ct-2-1/
│   │   │   │                   └── config.yaml
│   │   │   ├── types.go
│   │   │   ├── view.go
│   │   │   └── view_test.go
│   │   ├── files.go
│   │   ├── files_int_test.go
│   │   ├── files_test.go
│   │   ├── flags.go
│   │   ├── flags_test.go
│   │   ├── helpers.go
│   │   ├── hotkey.go
│   │   ├── hotkey_test.go
│   │   ├── json/
│   │   │   ├── schemas/
│   │   │   │   ├── aliases.json
│   │   │   │   ├── context.json
│   │   │   │   ├── hotkeys.json
│   │   │   │   ├── k9s.json
│   │   │   │   ├── plugin-multi.json
│   │   │   │   ├── plugin.json
│   │   │   │   ├── plugins.json
│   │   │   │   ├── skin.json
│   │   │   │   └── views.json
│   │   │   ├── testdata/
│   │   │   │   ├── aliases/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── context/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── hotkeys/
│   │   │   │   │   └── cool.yaml
│   │   │   │   ├── k9s/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   ├── snippet.yaml
│   │   │   │   │   ├── snippets.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── skins/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   └── views/
│   │   │   │       ├── cool.yaml
│   │   │   │       └── toast.yaml
│   │   │   ├── validator.go
│   │   │   └── validator_test.go
│   │   ├── k9s.go
│   │   ├── k9s_int_test.go
│   │   ├── k9s_test.go
│   │   ├── logger.go
│   │   ├── logger_test.go
│   │   ├── mock/
│   │   │   └── test_helpers.go
│   │   ├── plugin.go
│   │   ├── plugin_test.go
│   │   ├── refresh_rate_test.go
│   │   ├── scans.go
│   │   ├── scans_test.go
│   │   ├── shell_pod.go
│   │   ├── styles.go
│   │   ├── styles_int_test.go
│   │   ├── styles_test.go
│   │   ├── templates/
│   │   │   ├── aliases.yaml
│   │   │   ├── benchmarks.yaml
│   │   │   ├── hotkeys.yaml
│   │   │   └── stock-skin.yaml
│   │   ├── testdata/
│   │   │   ├── aliases/
│   │   │   │   ├── aliases.yaml
│   │   │   │   └── plain.yaml
│   │   │   ├── benchmarks/
│   │   │   │   ├── b_containers.yaml
│   │   │   │   ├── b_containers_1.yaml
│   │   │   │   ├── b_good.yaml
│   │   │   │   ├── b_toast.yaml
│   │   │   │   └── bench-fred.yaml
│   │   │   ├── configs/
│   │   │   │   ├── default.yaml
│   │   │   │   ├── expected.yaml
│   │   │   │   ├── k9s.yaml
│   │   │   │   └── k9s_toast.yaml
│   │   │   ├── hotkeys/
│   │   │   │   └── hotkeys.yaml
│   │   │   ├── k8s.yaml
│   │   │   ├── kubes/
│   │   │   │   └── test.yaml
│   │   │   ├── plugins/
│   │   │   │   ├── dir/
│   │   │   │   │   ├── snippet.1.yaml
│   │   │   │   │   ├── snippet.2.yaml
│   │   │   │   │   └── snippet.multi.yaml
│   │   │   │   ├── plugins-toast.yaml
│   │   │   │   └── plugins.yaml
│   │   │   ├── skins/
│   │   │   │   ├── black-and-wtf.yaml
│   │   │   │   ├── boarked.yaml
│   │   │   │   └── empty.yaml
│   │   │   └── views/
│   │   │       └── views.yaml
│   │   ├── threshold.go
│   │   ├── threshold_test.go
│   │   ├── types.go
│   │   ├── views.go
│   │   ├── views_int_test.go
│   │   └── views_test.go
│   ├── dao/
│   │   ├── accessor.go
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── benchmark.go
│   │   ├── benchmark_test.go
│   │   ├── cluster.go
│   │   ├── cm.go
│   │   ├── container.go
│   │   ├── container_test.go
│   │   ├── context.go
│   │   ├── crd.go
│   │   ├── cronjob.go
│   │   ├── cruiser.go
│   │   ├── cruiser_test.go
│   │   ├── describe.go
│   │   ├── dir.go
│   │   ├── dir_test.go
│   │   ├── dp.go
│   │   ├── ds.go
│   │   ├── dynamic.go
│   │   ├── generic.go
│   │   ├── helm_chart.go
│   │   ├── helm_history.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── img_scan.go
│   │   ├── job.go
│   │   ├── log_item.go
│   │   ├── log_item_test.go
│   │   ├── log_items.go
│   │   ├── log_items_test.go
│   │   ├── log_options.go
│   │   ├── log_options_test.go
│   │   ├── node.go
│   │   ├── non_resource.go
│   │   ├── ns.go
│   │   ├── patch.go
│   │   ├── patch_test.go
│   │   ├── pod.go
│   │   ├── pod_test.go
│   │   ├── port_forward.go
│   │   ├── port_forward_test.go
│   │   ├── port_forwarder.go
│   │   ├── pulse.go
│   │   ├── rbac.go
│   │   ├── rbac_policy.go
│   │   ├── rbac_policy_test.go
│   │   ├── rbac_subject.go
│   │   ├── recorder.go
│   │   ├── reference.go
│   │   ├── registry.go
│   │   ├── registry_test.go
│   │   ├── resource.go
│   │   ├── rest_mapper.go
│   │   ├── rs.go
│   │   ├── scalable.go
│   │   ├── screen_dump.go
│   │   ├── secret.go
│   │   ├── secret_test.go
│   │   ├── sts.go
│   │   ├── svc.go
│   │   ├── table.go
│   │   ├── testdata/
│   │   │   ├── bench/
│   │   │   │   └── default_fred_1577308050814961000.txt
│   │   │   ├── benchspec.yaml
│   │   │   ├── config
│   │   │   ├── config.1
│   │   │   ├── crb.json
│   │   │   ├── dir/
│   │   │   │   ├── a/
│   │   │   │   │   └── b.yaml
│   │   │   │   └── a.yaml
│   │   │   ├── dr.json
│   │   │   ├── n1.json
│   │   │   ├── p1.json
│   │   │   └── secret.json
│   │   ├── types.go
│   │   ├── utils_test.go
│   │   └── workload.go
│   ├── health/
│   │   ├── check.go
│   │   ├── check_test.go
│   │   └── types.go
│   ├── helpers.go
│   ├── helpers_test.go
│   ├── keys.go
│   ├── model/
│   │   ├── cluster.go
│   │   ├── cluster_info.go
│   │   ├── cluster_info_test.go
│   │   ├── cmd_buff.go
│   │   ├── cmd_buff_test.go
│   │   ├── describe.go
│   │   ├── fish_buff.go
│   │   ├── fish_buff_test.go
│   │   ├── flash.go
│   │   ├── flash_test.go
│   │   ├── helpers.go
│   │   ├── helpers_int_test.go
│   │   ├── helpers_test.go
│   │   ├── hint.go
│   │   ├── hint_test.go
│   │   ├── history.go
│   │   ├── history_test.go
│   │   ├── log.go
│   │   ├── log_int_test.go
│   │   ├── log_test.go
│   │   ├── menu_hint.go
│   │   ├── menu_hint_test.go
│   │   ├── pulse.go
│   │   ├── pulse_health.go
│   │   ├── registry.go
│   │   ├── rev_values.go
│   │   ├── semver.go
│   │   ├── semver_test.go
│   │   ├── stack.go
│   │   ├── stack_test.go
│   │   ├── table.go
│   │   ├── table_int_test.go
│   │   ├── table_test.go
│   │   ├── testdata/
│   │   │   └── p1.json
│   │   ├── text.go
│   │   ├── text_test.go
│   │   ├── tree.go
│   │   ├── types.go
│   │   ├── values.go
│   │   └── yaml.go
│   ├── model1/
│   │   ├── color.go
│   │   ├── color_test.go
│   │   ├── delta.go
│   │   ├── delta_test.go
│   │   ├── fields.go
│   │   ├── header.go
│   │   ├── header_test.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── pool.go
│   │   ├── pool_test.go
│   │   ├── row.go
│   │   ├── row_event.go
│   │   ├── row_event_test.go
│   │   ├── row_test.go
│   │   ├── rows.go
│   │   ├── table_data.go
│   │   ├── table_data_test.go
│   │   ├── test_helper_test.go
│   │   └── types.go
│   ├── perf/
│   │   └── benchmark.go
│   ├── pool.go
│   ├── pool_test.go
│   ├── port/
│   │   ├── ann.go
│   │   ├── ann_test.go
│   │   ├── co_portspec.go
│   │   ├── co_portspec_test.go
│   │   ├── pf.go
│   │   ├── pf_test.go
│   │   ├── pfs.go
│   │   ├── pfs_test.go
│   │   ├── tunnel.go
│   │   └── tunnel_test.go
│   ├── render/
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── base.go
│   │   ├── benchmark.go
│   │   ├── benchmark_int_test.go
│   │   ├── cm.go
│   │   ├── container.go
│   │   ├── container_int_test.go
│   │   ├── container_test.go
│   │   ├── context.go
│   │   ├── context_test.go
│   │   ├── cr.go
│   │   ├── cr_test.go
│   │   ├── crb.go
│   │   ├── crb_test.go
│   │   ├── crd.go
│   │   ├── crd_test.go
│   │   ├── cronjob.go
│   │   ├── cronjob_test.go
│   │   ├── cust_col.go
│   │   ├── cust_col_test.go
│   │   ├── cust_cols.go
│   │   ├── cust_cols_test.go
│   │   ├── dir.go
│   │   ├── dp.go
│   │   ├── dp_test.go
│   │   ├── ds.go
│   │   ├── ds_test.go
│   │   ├── ep.go
│   │   ├── ep_test.go
│   │   ├── eps.go
│   │   ├── eps_test.go
│   │   ├── ev.go
│   │   ├── generic.go
│   │   ├── helm/
│   │   │   ├── chart.go
│   │   │   └── history.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── hpa.go
│   │   ├── hpa_test.go
│   │   ├── img_scan.go
│   │   ├── job.go
│   │   ├── job_test.go
│   │   ├── node.go
│   │   ├── node_int_test.go
│   │   ├── node_test.go
│   │   ├── np.go
│   │   ├── np_test.go
│   │   ├── ns.go
│   │   ├── ns_test.go
│   │   ├── pdb.go
│   │   ├── pdb_test.go
│   │   ├── pod.go
│   │   ├── pod_int_test.go
│   │   ├── pod_test.go
│   │   ├── policy.go
│   │   ├── policy_int_test.go
│   │   ├── policy_test.go
│   │   ├── port_forward_test.go
│   │   ├── portforward.go
│   │   ├── pv.go
│   │   ├── pv_test.go
│   │   ├── pvc.go
│   │   ├── pvc_test.go
│   │   ├── rbac.go
│   │   ├── reference.go
│   │   ├── reference_test.go
│   │   ├── render_test.go
│   │   ├── ro.go
│   │   ├── ro_test.go
│   │   ├── rob.go
│   │   ├── rob_test.go
│   │   ├── rs.go
│   │   ├── rs_test.go
│   │   ├── sa.go
│   │   ├── sa_test.go
│   │   ├── sc.go
│   │   ├── sc_test.go
│   │   ├── screen_dump.go
│   │   ├── screen_dump_test.go
│   │   ├── secret.go
│   │   ├── section.go
│   │   ├── sts.go
│   │   ├── sts_test.go
│   │   ├── subject.go
│   │   ├── svc.go
│   │   ├── svc_test.go
│   │   ├── table.go
│   │   ├── table_int_test.go
│   │   ├── table_test.go
│   │   ├── testdata/
│   │   │   ├── b1.txt
│   │   │   ├── b2.txt
│   │   │   ├── b3.txt
│   │   │   ├── b4.txt
│   │   │   ├── cj.json
│   │   │   ├── cm.json
│   │   │   ├── cr.json
│   │   │   ├── crb.json
│   │   │   ├── crd.json
│   │   │   ├── dp.json
│   │   │   ├── ds.json
│   │   │   ├── ep.json
│   │   │   ├── eps.json
│   │   │   ├── ev.json
│   │   │   ├── hpa.json
│   │   │   ├── ing.json
│   │   │   ├── job.json
│   │   │   ├── no.json
│   │   │   ├── np.json
│   │   │   ├── ns.json
│   │   │   ├── p1.json
│   │   │   ├── pdb.json
│   │   │   ├── po.json
│   │   │   ├── po_init.json
│   │   │   ├── po_sidecar.json
│   │   │   ├── pv.json
│   │   │   ├── pv_terminating.json
│   │   │   ├── pvc.json
│   │   │   ├── rb.json
│   │   │   ├── ro.json
│   │   │   ├── rs.json
│   │   │   ├── sa.json
│   │   │   ├── sc.json
│   │   │   ├── sec.json
│   │   │   ├── sts.json
│   │   │   └── svc.json
│   │   ├── types.go
│   │   └── workload.go
│   ├── slogs/
│   │   ├── child.go
│   │   └── keys.go
│   ├── tchart/
│   │   ├── component.go
│   │   ├── component_int_test.go
│   │   ├── component_test.go
│   │   ├── dot_matrix.go
│   │   ├── dot_matrix_test.go
│   │   ├── gauge.go
│   │   ├── gauge_int_test.go
│   │   ├── gauge_test.go
│   │   ├── series.go
│   │   ├── series_test.go
│   │   └── sparkline.go
│   ├── ui/
│   │   ├── action.go
│   │   ├── action_test.go
│   │   ├── app.go
│   │   ├── app_test.go
│   │   ├── config.go
│   │   ├── config_int_test.go
│   │   ├── config_test.go
│   │   ├── crumbs.go
│   │   ├── crumbs_test.go
│   │   ├── deltas.go
│   │   ├── deltas_test.go
│   │   ├── dialog/
│   │   │   ├── confirm.go
│   │   │   ├── confirm_test.go
│   │   │   ├── delete.go
│   │   │   ├── delete_test.go
│   │   │   ├── error.go
│   │   │   ├── error_test.go
│   │   │   ├── plugin_inputs.go
│   │   │   ├── prompt.go
│   │   │   ├── prompt_test.go
│   │   │   ├── restart.go
│   │   │   ├── selection.go
│   │   │   └── transfer.go
│   │   ├── flash.go
│   │   ├── flash_test.go
│   │   ├── indicator.go
│   │   ├── indicator_test.go
│   │   ├── key.go
│   │   ├── logo.go
│   │   ├── logo_test.go
│   │   ├── menu.go
│   │   ├── menu_test.go
│   │   ├── modal_list.go
│   │   ├── padding.go
│   │   ├── padding_test.go
│   │   ├── pages.go
│   │   ├── pages_test.go
│   │   ├── prompt.go
│   │   ├── prompt_test.go
│   │   ├── prompt_validation_test.go
│   │   ├── select_table.go
│   │   ├── splash.go
│   │   ├── splash_test.go
│   │   ├── table.go
│   │   ├── table_helper.go
│   │   ├── table_helper_test.go
│   │   ├── table_test.go
│   │   ├── tree.go
│   │   └── types.go
│   ├── view/
│   │   ├── actions.go
│   │   ├── actions_test.go
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── app.go
│   │   ├── app_test.go
│   │   ├── benchmark.go
│   │   ├── browser.go
│   │   ├── cluster_info.go
│   │   ├── cm.go
│   │   ├── cm_test.go
│   │   ├── cmd/
│   │   │   ├── args.go
│   │   │   ├── args_test.go
│   │   │   ├── helpers.go
│   │   │   ├── helpers_test.go
│   │   │   ├── interpreter.go
│   │   │   ├── interpreter_test.go
│   │   │   └── types.go
│   │   ├── command.go
│   │   ├── command_test.go
│   │   ├── container.go
│   │   ├── container_test.go
│   │   ├── context.go
│   │   ├── context_test.go
│   │   ├── cow.go
│   │   ├── crd.go
│   │   ├── cronjob.go
│   │   ├── details.go
│   │   ├── dir.go
│   │   ├── dir_int_test.go
│   │   ├── dir_test.go
│   │   ├── dp.go
│   │   ├── dp_test.go
│   │   ├── drain_dialog.go
│   │   ├── ds.go
│   │   ├── ds_test.go
│   │   ├── env.go
│   │   ├── env_test.go
│   │   ├── event.go
│   │   ├── exec.go
│   │   ├── group.go
│   │   ├── helm_chart.go
│   │   ├── helm_history.go
│   │   ├── help.go
│   │   ├── help_test.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── image_extender.go
│   │   ├── img_scan.go
│   │   ├── job.go
│   │   ├── live_view.go
│   │   ├── live_view_test.go
│   │   ├── log.go
│   │   ├── log_indicator.go
│   │   ├── log_indicator_test.go
│   │   ├── log_int_test.go
│   │   ├── log_test.go
│   │   ├── logger.go
│   │   ├── logs_extender.go
│   │   ├── node.go
│   │   ├── ns.go
│   │   ├── ns_test.go
│   │   ├── owner_extender.go
│   │   ├── page_stack.go
│   │   ├── pf.go
│   │   ├── pf_dialog.go
│   │   ├── pf_dialog_test.go
│   │   ├── pf_extender.go
│   │   ├── pf_extender_test.go
│   │   ├── pf_test.go
│   │   ├── picker.go
│   │   ├── pod.go
│   │   ├── pod_int_test.go
│   │   ├── pod_test.go
│   │   ├── policy.go
│   │   ├── priorityclass.go
│   │   ├── priorityclass_test.go
│   │   ├── pulse.go
│   │   ├── pvc.go
│   │   ├── pvc_test.go
│   │   ├── rbac.go
│   │   ├── rbac_test.go
│   │   ├── reference.go
│   │   ├── reference_test.go
│   │   ├── registrar.go
│   │   ├── restart_extender.go
│   │   ├── rs.go
│   │   ├── sa.go
│   │   ├── scale_extender.go
│   │   ├── screen_dump.go
│   │   ├── screen_dump_test.go
│   │   ├── secret.go
│   │   ├── secret_test.go
│   │   ├── sts.go
│   │   ├── sts_test.go
│   │   ├── svc.go
│   │   ├── svc_test.go
│   │   ├── table.go
│   │   ├── table_helper.go
│   │   ├── table_int_test.go
│   │   ├── testdata/
│   │   │   ├── fred/
│   │   │   │   └── kmanifests/
│   │   │   │       ├── cm.yaml
│   │   │   │       └── kustomization.yaml
│   │   │   ├── k1manifests/
│   │   │   │   ├── cm.yaml
│   │   │   │   └── kustomization.yml
│   │   │   ├── k2manifests/
│   │   │   │   ├── Kustomization
│   │   │   │   └── cm.yaml
│   │   │   ├── kmanifests/
│   │   │   │   ├── cm.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   └── manifests/
│   │   │       ├── cm.yaml
│   │   │       └── kustomization.yaml
│   │   ├── types.go
│   │   ├── user.go
│   │   ├── value_extender.go
│   │   ├── vul_extender.go
│   │   ├── workload.go
│   │   ├── xray.go
│   │   ├── yaml.go
│   │   └── yaml_test.go
│   ├── vul/
│   │   ├── scan.go
│   │   ├── scanner.go
│   │   ├── scorer.go
│   │   ├── scorer_test.go
│   │   ├── table.go
│   │   ├── table_test.go
│   │   ├── tally.go
│   │   ├── tally_test.go
│   │   ├── testdata/
│   │   │   ├── sort/
│   │   │   │   ├── dups/
│   │   │   │   │   ├── sc1.text
│   │   │   │   │   └── sc2.text
│   │   │   │   ├── full/
│   │   │   │   │   ├── sc1.text
│   │   │   │   │   └── sc2.text
│   │   │   │   └── no_dups/
│   │   │   │       ├── sc1.text
│   │   │   │       └── sc2.text
│   │   │   └── sort_sev/
│   │   │       ├── dups/
│   │   │       │   ├── sc1.text
│   │   │       │   └── sc2.text
│   │   │       ├── full/
│   │   │       │   ├── sc1.text
│   │   │       │   └── sc2.text
│   │   │       └── no_dups/
│   │   │           ├── sc1.text
│   │   │           └── sc2.text
│   │   └── types.go
│   ├── watch/
│   │   ├── factory.go
│   │   ├── forwarders.go
│   │   ├── forwarders_test.go
│   │   └── helper.go
│   └── xray/
│       ├── container.go
│       ├── container_test.go
│       ├── dp.go
│       ├── dp_test.go
│       ├── ds.go
│       ├── ds_test.go
│       ├── generic.go
│       ├── generic_test.go
│       ├── ns.go
│       ├── ns_test.go
│       ├── pod.go
│       ├── pod_test.go
│       ├── rs.go
│       ├── rs_test.go
│       ├── sa.go
│       ├── sa_test.go
│       ├── section.go
│       ├── sts.go
│       ├── sts_test.go
│       ├── svc.go
│       ├── svc_test.go
│       ├── testdata/
│       │   ├── cilium.json
│       │   ├── dp.json
│       │   ├── ds.json
│       │   ├── init.json
│       │   ├── ns.json
│       │   ├── po.json
│       │   ├── rs.json
│       │   ├── sa.json
│       │   ├── sts.json
│       │   └── svc.json
│       ├── tree_node.go
│       └── tree_node_test.go
├── main.go
├── plugins/
│   ├── README.md
│   ├── ai-incident-investigation.yaml
│   ├── argo-rollouts-powershell.yaml
│   ├── argo-rollouts.yaml
│   ├── argo-workflows.yaml
│   ├── argocd.yaml
│   ├── blame.yaml
│   ├── carvel.yaml
│   ├── cert-manager.yaml
│   ├── crd-wizard.yaml
│   ├── crossplane.yaml
│   ├── current-ctx-terminal.yaml
│   ├── debug-container.yaml
│   ├── dive.yaml
│   ├── dup.yaml
│   ├── duplik8s.yaml
│   ├── eks-node-viewer.yaml
│   ├── external-secrets.yaml
│   ├── flux.yaml
│   ├── get-all-namespace-resources.yaml
│   ├── get-all.yaml
│   ├── helm-default-values.yaml
│   ├── helm-diff.yaml
│   ├── helm-purge.yaml
│   ├── helm-values.yaml
│   ├── job-suspend.yaml
│   ├── k3d-root-shell.yaml
│   ├── keda-toggle.yaml
│   ├── kube-metrics.yaml
│   ├── kubectl/
│   │   └── kubectl-purge
│   ├── kubectl-get-in-shell.yaml
│   ├── kubectl-plugins/
│   │   └── kubectl-jq
│   ├── liveMigration.yaml
│   ├── log-bunyan.yaml
│   ├── log-full.yaml
│   ├── log-jq.yaml
│   ├── log-loki.yaml
│   ├── log-stern.yaml
│   ├── node-root-shell.yaml
│   ├── openssl.yaml
│   ├── pvc-debug-container.yaml
│   ├── remove-finalizers.yaml
│   ├── resource-recommendations.yaml
│   ├── rm-ns.yaml
│   ├── spark-operator.yaml
│   ├── start-alpine.yaml
│   ├── szero.yaml
│   ├── trace-dns.yaml
│   ├── vector-dev-top.yaml
│   └── watch-events.yaml
├── skins/
│   ├── axual.yaml
│   ├── black-and-wtf.yaml
│   ├── dracula.yaml
│   ├── everforest-dark.yaml
│   ├── everforest-light.yaml
│   ├── gruvbox-dark-hard.yaml
│   ├── gruvbox-dark.yaml
│   ├── gruvbox-light-hard.yaml
│   ├── gruvbox-light.yaml
│   ├── gruvbox-material-dark-hard.yaml
│   ├── gruvbox-material-dark-medium.yaml
│   ├── gruvbox-material-dark-soft.yaml
│   ├── gruvbox-material-light-hard.yaml
│   ├── gruvbox-material-light-medium.yaml
│   ├── gruvbox-material-light-soft.yaml
│   ├── in-the-navy.yaml
│   ├── kanagawa.yaml
│   ├── kiss.yaml
│   ├── monokai.yaml
│   ├── narsingh.yaml
│   ├── nightfox.yaml
│   ├── nord.yaml
│   ├── one-dark.yaml
│   ├── red.yaml
│   ├── rose-pine-dawn.yaml
│   ├── rose-pine-moon.yaml
│   ├── rose-pine.yaml
│   ├── snazzy.yaml
│   ├── solarized-16.yaml
│   ├── solarized-dark.yaml
│   ├── solarized-light.yaml
│   ├── stock.yaml
│   ├── transparent.yaml
│   └── vercel.yaml
├── snap/
│   └── snapcraft.yaml
└── testdata/
    └── aliases/
        └── aliases.yaml

================================================
FILE CONTENTS
================================================

================================================
FILE: .codebeatsettings
================================================
{
  "GOLANG": {
    "TOO_MANY_IVARS": [
      15,
      20,
      22,
      25,
    ],
    "LOC": [
      50,
      60,
      70,
      80,
    ],
    "TOTAL_LOC": [
      350,
      400,
      500,
      600
    ],
    "TOO_MANY_FUNCTIONS": [
      40,
      50,
      55,
      60,
    ],
  }
}

================================================
FILE: .dockerignore
================================================
/k8s
/change_logs
.github
.semaphore
.vscode
assets
/dist
/execs
/notes
/skins
README.md
LICENSE
cov.out
/k9s
.travis.yml

================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: [derailed]


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''

---


<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_err.png" align="right" width="100" height="auto"/>

<br/>
<br/>
<br/>

**Describe the bug**
A clear and concise description of what the bug is.

**To Reproduce**
Steps to reproduce the behavior:

1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error

**Historical Documents**
When applicable please include any supporting artifacts: k9s debug logs, configurations, resource manifests, ...

**Expected behavior**
A clear and concise description of what you expected to happen.

**Screenshots**
If applicable, add screenshots to help explain your problem.

**Versions (please complete the following information):**

- OS: [e.g. OSX]
- K9s: [e.g. 0.1.0]
- K8s: [e.g. 1.11.0]

**Additional context**
Add any other context about the problem here.


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="100" height="auto"/>

<br/>
<br/>
<br/>

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is.

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Additional context**
Add any other context or screenshots about the feature request here.


================================================
FILE: .github/dependabot.yml
================================================
---
version: 2
updates:
  - package-ecosystem: "gomod"
    directory: "/"
    schedule:
      interval: "weekly"

  # Maintain dependencies for GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: weekly

  # Maintain dependencies for docker
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: weekly


================================================
FILE: .github/workflows/lint.yml
================================================
name: K9s Lint

on:
  pull_request:
    branches: [ master ]

jobs:
  golangci:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v6.0.2

      - name: Install Go
        uses: actions/setup-go@v6.3.0
        with:
          go-version-file: go.mod
          cache-dependency-path: go.sum

      - name: Lint
        uses: golangci/golangci-lint-action@v9.2.0
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          version: v2.6

================================================
FILE: .github/workflows/stales-issues.yml
================================================
name: Closeout Stale Issues
on:
  schedule:
    - cron: "0 2 * * *"

jobs:
  close-issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: actions/stale@v10
        with:
          days-before-issue-stale: 30
          days-before-issue-close: 14
          stale-issue-label: "stale"
          stale-issue-message: "This issue is stale because it has been open for 30 days with no activity."
          close-issue-message: "This issue was closed because it has been inactive for 14 days since being marked as stale."
          repo-token: ${{ secrets.GITHUB_TOKEN }}

================================================
FILE: .github/workflows/stales-prs.yml
================================================
name: Closeout Stale PRs
on:
  schedule:
    - cron: "0 2 * * *"

jobs:
  close-issues:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    steps:
      - uses: actions/stale@v10
        with:
          days-before-pr-stale: 30
          days-before-pr-close: 14
          stale-pr-label: "stale"
          stale-pr-message: "This PR is stale because it has been open for 30 days with no activity."
          close-pr-message: "This PR was closed because it has been inactive for 14 days since being marked as stale."
          repo-token: ${{ secrets.GITHUB_TOKEN }}

================================================
FILE: .github/workflows/test.yml
================================================
name: K9s Test

on:
  workflow_dispatch:
    push:
    branches:
      - master
    tags:
      - rc*
      - v*
  pull_request:
    branches:
      - master
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Code
        uses: actions/checkout@v6.0.2

      - name: Install Go
        uses: actions/setup-go@v6.3.0
        with:
          go-version-file: go.mod
          cache-dependency-path: go.sum

      - name: Setup GO env
        run: go env -w CGO_ENABLED=0

      - name: Run Tests
        run: make test
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}


================================================
FILE: .gitignore
================================================
.vscode
*.out
.idea
.envrc
cov.out
execs
/k9s
/k8s
dist
notes
vendor
go.mod1
go.mod2
gen.sh
*.test
*.log
*~
pod1.go
.project
faas
.settings/*
demos
/code
kind
*.snap
/stresser
__debug_bin*
fg.yaml

================================================
FILE: .golangci.yml
================================================
version: "2"

run:
  allow-parallel-runners: true

  # timeout for analysis, e.g. 30s, 5m, default is 1m
  timeout: 5m

  # exit code when at least one issue was found, default is 1
  issues-exit-code: 1
  tests: true

linters:
  disable:
    - staticcheck
  enable:
    - sloglint
    - bodyclose
    - copyloopvar
    - depguard
    - errcheck
    - errorlint
    - gocheckcompilerdirectives
    - gocritic
    - godox
    - goprintffuncname
    - gosec
    - govet
    - intrange
    - ineffassign
    - misspell
    - noctx
    - nolintlint
    - revive
    - staticcheck
    - testifylint
    - unconvert
    - unparam
    - unused
    - whitespace
    - gocyclo
    - funlen
    - goconst
    - dogsled
    - lll

  settings:
    dogsled:
      max-blank-identifiers: 3

    gosec:
      excludes:
        - G109
        - G115
        - G204
        - G303

    sloglint:
      no-mixed-args: true
      kv-only: true
      attr-only: false
      no-global: ""
      context: ""
      static-msg: false
      no-raw-keys: true
      key-naming-case: camel
      forbidden-keys:
        - time
        - level
        - msg
        - source
      args-on-sep-lines: false

    depguard:
      rules:
        logger:
          deny:
            # logging is allowed only by logutils.Log,
            - pkg: "github.com/sirupsen/logrus"
              desc: logging is allowed only by logutils.Log.
            - pkg: "github.com/pkg/errors"
              desc: Should be replaced by standard lib errors package.
            - pkg: "github.com/instana/testify"
              desc: It's a fork of github.com/stretchr/testify.
          files:
            - "!**/pkg/logutils/**.go"

    dupl:
      threshold: 100

    funlen:
      lines: -1
      statements: 60

    goconst:
      min-len: 2
      min-occurrences: 3
      ignore-string-values:
        - blee
        - duh
        - cl-1
        - ct-1-1

    gocritic:
      enabled-tags:
        - diagnostic
        - experimental
        - opinionated
        - performance
        - style
      disabled-checks:
        - dupImport # https://github.com/go-critic/go-critic/issues/845
        - ifElseChain
        - octalLiteral
        - whyNoLint

    gocyclo:
      min-complexity: 35

    godox:
      keywords:
        - FIXME

    mnd:
      checks:
        - argument
        - case
        - condition
        - return
      ignored-numbers:
        - '0'
        - '1'
        - '2'
        - '3'
      ignored-functions:
        - strings.SplitN

    govet:
      settings:
        printf:
          funcs:
            - (github.com/golangci/golangci-lint/v2/pkg/logutils.Log).Infof
            - (github.com/golangci/golangci-lint/v2/pkg/logutils.Log).Warnf
            - (github.com/golangci/golangci-lint/v2/pkg/logutils.Log).Errorf
            - (github.com/golangci/golangci-lint/v2/pkg/logutils.Log).Fatalf
      enable:
        - nilness
        - shadow

    errorlint:
      asserts: false

    lll:
      line-length: 170

    misspell:
      locale: US
      ignore-rules:
        - "importas"

    nolintlint:
      allow-unused: false
      require-explanation: false
      require-specific: true

    revive:
      rules:
        - name: indent-error-flow
        - name: unexported-return
          disabled: true
        - name: unused-parameter
        - name: unused-receiver

  exclusions:
    presets:
      - comments
      - std-error-handling
      - common-false-positives
      - legacy
    paths:
      - test/testdata_etc # test files
      - internal/go # extracted from Go code
      - internal/x # extracted from x/tools code
      - pkg/goformatters/gci/internal # extracted from gci code
      - pkg/goanalysis/runner_checker.go # extracted from x/tools code
    rules:
      - path: (.+)_test\.go
        linters:
          - dupl
          - mnd
          - lll

      # Based on existing code, the modifications should be limited to make maintenance easier.
      - path: pkg/golinters/unused/unused.go
        linters: [gocritic]
        text: "rangeValCopy: each iteration copies 160 bytes \\(consider pointers or indexing\\)"

      # Related to the result of computation but divided multiple times by 1024.
      - path: test/bench/bench_test.go
        linters: [gosec]
        text: "G115: integer overflow conversion uint64 -> int"

      # The files created during the tests don't need to be secured.
      - path: scripts/website/expand_templates/linters_test.go
        linters: [gosec]
        text: "G306: Expect WriteFile permissions to be 0600 or less"

      # Related to migration command.
      - path: pkg/commands/internal/migrate/two/
        linters:
          - lll

      # Related to migration command.
      - path: pkg/commands/internal/migrate/
        linters:
          - gocritic
        text: "hugeParam:"

      # The codes are close but this is not duplication.
      - path: pkg/commands/(formatters|linters).go
        linters:
          - dupl

formatters:
  enable:
    - gci
    - gofmt
    - goimports
  settings:
    gofmt:
      rewrite-rules:
        - pattern: 'interface{}'
          replacement: 'any'
    goimports:
      local-prefixes:
        - github.com/golangci/golangci-lint/v2
  exclusions:
    paths:
      - test/testdata_etc # test files
      - internal/go # extracted from Go code
      - internal/x # extracted from x/tools code
      - pkg/goformatters/gci/internal # extracted from gci code
      - pkg/goanalysis/runner_checker.go # extracted from x/tools code


================================================
FILE: .goreleaser.yml
================================================
version: 2

project_name: k9s

before:
  hooks:
    - go mod download
    - go generate ./...

release:
  prerelease: false

env:
  - CGO_ENABLED=0

builds:
  - id: linux
    goos:
      - linux
    goarch:
      - amd64
      - arm64
      - arm
      - ppc64le
      - s390x
    goarm:
      - 7
    flags:
      - -trimpath
    ldflags:
      - -s -w -X github.com/derailed/k9s/cmd.version=v{{.Version}}
      - -s -w -X github.com/derailed/k9s/cmd.commit={{.Commit}}
      - -s -w -X github.com/derailed/k9s/cmd.date={{.Date}}

  - id: freebsd
    goos:
      - freebsd
    goarch:
      - amd64
      - arm64
    goarm:
      - 7
    flags:
      - -trimpath
    ldflags:
      - -s -w -X github.com/derailed/k9s/cmd.version=v{{.Version}}
      - -s -w -X github.com/derailed/k9s/cmd.commit={{.Commit}}
      - -s -w -X github.com/derailed/k9s/cmd.date={{.Date}}

  - id: osx
    goos:
      - darwin
    goarch:
      - amd64
      - arm64
    flags:
      - -trimpath
    ldflags:
      - -s -w -X github.com/derailed/k9s/cmd.version=v{{.Version}}
      - -s -w -X github.com/derailed/k9s/cmd.commit={{.Commit}}
      - -s -w -X github.com/derailed/k9s/cmd.date={{.Date}}

  - id: windows
    goos:
      - windows
    goarch:
      - amd64
      - arm64
    flags:
      - -trimpath
    ldflags:
      - -s -w -X github.com/derailed/k9s/cmd.version=v{{.Version}}
      - -s -w -X github.com/derailed/k9s/cmd.commit={{.Commit}}
      - -s -w -X github.com/derailed/k9s/cmd.date={{.Date}}

archives:
  - name_template: >-
      {{ .ProjectName }}_
      {{- title .Os }}_
      {{- if eq .Arch "amd64" }}amd64
      {{- else if eq .Arch "386" }}i386
      {{- else }}{{ .Arch }}{{ end }}
      {{- if .Arm }}v{{ .Arm }}{{ end }}
    format_overrides:
      - goos: windows
        formats: ["zip"]

checksum:
  name_template: "checksums.sha256"

snapshot:
  version_template: "{{ .Tag }}-next"

changelog:
  sort: asc
  filters:
    exclude:
      - "^docs:"
      - "^test:"

brews:
  - name: k9s
    repository:
      owner: derailed
      name: homebrew-k9s
    commit_author:
      name: derailed
      email: fernand@imhotep.io
    directory: Formula
    homepage: https://k9scli.io/
    description: Kubernetes CLI To Manage Your Clusters In Style!
    test: |
      system "k9s version"

nfpms:
  - file_name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}'
    maintainer: Fernand Galiana
    homepage: https://k9scli.io
    description: Kubernetes CLI To Manage Your Clusters In Style!
    license: "Apache-2.0"
    formats:
      - deb
      - rpm
      - apk
    bindir: /usr/bin
    section: utils
    contents:
      - src: ./LICENSE
        dst: /usr/share/doc/k9s/copyright
        file_info:
          mode: 0644

sboms:
  - artifacts: archive

================================================
FILE: .semaphore/semaphore.yml
================================================
version: v1.0
name: First pipeline example
agent:
  machine:
    type: e1-standard-2
    os_image: ubuntu1804

blocks:
  - name: "Build"
    task:
      env_vars:
        - name: APP_ENV
          value: prod
      jobs:
      - name: Docker build
        commands:
          - checkout
          - ls -1
          - echo $APP_ENV
          - echo "Docker build..."
          - echo "done"

  - name: "Smoke tests"
    task:
      jobs:
      - name: Smoke
        commands:
          - checkout
          - echo "make smoke"

  - name: "Unit tests"
    task:
      jobs:
      - name: RSpec
        commands:
          - checkout
          - echo "make rspec"

      - name: Lint code
        commands:
          - checkout
          - echo "make lint"

      - name: Check security
        commands:
          - checkout
          - echo "make security"

  - name: "Integration tests"
    task:
      jobs:
      - name: Cucumber
        commands:
          - checkout
          - echo "make cucumber"

  - name: "Push Image"
    task:
      jobs:
      - name: Push
        commands:
          - checkout
          - echo "make docker.push"


================================================
FILE: .travis.yml
================================================
language: go
go_import_path: github.com/derailed/k9s
go:
  - "1.23"

jobs:
  include:
  - os: linux
    arch: amd64
  - os: linux
    arch: ppc64le
  - os: osx
    arch: amd64

dist: trusty
sudo: false

install: true

script:
  - go build
  - go test ./...


================================================
FILE: CNAME
================================================
k9scli.io

================================================
FILE: COPYING
================================================
   Copyright © 2019, Imhotep Software LLC <fernand@imhotep.io> and other contributors.

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: Dockerfile
================================================
# -----------------------------------------------------------------------------
# The base image for building the k9s binary
FROM --platform=$BUILDPLATFORM golang:1.25.5-alpine3.21 AS build

ARG TARGETOS
ARG TARGETARCH
ENV GOOS=$TARGETOS
ENV GOARCH=$TARGETARCH

WORKDIR /k9s
COPY go.mod go.sum main.go Makefile ./
COPY internal internal
COPY cmd cmd
RUN apk --no-cache add --update make libx11-dev git gcc libc-dev curl \
  && make build

# -----------------------------------------------------------------------------
# Build the final Docker image
FROM --platform=$BUILDPLATFORM alpine:3.23.3
ARG KUBECTL_VERSION="v1.32.2"

COPY --from=build /k9s/execs/k9s /bin/k9s
RUN apk --no-cache add --update ca-certificates \
  && apk --no-cache add --update -t deps curl vim \
  && TARGET_ARCH=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \
  && curl -f -L https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${TARGET_ARCH}/kubectl -o /usr/local/bin/kubectl \
  && chmod +x /usr/local/bin/kubectl \
  && apk del --purge deps

ENTRYPOINT [ "/bin/k9s" ]


================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS


================================================
FILE: Makefile
================================================
NAME            := k9s
VERSION         ?= v0.50.18
PACKAGE         := github.com/derailed/$(NAME)
OUTPUT_BIN      ?= execs/${NAME}
GO_FLAGS        ?=
GO_TAGS	        ?= netgo
CGO_ENABLED     ?=0
GIT_REV         ?= $(shell git rev-parse --short HEAD)

IMG_NAME        := derailed/k9s
IMAGE           := ${IMG_NAME}:${VERSION}
BUILD_PLATFORMS ?= linux/amd64,linux/arm64

SOURCE_DATE_EPOCH ?= $(shell date +%s)
ifeq ($(shell uname), Darwin)
DATE            ?= $(shell TZ=UTC /bin/date -j -f "%s" ${SOURCE_DATE_EPOCH} +"%Y-%m-%dT%H:%M:%SZ")
else
DATE            ?= $(shell date -u -d @${SOURCE_DATE_EPOCH} +"%Y-%m-%dT%H:%M:%SZ")
endif

default: help

test:                    ## Run all tests
	@go clean --testcache && go test ./...

cover:                   ## Run test coverage suite
	@go test ./... --coverprofile=cov.out
	@go tool cover --html=cov.out

build:                   ## Builds the CLI
	@CGO_ENABLED=${CGO_ENABLED} go build ${GO_FLAGS} \
	-ldflags "-w -s -X ${PACKAGE}/cmd.version=${VERSION} -X ${PACKAGE}/cmd.commit=${GIT_REV} -X ${PACKAGE}/cmd.date=${DATE}" \
	-a -tags=${GO_TAGS} -o ${OUTPUT_BIN} main.go

kubectl-stable-version:  ## Get kubectl latest stable version
	@curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt

imgx:                    ## Build Docker Image
	@docker buildx build --platform ${BUILD_PLATFORMS} --rm -t ${IMAGE} --load .

pushx:                   ## Push Docker image to registry
	@docker buildx build --platform ${BUILD_PLATFORMS} --rm -t ${IMAGE} --push .

help:
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":[^:]*?## "}; {printf "\033[38;5;69m%-30s\033[38;5;38m %s\033[0m\n", $$1, $$2}'


================================================
FILE: README.md
================================================
<img src="assets/k9s.png" alt="k9s">

## K9s - Kubernetes CLI To Manage Your Clusters In Style!

K9s provides a terminal UI to interact with your Kubernetes clusters.
The aim of this project is to make it easier to navigate, observe and manage
your applications in the wild. K9s continually watches Kubernetes
for changes and offers subsequent commands to interact with your observed resources.

---

## Note...

K9s is not pimped out by a big corporation with deep pockets.
It is a complex OSS project that demands a lot of my time to maintain and support.
K9s will always remain OSS and therefore free! That said, if you feel k9s makes your day to day Kubernetes journey a tad brighter, saves you time and makes you more productive, please consider [sponsoring us!](https://github.com/sponsors/derailed)
Your donations will go a long way in keeping our servers lights on and beers in our fridge!

**Thank you!**

---

[![Go Report Card](https://goreportcard.com/badge/github.com/derailed/k9s?)](https://goreportcard.com/report/github.com/derailed/k9s)
[![golangci badge](https://github.com/golangci/golangci-web/blob/master/src/assets/images/badge_a_plus_flat.svg)](https://golangci.com/r/github.com/derailed/k9s)
[![Docker Pulls](https://img.shields.io/docker/pulls/derailed/k9s.svg?maxAge=604800)](https://hub.docker.com/r/derailed/k9s/)
[![release](https://img.shields.io/github/release-pre/derailed/k9s.svg)](https://github.com/derailed/k9s/releases)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/mum4k/termdash/blob/master/LICENSE)
[![Releases](https://img.shields.io/github/downloads/derailed/k9s/total.svg)](https://github.com/derailed/k9s/releases)

---

## Screenshots

1. Pods
      <img src="assets/screen_po.png"/>
2. Logs
      <img src="assets/screen_logs.png"/>
3. Deployments
      <img src="assets/screen_dp.png"/>

---

## Demo Videos/Recordings

* [K9s v0.40.0 -Column Blow- Sneak peek](https://youtu.be/iy6RDozAM4A)
* [K9s v0.31.0 Configs+Sneak peek](https://youtu.be/X3444KfjguE)
* [K9s v0.30.0 Sneak peek](https://youtu.be/mVBc1XneRJ4)
* [Vulnerability Scans](https://youtu.be/ULkl0MsaidU)
* [K9s v0.29.0](https://youtu.be/oiU3wmoAkBo)
* [K9s v0.21.3](https://youtu.be/wG8KCwDAhnw)
* [K9s v0.19.X](https://youtu.be/kj-WverKZ24)
* [K9s v0.18.0](https://www.youtube.com/watch?v=zMnD5e53yRw)
* [K9s v0.17.0](https://www.youtube.com/watch?v=7S33CNLAofk&feature=youtu.be)
* [K9s Pulses](https://asciinema.org/a/UbXKPal6IWpTaVAjBBFmizcGN)
* [K9s v0.15.1](https://youtu.be/7Fx4XQ2ftpM)
* [K9s v0.13.0](https://www.youtube.com/watch?v=qaeR2iK7U0o&t=15s)
* [K9s v0.9.0](https://www.youtube.com/watch?v=bxKfqumjW4I)
* [K9s v0.7.0 Features](https://youtu.be/83jYehwlql8)
* [K9s v0 Demo](https://youtu.be/k7zseUhaXeU)

---

## Documentation

Please refer to our [K9s documentation](https://k9scli.io) site for installation, usage, customization and tips.

---

## Slack Channel

Wanna discuss K9s features with your fellow `K9sers` or simply show your support for this tool?

* Channel: [K9sersSlack](https://k9sers.slack.com/)
* Invite: [K9slackers Invite](https://join.slack.com/t/k9sers/shared_invite/zt-3360a389v-ElLHrb0Dp1kAXqYUItSAFA)

---

## Installation

K9s is available on Linux, macOS and Windows platforms.
Binaries for Linux, Windows and Mac are available as tarballs in the [release page](https://github.com/derailed/k9s/releases).

* Via [Homebrew](https://brew.sh/) for macOS or Linux

   ```shell
   brew install derailed/k9s/k9s
   ```

* Via [MacPorts](https://www.macports.org)

   ```shell
   sudo port install k9s
   ```

* Via [snap](https://snapcraft.io/k9s) for Linux

  ```shell
  snap install k9s --devmode
  ```

* On Arch Linux

  ```shell
  pacman -S k9s
  ```

* On OpenSUSE Linux distribution

  ```shell
  zypper install k9s
  ```

* On FreeBSD

  ```shell
  pkg install k9s
  ```

* On Ubuntu

  ```shell
  wget https://github.com/derailed/k9s/releases/latest/download/k9s_linux_amd64.deb && sudo apt install ./k9s_linux_amd64.deb && rm k9s_linux_amd64.deb
  ```

* On Fedora (42+)

  ```shell
  dnf install k9s
  ```

* Via [Winget](https://github.com/microsoft/winget-cli) for Windows

  ```shell
  winget install k9s
  ```

* Via [Scoop](https://scoop.sh) for Windows

  ```shell
  scoop install k9s
  ```

* Via [Chocolatey](https://chocolatey.org/packages/k9s) for Windows

  ```shell
  choco install k9s
  ```

* Via a GO install

  ```shell
  # NOTE: The dev version will be in effect!
  go install github.com/derailed/k9s@latest
  ```

* Via [Webi](https://webinstall.dev) for Linux and macOS

  ```shell
  curl -sS https://webinstall.dev/k9s | bash
  ```

* Via [pkgx](https://pkgx.dev/pkgs/k9scli.io/) for Linux and macOS

  ```shell
  pkgx k9s
  ```

* Via [gah](https://github.com/marverix/gah) for Linux and macOS

  ```shell
  gah install k9s
  ```

* Via [Webi](https://webinstall.dev) for Windows

  ```shell
  curl.exe -A MS https://webinstall.dev/k9s | powershell
  ```

* As a [Docker Desktop Extension](https://docs.docker.com/desktop/extensions/) (for the Docker Desktop built in Kubernetes Server)

  ```shell
  docker extension install spurin/k9s-dd-extension:latest
  ```

---

## Building From Source

 K9s is currently using GO v1.23.X or above.
 In order to build K9s from source you must:

 1. Clone the repo
 2. Build and run the executable

      ```shell
      make build && ./execs/k9s
      ```

---

## Running with Docker

### Running the official Docker image

  You can run k9s as a Docker container by mounting your `KUBECONFIG`:

  ```shell
  docker run --rm -it -v $KUBECONFIG:/root/.kube/config derailed/k9s
  ```

  For default path it would be:

  ```shell
  docker run --rm -it -v ~/.kube/config:/root/.kube/config derailed/k9s
  ```

### Building your own Docker image

  You can build your own Docker image of k9s from the [Dockerfile](Dockerfile) with the following:

  ```shell
  docker build -t k9s-docker:v0.0.1 .
  ```

  You can get the latest stable `kubectl` version and pass it to the `docker build` command with the `--build-arg` option.
  You can use the `--build-arg` option to pass any valid `kubectl` version (like `v1.18.0` or `v1.19.1`).

  ```shell
  KUBECTL_VERSION=$(make kubectl-stable-version 2>/dev/null)
  docker build --build-arg KUBECTL_VERSION=${KUBECTL_VERSION} -t k9s-docker:0.1 .
  ```

  Run your container:

  ```shell
  docker run --rm -it -v ~/.kube/config:/root/.kube/config k9s-docker:0.1
  ```

---

## PreFlight Checks

* K9s uses 256 colors terminal mode. On `Nix system make sure TERM is set accordingly.

    ```shell
    export TERM=xterm-256color
    ```

* In order to issue resource edit commands make sure your EDITOR and KUBE_EDITOR env vars are set.

    ```shell
    # Kubectl edit command will use this env var.
    export KUBE_EDITOR=my_fav_editor
    ```

* K9s prefers recent kubernetes versions ie 1.28+

---

## K8S Compatibility Matrix

|         k9s        | k8s client |
| ------------------ | ---------- |
|     >= v0.27.0     |   1.26.1   |
| v0.26.7 - v0.26.6  |   1.25.3   |
| v0.26.5 - v0.26.4  |   1.25.1   |
| v0.26.3 - v0.26.1  |   1.24.3   |
| v0.26.0 - v0.25.19 |   1.24.2   |
| v0.25.18 - v0.25.3 |   1.22.3   |
| v0.25.2 - v0.25.0  |   1.22.0   |
|      <= v0.24      |   1.21.3   |

---

## The Command Line

```shell
# List current version
k9s version

# To get info about K9s runtime (logs, configs, etc..)
k9s info

# List all available CLI options
k9s help

# To run K9s in a given namespace
k9s -n mycoolns

# Start K9s in an existing KubeConfig context
k9s --context coolCtx

# Start K9s in readonly mode - with all cluster modification commands disabled
k9s --readonly
```

## Logs And Debug Logs

Given the nature of the ui k9s does produce logs to a specific location.
To view the logs and turn on debug mode, use the following commands:

```shell
# Find out where the logs are stored
k9s info
```

```text
 ____  __.________
|    |/ _/   __   \______
|      < \____    /  ___/
|    |  \   /    /\___ \
|____|__ \ /____//____  >
        \/            \/

Version:           vX.Y.Z
Config:            /Users/fernand/.config/k9s/config.yaml
Logs:              /Users/fernand/.local/state/k9s/k9s.log
Dumps dir:         /Users/fernand/.local/state/k9s/screen-dumps
Benchmarks dir:    /Users/fernand/.local/state/k9s/benchmarks
Skins dir:         /Users/fernand/.local/share/k9s/skins
Contexts dir:      /Users/fernand/.local/share/k9s/clusters
Custom views file: /Users/fernand/.local/share/k9s/views.yaml
Plugins file:      /Users/fernand/.local/share/k9s/plugins.yaml
Hotkeys file:      /Users/fernand/.local/share/k9s/hotkeys.yaml
Alias file:        /Users/fernand/.local/share/k9s/aliases.yaml
```

### View K9s logs

```shell
tail -f /Users/fernand/.local/data/k9s/k9s.log
```

### Start K9s in debug mode

```shell
k9s -l debug
```

### Customize logs destination

You can override the default log file destination either with the `--logFile` argument:

```shell
k9s --logFile /tmp/k9s.log
less /tmp/k9s.log
```

Or through the `K9S_LOGS_DIR` environment variable:

```shell
K9S_LOGS_DIR=/var/log k9s
less /var/log/k9s.log
```

## Key Bindings

K9s uses aliases to navigate most K8s resources.

| Action                                                                          | Command                       | Comment                                                                |
|---------------------------------------------------------------------------------|-------------------------------|------------------------------------------------------------------------|
| Show active keyboard mnemonics and help                                         | `?`                           |                                                                        |
| Show all available resource alias                                               | `ctrl-a`                      |                                                                        |
| To bail out of K9s                                                              | `:quit`, `:q`, `ctrl-c`       |                                                                        |
| To go up/back to the previous view                                              | `esc`                         | If you have crumbs on, this will go to the previous one                |
| View a Kubernetes resource using singular/plural or short-name                  | `:`pod⏎                       | accepts singular, plural, short-name or alias ie pod or pods           |
| View a Kubernetes resource in a given namespace                                 | `:`pod ns-x⏎                  |                                                                        |
| View filtered pods (New v0.30.0!)                                               | `:`pod /fred⏎                 | View all pods filtered by fred                                         |
| View labeled pods (New v0.30.0!)                                                | `:`pod app=fred,env=dev⏎      | View all pods with labels matching app=fred and env=dev                |
| View pods in a given context (New v0.30.0!)                                     | `:`pod @ctx1⏎                 | View all pods in context ctx1. Switches out your current k9s context!  |
| Filter out a resource view given a filter                                       | `/`filter⏎                    | Regex2 supported ie `fred|blee` to filter resources named fred or blee |
| Inverse regex filter                                                            | `/`! filter⏎                  | Keep everything that *doesn't* match.                                  |
| Filter resource view by labels                                                  | `/`-l label-selector⏎         |                                                                        |
| Fuzzy find a resource given a filter                                            | `/`-f filter⏎                 |                                                                        |
| Bails out of view/command/filter mode                                           | `<esc>`                       |                                                                        |
| To view and switch to another Kubernetes context (Pod view)                     | `:`ctx⏎                       |                                                                        |
| To view and switch directly to another Kubernetes context (Last used view)      | `:`ctx context-name⏎          |                                                                        |
| To view and switch to another Kubernetes namespace                              | `:`ns⏎                        |                                                                        |
| To switch back to the last active command (like how "cd -" works)               | `-`                           | Navigation that adds breadcrumbs to the bottom are not commands        |
| To go back and forward through the command history                              | back: `[`, forward: `]`       | Same as above                                                          |
| To view all saved resources                                                     | `:`screendump or sd⏎          |                                                                        |
| To delete a resource (TAB and ENTER to confirm)                                 | `ctrl-d`                      |                                                                        |
| To kill a resource (no confirmation dialog, equivalent to kubectl delete --now) | `ctrl-k`                      |                                                                        |
| Launch pulses view                                                              | `:`pulses or pu⏎              |                                                                        |
| Launch XRay view                                                                | `:`xray RESOURCE [NAMESPACE]⏎  | RESOURCE can be one of po, svc, dp, rs, sts, ds, NAMESPACE is optional |
| Launch Popeye view                                                              | `:`popeye or pop⏎              | See [popeye](#popeye)                                                  |
| Mark resource                                                                   | `space`                        |                                                                        |
| Mark range of resources                                                         | `ctrl-space`                   |                                                                        |
| Clear all marks                                                                 | `ctrl-\`                       |                                                                        |
| Save resources to file                                                          | `ctrl-s`                       |                                                                        |
| Toggle faults/error display                                                     | `ctrl-z`                       |                                                                        |
| Toggle wide columns                                                             | `ctrl-w`                       |                                                                        |
| Toggle header                                                                   | `ctrl-e`                       |                                                                        |
| Toggle breadcrumbs                                                              | `ctrl-g`                       |                                                                        |
| Move selected column left                                                       | `shift-left arrow`             |                                                                        |
| Move selected column right                                                      | `shift-right arrow`            |                                                                        |
| Sort by selected column                                                         | `shift-o`                      |                                                                        |
| Sort by Name                                                                    | `shift-n`                      |                                                                        |
| Sort by Age                                                                     | `shift-a`                      |                                                                        |
| Sort by Namespace                                                               | `shift-p`                      | Only when viewing all namespaces                                       |
| Sort by Status                                                                  | `shift-s`                      |                                                                        |
| Copy resource name                                                              | `c`                            |                                                                        |
| Copy namespace                                                                  | `n`                            |                                                                        |
| View YAML                                                                       | `y`                            |                                                                        |
| View logs                                                                       | `l`                            | Resource specific                                                      |
| View previous logs                                                              | `p`                            | Resource specific                                                      |
| Shell into container                                                            | `s`                            | Pods only                                                              |
| Attach to container                                                             | `a`                            | Pods only                                                              |
| Describe resource                                                               | `d`                            |                                                                        |
| Edit resource                                                                   | `e`                            | Not available in read-only mode                                        |
| Show port-forwards                                                              | `f`                            | Pods/Services/Containers                                               |
| Port forward                                                                    | `shift-f`                      | Pods/Services/Containers                                               |
| Warp to namespace                                                               | `w`                            | When namespace column is available                                     |
| Jump to owner                                                                   | `shift-j`                      | When resource has an owner                                             |
| Use/switch namespace                                                            | `u`                            | Namespace view                                                         |
| UsedBy (show resources using this)                                              | `u`                            | ServiceAccounts/PVCs/Secrets/ConfigMaps                                |
| Benchmark (run/stop)                                                            | `b`                            | Services/Port-forwards                                                 |
| Toggle text wrap                                                                | `w`                            | Log view                                                               |
| Toggle timestamp                                                                | `t`                            | Log view                                                               |
| Toggle fullscreen                                                               | `f`                            | Log/YAML/Details view                                                  |
| Refresh/reload view                                                             | `ctrl-r`                       |                                                                        |
| Trigger (CronJob)                                                               | `t`                            | CronJob view                                                           |
| Cordon/Uncordon node                                                            | `u`                            | Node view                                                              |
| Drain node                                                                      | `r`                            | Node view                                                              |
| Restart resource                                                                | `r`                            | Deployments/DaemonSets/StatefulSets                                    |
| Rollback resource                                                               | `ctrl-l`                       | ReplicaSets                                                            |
| View ReplicaSets                                                                | `z`                            | Deployment view                                                        |

---

## K9s Configuration

  K9s keeps its configurations as YAML files inside of a `k9s` directory and the location depends on your operating system. K9s leverages [XDG](https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html) to load its various configurations files. For information on the default locations for your OS please see [this link](https://github.com/adrg/xdg/blob/master/README.md). If you are still confused a quick `k9s info` will reveal where k9s is loading its configurations from. Alternatively, you can set `K9S_CONFIG_DIR` to tell K9s the directory location to pull its configurations from.

  | Unix            | macOS                              | Windows               |
  |-----------------|------------------------------------|-----------------------|
  | `~/.config/k9s` | `~/Library/Application Support/k9s` | `%LOCALAPPDATA%\k9s`  |

  > NOTE: This is still in flux and will change while in pre-release stage!

You can now override the context portForward default address configuration by setting an env variable that can override all clusters portForward local address using `K9S_DEFAULT_PF_ADDRESS=a.b.c.d`

  ```yaml
  # $XDG_CONFIG_HOME/k9s/config.yaml
  k9s:
    # Enable periodic refresh of resource browser windows. Default false
    liveViewAutoRefresh: false
    # !!New!! v0.50.8...
    # Extends the list of supported GPU vendors. The key is the vendor name, the value must correspond to k8s resource driver designation.
    # Default known GPU vendors:
    # nvidia: nvidia.com/gpu
	  # nvidia-shared: nvidia.com/gpu.shared
	  # amd: amd.com/gpu
	  # intel: gpu.intel.com/i915
    gpuVendors:
      bozo: bozo/gpu  # extends the gpu vendor and add "bozo"
    # The path to screen dump. Default: '%temp_dir%/k9s-screens-%username%' (k9s info)
    screenDumpDir: /tmp/dumps
    # Represents ui poll intervals in seconds. Default 2.0 secs. Minimum value is 2.0 - values below will be capped to the minimum.
    refreshRate: 2
    # Overrides the default k8s api server requests timeout. Defaults 120s
    apiServerTimeout: 15s
    # Number of retries once the connection to the api-server is lost. Default 15.
    maxConnRetry: 5
    # Indicates whether modification commands like delete/kill/edit are disabled. Default is false
    readOnly: false
    # This setting allows users to specify the default view, but it is not set by default.
    defaultView: ""
    # Toggles whether k9s should exit when CTRL-C is pressed. When set to true, you will need to exit k9s via the :quit command. Default is false.
    noExitOnCtrlC: false
    #UI settings
    ui:
      # Enable mouse support. Default false
      enableMouse: false
      # Set to true to hide K9s header. Default false
      headless: false
      # Set to true to hide the K9S logo Default false
      logoless: false
      # Set to true to hide K9s crumbs. Default false
      crumbsless: false
      # Set to true to suppress the K9s splash screen on start. Default false. Note that for larger clusters or higher latency connections, there may be no resources visible initially until local caches have finished populating.
      splashless: false
      # Toggles icons display as not all terminal support these chars. Default: true
      noIcons: false
      # Toggles reactive UI. This option provide for watching on disk artifacts changes and update the UI live Defaults to false.
      reactive: false
      # By default all contexts will use the dracula skin unless explicitly overridden in the context config file.
      skin: dracula # => assumes the file skins/dracula.yaml is present in the  $XDG_DATA_HOME/k9s/skins directory. Can be overriden with K9S_SKIN.
      # Convert dark skins to light, or vice versa, preserving hue. Default: false
      invert: false
      # Allows to set certain views default fullscreen mode. (yaml, helm history, describe, value_extender, details, logs) Default false
      defaultsToFullScreen: false
      # Show full resource GVR (Group/Version/Resource) vs just R. Default: false.
      useFullGVRTitle: false
    # Toggles icons display as not all terminal support these chars.
    noIcons: false
    # Toggles whether k9s should check for the latest revision from the GitHub repository releases. Default is false.
    skipLatestRevCheck: false
    # When altering kubeconfig or using multiple kube configs, k9s will clean up clusters configurations that are no longer in use. Setting this flag to true will keep k9s from cleaning up inactive cluster configs. Defaults to false.
    keepMissingClusters: false
    # Logs configuration
    logger:
      # Defines the number of lines to return. Default 100
      tail: 200
      # Defines the total number of log lines to allow in the view. Default 1000
      buffer: 500
      # Represents how far to go back in the log timeline in seconds. Setting to -1 will tail logs. Default is -1.
      sinceSeconds: 300 # => tail the last 5 mins.
      # Toggles log line wrap. Default false
      textWrap: false
      # Autoscroll in logs will be disabled. Default is false.
      disableAutoscroll: false
      # Enable column locking when autoscroll is enabled. Default is false.
      columnLock: false
      # Toggles log line timestamp info. Default false
      showTime: false
    # Provide shell pod customization when nodeShell feature gate is enabled!
    shellPod:
      # The shell pod image to use.
      image: killerAdmin
      # The namespace to launch to shell pod into.
      namespace: default
      # The resource limit to set on the shell pod.
      limits:
        cpu: 100m
        memory: 100Mi
      # Enable TTY
      tty: true
      hostPathVolume:
      - name: docker-socket
        # Mount the Docker socket into the shell pod
        mountPath: /var/run/docker.sock
        # The path on the host to mount
        hostPath: /var/run/docker.sock
        readOnly: true
  ```

---

## <a id="popeye"></a>Popeye Configuration

K9s has integration with [Popeye](https://popeyecli.io/), which is a Kubernetes cluster sanitizer.  Popeye itself uses a configuration called `spinach.yml`, but when integrating with K9s the cluster-specific file should be name `$XDG_CONFIG_HOME/share/k9s/clusters/clusterX/contextY/spinach.yml`.  This allows you to have a different spinach config per cluster.

---

## Node Shell

By enabling the nodeShell feature gate on a given cluster, K9s allows you to shell into your cluster nodes. Once enabled, you will have a new `s` for `shell` menu option while in node view. K9s will launch a pod on the selected node using a special k9s_shell pod. Furthermore, you can refine your shell pod by using a custom docker image preloaded with the shell tools you love. By default k9s uses a BusyBox image, but you can configure it as follows:

Alternatively, you can now override the context configuration by setting an env variable that can override all clusters node shell gate using `K9S_FEATURE_GATE_NODE_SHELL=true|false`

```yaml
# $XDG_CONFIG_HOME/k9s/config.yaml
k9s:
  # You can also further tune the shell pod specification
  shellPod:
    image: cool_kid_admin:42
    namespace: blee
    limits:
      cpu: 100m
      memory: 100Mi
```

Then in your cluster configuration file...

```yaml
# $XDG_DATA_HOME/k9s/clusters/cluster-1/context-1
k9s:
  cluster: cluster-1
  readOnly: false
  namespace:
    active: default
    lockFavorites: false
    favorites:
    - kube-system
    - default
  view:
    active: po
  featureGates:
    nodeShell: true # => Enable this feature gate to make nodeShell available on this cluster
  portForwardAddress: localhost
```

### Customizing the Shell Pod
You can also customize the shell pod by adding a `hostPathVolume` to your shell pod. This allows you to mount a local directory or file into the shell pod. For example, if you want to mount the Docker socket into the shell pod, you can do so as follows:
```yaml
k9s:
  shellPod:
    hostPathVolume:
    - name: docker-socket
      # Mount the Docker socket into the shell pod
      mountPath: /var/run/docker.sock
      # The path on the host to mount
      hostPath: /var/run/docker.sock
      readOnly: true
```
This will mount the Docker socket into the shell pod at `/var/run/docker.sock` and make it read-only. You can also mount any other directory or file in a similar way.

---

## Command Aliases

In K9s, you can define your very own command aliases (shortnames) to access your resources. In your `$HOME/.config/k9s` define a file called `aliases.yaml`.
A K9s alias defines pairs of alias:gvr. A gvr (Group/Version/Resource) represents a fully qualified Kubernetes resource identifier. Here is an example of an alias file:

```yaml
#  $XDG_DATA_HOME/k9s/aliases.yaml
aliases:
  pp: v1/pods
  crb: rbac.authorization.k8s.io/v1/clusterrolebindings
  # As of v0.30.0 you can also refer to another command alias...
  fred: pod fred app=blee # => view pods in namespace fred with labels matching app=blee
```

Using this aliases file, you can now type `:pp` or `:crb` or `:fred` to activate their respective commands.

---

## HotKey Support

Entering the command mode and typing a resource name or alias, could be cumbersome for navigating thru often used resources.
We're introducing hotkeys that allow users to define their own key combination to activate their favorite resource views.

Additionally, you can define context specific hotkeys by add a context level configuration file in `$XDG_DATA_HOME/k9s/clusters/clusterX/contextY/hotkeys.yaml`

In order to surface hotkeys globally please follow these steps:

1. Create a file named `$XDG_CONFIG_HOME/k9s/hotkeys.yaml`
2. Add the following to your `hotkeys.yaml`. You can use resource name/short name to specify a command ie same as typing it while in command mode.

      ```yaml
      #  $XDG_CONFIG_HOME/k9s/hotkeys.yaml
      hotKeys:
        # Hitting Shift-0 navigates to your pod view
        shift-0:
          shortCut:    Shift-0
          description: Viewing pods
          command:     pods
        # Hitting Shift-1 navigates to your deployments
        shift-1:
          shortCut:    Shift-1
          description: View deployments
          command:     dp
        # Hitting Shift-2 navigates to your xray deployments
        shift-2:
          shortCut:    Shift-2
          description: Xray Deployments
          command:     xray deploy
        # Hitting Shift-S view the resources in the namespace of your current selection
        shift-s:
          shortCut:    Shift-S
          override:    true # => will override the default shortcut related action if set to true (default to false)
          description: Namespaced resources
          command:     "$RESOURCE_NAME $NAMESPACE"
          keepHistory: true # whether you can return to the previous view
      ```

 Not feeling so hot? Your custom hotkeys will be listed in the help view `?`.
 Also your hotkeys file will be automatically reloaded so you can readily use your hotkeys as you define them.

 You can choose any keyboard shortcuts that make sense to you, provided they are not part of the standard K9s shortcuts list.

 Similarly, referencing environment variables in hotkeys is also supported. The available environment variables can refer to the description in the [Plugins](#plugins) section.

> NOTE: This feature/configuration might change in future releases!

---

## Port Forwarding over websockets

K9s follows `kubectl` feature flag environment variables to enable/disable port-forwarding over websockets. (default enabled in >1.30)
To disable Websocket support, set `KUBECTL_PORT_FORWARD_WEBSOCKETS=false`

---

## FastForwards

As of v0.25.0, you can leverage the `FastForwards` feature to tell K9s how to default port-forwards. In situations where you are dealing with multiple containers or containers exposing multiple ports, it can be cumbersome to specify the desired port-forward from the dialog as in most cases, you already know which container/port tuple you desire. For these use cases, you can now annotate your manifests with the following annotations:

@ `k9scli.io/auto-port-forwards`
  activates one or more port-forwards directly bypassing the port-forward dialog all together.
@ `k9scli.io/port-forwards`
  pre-selects one or more port-forwards when launching the port-forward dialog.

The annotation value takes on the shape `container-name::[local-port:]container-port`

> NOTE: for either cases above you can specify the container port by name or number in your annotation!

### Example

```yaml
# Pod fred
apiVersion: v1
kind: Pod
metadata:
  name: fred
  annotations:
    k9scli.io/auto-port-forwards: zorg::5556        # => will default to container zorg port 5556 and local port 5566. No port-forward dialog will be shown.
    # Or...
    k9scli.io/port-forwards: bozo::9090:p1          # => launches the port-forward dialog selecting default port-forward on container bozo port named p1(8081)
                                                    # mapping to local port 9090.
    ...
spec:
  containers:
  - name: zorg
    ports:
    - name: p1
      containerPort: 5556
    ...
  - name: bozo
    ports:
    - name: p1
      containerPort: 8081
    - name: p2
      containerPort: 5555
    ...
```

The annotation value must specify a container to forward to as well as a local port and container port. The container port may be specified as either a port number or port name. If the local port is omitted then the local port will default to the container port number. Here are a few examples:

1. bozo::http      - creates a pf on container `bozo` with port name http. If http specifies port number 8080 then the local port will be 8080 as well.
2. bozo::9090:http - creates a pf on container `bozo` mapping local port 9090->http(8080)
3. bozo::9090:8080 - creates a pf on container `bozo` mapping local port 9090->8080

---

## Custom Views

[SneakCast v0.17.0 on The Beach! - Yup! sound is sucking but what a setting!](https://youtu.be/7S33CNLAofk)

You can change which columns shows up for a given resource via custom views. To surface this feature, you will need to create a new configuration file, namely `$XDG_CONFIG_HOME/k9s/views.yaml`. This file leverages GVR (Group/Version/Resource) to configure the associated table view columns. If no GVR is found for a view the default rendering will take over (ie what we have now). Going wide will add all the remaining columns that are available on the given resource after your custom columns. To boot, you can edit your views config file and tune your resources views live!

📢 🎉 As of `release v0.40.0` you can specify json parse expressions to further customize your resources rendering.

The new column syntax is as follows:

> COLUMN_NAME<:json_parse_expression><|column_attributes>

Where `:json_parse_expression` represents an expression to pull a specific snippet out of the resource manifest.
Similar to `kubectl -o custom-columns` command. This expression is optional.

> IMPORTANT! Columns must be valid YAML strings. Thus if your column definition contains non-alpha chars
> they must figure with either single/double quotes or escaped via `\`

> NOTE! Be sure to watch k9s logs as any issues with the custom views specification are only surfaced in the logs.

Additionally, you can specify column attributes to further tailor the column rendering.
To use this you will need to add a `|` indicator followed by your rendering bits.
You can have one or more of the following attributes:

* `T` -> time column indicator
* `N` -> number column indicator
* `W` -> turns on wide column aka only shows while in wide mode. Defaults to the standard resource definition when present.
* `S` -> Ensures a column is visible and not wide. Overrides `wide` std resource definition if present.
* `H` -> Hides the column
* `L` -> Left align (default)
* `R` -> Right align

Here is a sample views configuration that customize a pods and services views.

```yaml
# $XDG_CONFIG_HOME/k9s/views.yaml
views:
  v1/pods:
    columns:
      - AGE
      - NAMESPACE|WR                                     # => 🌚 Specifies the NAMESPACE column to be right aligned and only visible while in wide mode
      - ZORG:.metadata.labels.fred\.io\.kubernetes\.blee # => 🌚 extract fred.io.kubernetes.blee label into it's own column
      - BLEE:.metadata.annotations.blee|R                # => 🌚 extract annotation blee into it's own column and right align it
      - NAME
      - IP
      - NODE
      - STATUS
      - READY
      - MEM/RL|S                                         # => 🌚 Overrides std resource default wide attribute via `S` for `Show`
      - '%MEM/R|'                                        # => NOTE! column names with non alpha names need to be quoted as columns must be strings!

  v1/pods@fred:                                          # => 🌚 New v0.40.6! Customize columns for a given resource and namespace!
    columns:
      - AGE
      - NAME|WR

  v1/pods@kube*:                                         # => 🌚 New v0.40.6! You can also specify a namespace using a regular expression.
    columns:
      - NAME
      - AGE
      - LABELS

  cool-kid:                                              # => 🌚 New v0.40.8! You can also reference a specific alias and display a custom view for it
    columns:
      - AGE
      - NAMESPACE|WR

  v1/services:
    columns:
      - AGE
      - NAMESPACE
      - NAME
      - TYPE
      - CLUSTER-IP
```

> 🩻 NOTE: This is experimental and will most likely change as we iron this out!

---

## Plugins

K9s allows you to extend your command line and tooling by defining your very own cluster commands via plugins.
Minimally we look at `$XDG_CONFIG_HOME/k9s/plugins.yaml` to locate all available plugins.
Additionally, K9s will scan the following directories for additional plugins:

* `$XDG_CONFIG_HOME/k9s/plugins`
* `$XDG_DATA_HOME/k9s/plugins`
* `$XDG_DATA_DIRS/k9s/plugins`

The plugin file content can be either a single plugin snippet, a collections of snippets or a complete plugins definition (see examples below...).

A plugin is defined as follows:

* Shortcut option represents the key combination a user would type to activate the plugin. Valid values are [a-z], Shift-[A-Z], Ctrl-[A-Z].
* Override option make that the default action related to the shortcut will be overridden by the plugin
* Confirm option (when enabled) lets you see the command that is going to be executed and gives you an option to confirm or prevent execution
* Description will be printed next to the shortcut in the k9s menu
* Scopes defines a collection of resources names/short-names for the views associated with the plugin. You can specify `all` to provide this shortcut for all views.
* Command represents ad-hoc commands the plugin runs upon activation
* Background specifies whether or not the command runs in the background
* Args specifies the various arguments that should apply to the command above
* OverwriteOutput boolean option allows plugin developers to provide custom messages on plugin stdout execution. See example in [#2644](https://github.com/derailed/k9s/pull/2644)
* Dangerous boolean option enables disabling the plugin when read-only mode is set. See [#2604](https://github.com/derailed/k9s/issues/2604)
* Inputs defines a list of input fields to prompt the user for before executing the plugin (see below)

#### Plugin Inputs

Plugins can define input fields that prompt users for values before execution. This is useful when you need dynamic values like replica counts, environment variables, or profile selections. A maximum of 5 inputs per plugin is allowed.

Each input has the following properties:

* `name` (required) -- the input identifier used to reference the value in args as `$INPUT_<NAME>` (uppercase)
* `label` -- the label shown to the user in the input dialog
* `type` (required) -- the input type: `string`, `number`, `bool`, or `dropdown`
* `required` -- when true, the user must provide a value before the plugin can execute
* `default` -- a default value pre-filled in the input field (must be a valid option for `dropdown`, `"true"`/`"false"` for `bool`, or a valid number for `number`)
* `options` -- for `dropdown` type only, defines the list of available choices

Input values are available in plugin args using the format `$INPUT_<NAME>` where `<NAME>` is the uppercase version of the input name.

**Input Types:**

| Type | Description | UI Element |
|------|-------------|------------|
| `string` | Free-form text input | Text field |
| `number` | Numeric input (integers and floats) | Text field with numeric validation |
| `bool` | Boolean toggle | Checkbox |
| `dropdown` | Selection from predefined options | Dropdown menu |

**Example:**

```yaml
plugins:
  demo-inputs:
    shortCut: Ctrl-Y
    description: Demo all input types
    scopes:
      - po
    command: bash
    background: false
    args:
      - -c
      - >-
        echo "=== Plugin input demo ===" &&
        echo "" &&
        echo "Pod: $NAME" &&
        echo "Namespace: $NAMESPACE" &&
        echo "Context: $CONTEXT" &&
        echo "" &&
        echo "=== Your inputs ===" &&
        if [ -n "$INPUT_MESSAGE" ]; then echo "Message: $INPUT_MESSAGE (set)"; else echo "Message: (not set)"; fi &&
        if [ -n "$INPUT_COUNT" ]; then echo "Count: $INPUT_COUNT (set)"; else echo "Count: (not set)"; fi &&
        if [ -n "$INPUT_ENABLED" ]; then echo "Enabled: $INPUT_ENABLED (set)"; else echo "Enabled: (not set)"; fi &&
        if [ -n "$INPUT_ENVIRONMENT" ]; then echo "Environment: $INPUT_ENVIRONMENT (set)"; else echo "Environment: (not set)"; fi &&
        echo "" &&
        read -p "Press Enter to return to k9s..."
    inputs:
      - name: message
        label: Enter a message
        type: string
        required: true
        default: hello world
      - name: count
        label: Enter a number
        type: number
        required: true
        default: 3
      - name: enabled
        label: Enable feature
        type: bool
        required: false
        default: true
      - name: environment
        label: Select environment
        type: dropdown
        required: true
        default: staging
        options:
          - development
          - staging
          - production
```

K9s does provide additional environment variables for you to customize your plugins arguments. Currently, the available environment variables are as follows:

* `$RESOURCE_GROUP` -- the selected resource group
* `$RESOURCE_VERSION` -- the selected resource api version
* `$RESOURCE_NAME` -- the selected resource name
* `$NAMESPACE` -- the selected resource namespace
* `$NAME` -- the selected resource name
* `$CONTAINER` -- the current container if applicable
* `$FILTER` -- the current filter if any
* `$KUBECONFIG` -- the KubeConfig location.
* `$CLUSTER` the active cluster name
* `$CONTEXT` the active context name
* `$USER` the active user
* `$GROUPS` the active groups
* `$POD` while in a container view
* `$COL-<RESOURCE_COLUMN_NAME>` use a given column name for a viewed resource. Must be prefixed by `COL-`!

Curly braces can be used to embed an environment variable inside another string, or if the column name contains special characters. (e.g. `${NAME}-example` or `${COL-%CPU/L}`)

### Plugin Examples

Define several plugins and host them in a single file. These can leave in the K9s root config so that they are available on any clusters. Additionally, you can define cluster/context specific plugins for your clusters of choice by adding clusterA/contextB/plugins.yaml file.

The following defines a plugin for viewing logs on a selected pod using `ctrl-l` as shortcut.

```yaml
# Define several plugins in a single file in the K9s root configuration
# $XDG_DATA_HOME/k9s/plugins.yaml
plugins:
  # Defines a plugin to provide a `ctrl-l` shortcut to tail the logs while in pod view.
  fred:
    shortCut: Ctrl-L
    override: false
    overwriteOutput: false
    confirm: false
    dangerous: false
    description: Pod logs
    scopes:
    - pods
    command: kubectl
    background: false
    args:
    - logs
    - -f
    - $NAME
    - -n
    - $NAMESPACE
    - --context
    - $CONTEXT
```

Similarly you can define the plugin above in a directory using either a file per plugin or several plugins per files as follow...

The following defines two plugins namely fred and zorg.

```yaml
# Multiple plugins in a single file...
# Note: as of v0.40.9 you can have ad-hoc plugin dirs
# Loads plugins fred and zorg
# $XDG_DATA_HOME/k9s/plugins/misc-plugins/blee.yaml
fred:
  shortCut: Shift-B
  description: Bozo
  scopes:
  - deploy
  command: bozo

zorg:
  shortCut: Shift-Z
  description: Pod logs
  scopes:
  - svc
  command: zorg
```

Lastly you can define plugin snippets in their own file. The snippet will be named from the file name. In this case, we define a `bozo` plugin using a plugin snippet.

```yaml
# $XDG_DATA_HOME/k9s/plugins/schtuff/bozo.yaml
shortCut: Shift-B
description: Bozo
scopes:
- deploy
command: bozo
```

> NOTE: This is an experimental feature! Options and layout may change in future K9s releases as this feature solidifies.

---

## Benchmark Your Applications

K9s integrates [Hey](https://github.com/rakyll/hey) from the brilliant and super talented [Jaana Dogan](https://github.com/rakyll). `Hey` is a CLI tool to benchmark HTTP endpoints similar to AB bench. This preliminary feature currently supports benchmarking port-forwards and services (Read the paint on this is way fresh!).

To setup a port-forward, you will need to navigate to the PodView, select a pod and a container that exposes a given port. Using `SHIFT-F` a dialog comes up to allow you to specify a local port to forward. Once acknowledged, you can navigate to the PortForward view (alias `pf`) listing out your active port-forwards. Selecting a port-forward and using `CTRL-B` will run a benchmark on that HTTP endpoint. To view the results of your benchmark runs, go to the Benchmarks view (alias `be`). You should now be able to select a benchmark and view the run stats details by pressing `<ENTER>`. NOTE: Port-forwards only last for the duration of the K9s session and will be terminated upon exit.

Initially, the benchmarks will run with the following defaults:

* Concurrency Level: 1
* Number of Requests: 200
* HTTP Verb: GET
* Path: /

The PortForward view is backed by a new K9s config file namely: `$XDG_DATA_HOME/k9s/clusters/clusterX/contextY/benchmarks.yaml`. Each cluster you connect to will have its own bench config file, containing the name of the K8s context for the cluster. Changes to this file should automatically update the PortForward view to indicate how you want to run your benchmarks.

Benchmarks result reports are stored in `$XDG_STATE_HOME/k9s/clusters/clusterX/contextY`

Here is a sample benchmarks.yaml configuration. Please keep in mind this file will likely change in subsequent releases!

```yaml
# This file resides in  $XDG_DATA_HOME/k9s/clusters/clusterX/contextY/benchmarks.yaml
benchmarks:
  # Indicates the default concurrency and number of requests setting if a container or service rule does not match.
  defaults:
    # One concurrent connection
    concurrency: 1
    # Number of requests that will be sent to an endpoint
    requests: 500
  containers:
    # Containers section allows you to configure your http container's endpoints and benchmarking settings.
    # NOTE: the container ID syntax uses namespace/pod-name:container-name
    default/nginx:nginx:
      # Benchmark a container named nginx using POST HTTP verb using http://localhost:port/bozo URL and headers.
      concurrency: 1
      requests: 10000
      http:
        path: /bozo
        method: POST
        body:
          {"fred":"blee"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
  services:
    # Similarly you can Benchmark an HTTP service exposed either via NodePort, LoadBalancer types.
    # Service ID is ns/svc-name
    default/nginx:
      # Set the concurrency level
      concurrency: 5
      # Number of requests to be sent
      requests: 500
      http:
        method: GET
        # This setting will depend on whether service is NodePort or LoadBalancer. NodePort may require vendor port tunneling setting.
        # Set this to a node if NodePort or LB if applicable. IP or dns name.
        host: A.B.C.D
        path: /bumblebeetuna
      auth:
        user: jean-baptiste-emmanuel
        password: Zorg!
```

---

## K9s RBAC FU

On RBAC enabled clusters, you would need to give your users/groups capabilities so that they can use K9s to explore their Kubernetes cluster. K9s needs minimally read privileges at both the cluster and namespace level to display resources and metrics.

These rules below are just suggestions. You will need to customize them based on your environment policies. If you need to edit/delete resources extra Fu will be necessary.

> NOTE! Cluster/Namespace access may change in the future as K9s evolves.
> NOTE! We expect K9s to keep running even in atrophied clusters/namespaces. Please file issues if this is not the case!

### Cluster RBAC scope

```yaml
---
# K9s Reader ClusterRole
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: k9s
rules:
  # Grants RO access to cluster resources node and namespace
  - apiGroups: [""]
    resources: ["nodes", "namespaces"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to RBAC resources
  - apiGroups: ["rbac.authorization.k8s.io"]
    resources: ["clusterroles", "roles", "clusterrolebindings", "rolebindings"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to CRD resources
  - apiGroups: ["apiextensions.k8s.io"]
    resources: ["customresourcedefinitions"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to metric server (if present)
  - apiGroups: ["metrics.k8s.io"]
    resources: ["nodes", "pods"]
    verbs: ["get", "list", "watch"]

---
# Sample K9s user ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: k9s
subjects:
  - kind: User
    name: fernand
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: k9s
  apiGroup: rbac.authorization.k8s.io
```

### Namespace RBAC scope

If your users are constrained to certain namespaces, K9s will need to following role to enable read access to namespaced resources.

```yaml
---
# K9s Reader Role (default namespace)
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: k9s
  namespace: default
rules:
  # Grants RO access to most namespaced resources
  - apiGroups: ["", "apps", "autoscaling", "batch", "extensions"]
    resources: ["*"]
    verbs: ["get", "list", "watch"]
  # Grants RO access to metric server
  - apiGroups: ["metrics.k8s.io"]
    resources: ["pods", "nodes"]
    verbs:
      - get
      - list
      - watch

---
# Sample K9s user RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: k9s
  namespace: default
subjects:
  - kind: User
    name: fernand
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: k9s
  apiGroup: rbac.authorization.k8s.io
```

---

## Skins

Example: Dracula Skin ;)

<img src="assets/skins/dracula.png" alt="Dracula Skin">

You can style K9s based on your own sense of look and style. Skins are YAML files, that enable a user to change the K9s presentation layer. See this repo `skins` directory for examples.
You can skin k9s by default by specifying a UI.skin attribute. You can also change K9s skins based on the context you are connecting too.
In this case, you can specify a skin field on your cluster config aka `skin: dracula` (just the name of the skin file without the extension!) and copy this repo
`skins/dracula.yaml` to `$XDG_CONFIG_HOME/k9s/skins/` directory. You can also change the skin by setting `K9S_SKIN` in the environment, e.g. `export K9S_SKIN="dracula"`.

In the case where your cluster spans several contexts, you can add a skin context configuration to your context configuration.
This is a collection of {context_name, skin} tuples (please see example below!)

Colors can be defined by name or using a hex representation. Of recent, we've added a color named `default` to indicate a transparent background color to preserve your terminal background color settings if so desired.

> NOTE: This is very much an experimental feature at this time, more will be added/modified if this feature has legs so thread accordingly!
> NOTE: Please see [K9s Skins](https://k9scli.io/topics/skins/) for a list of available colors.

To skin a specific context and provided the file `in-the-navy.yaml` is present in your skins directory.

```yaml
#  $XDG_DATA_HOME/k9s/clusters/clusterX/contextY/config.yaml
k9s:
  cluster: clusterX
  skin: in-the-navy
  readOnly: false
  namespace:
    active: default
    lockFavorites: false
    favorites:
    - kube-system
    - default
  view:
    active: po
  featureGates:
    nodeShell: false
  portForwardAddress: localhost
```

You can also specify a default skin for all contexts in the root k9s config file as so:

```yaml
#  $XDG_CONFIG_HOME/k9s/config.yaml
k9s:
  liveViewAutoRefresh: false
  screenDumpDir: /tmp/dumps
  refreshRate: 2
  maxConnRetry: 5
  readOnly: false
  noExitOnCtrlC: false
  ui:
    enableMouse: false
    headless: false
    logoless: false
    crumbsless: false
    splashless: false
    noIcons: false
    invert: false
    # Toggles reactive UI. This option provide for watching on disk artifacts changes and update the UI live  Defaults to false.
    reactive: false
    # By default all contexts will use the dracula skin unless explicitly overridden in the context config file.
    skin: dracula # => assumes the file skins/dracula.yaml is present in the  $XDG_DATA_HOME/k9s/skins directory
    defaultsToFullScreen: false
  skipLatestRevCheck: false
  disablePodCounting: false
  shellPod:
    image: busybox
    namespace: default
    limits:
      cpu: 100m
      memory: 100Mi
  imageScans:
    enable: false
    exclusions:
      namespaces: []
      labels: {}
  logger:
    tail: 100
    buffer: 5000
    sinceSeconds: -1
    textWrap: false
    disableAutoscroll: false
    columnLock: false
    showTime: false
  thresholds:
    cpu:
      critical: 90
      warn: 70
    memory:
      critical: 90
      warn: 70
```

```yaml
# $XDG_DATA_HOME/k9s/skins/in-the-navy.yaml
# Skin InTheNavy!
k9s:
  # General K9s styles
  body:
    fgColor: dodgerblue
    bgColor: '#ffffff'
    logoColor: '#0000ff'
  # ClusterInfoView styles.
  info:
    fgColor: lightskyblue
    sectionColor: steelblue
  # Help panel styles
  help:
    fgColor: white
    bgColor: black
    keyColor: cyan
    numKeyColor: blue
    sectionColor: gray
  frame:
    # Borders styles.
    border:
      fgColor: dodgerblue
      focusColor: aliceblue
    # MenuView attributes and styles.
    menu:
      fgColor: darkblue
      # Style of menu text. Supported options are "dim" (default), "normal", and "bold"
      fgStyle: dim
      keyColor: cornflowerblue
      # Used for favorite namespaces
      numKeyColor: cadetblue
    # CrumbView attributes for history navigation.
    crumbs:
      fgColor: white
      bgColor: steelblue
      activeColor: skyblue
    # Resource status and update styles
    status:
      newColor: '#00ff00'
      modifyColor: powderblue
      addColor: lightskyblue
      errorColor: indianred
      highlightcolor: royalblue
      killColor: slategray
      completedColor: gray
    # Border title styles.
    title:
      fgColor: aqua
      bgColor: white
      highlightColor: skyblue
      counterColor: slateblue
      filterColor: slategray
  views:
    # TableView attributes.
    table:
      fgColor: blue
      bgColor: darkblue
      cursorColor: aqua
      # Header row styles.
      header:
        fgColor: white
        bgColor: darkblue
        sorterColor: orange
        selectedSortColumnColor: lightskyblue
    # YAML info styles.
    yaml:
      keyColor: steelblue
      colonColor: blue
      valueColor: royalblue
    # Logs styles.
    logs:
      fgColor: lightskyblue
      bgColor: black
      indicator:
        fgColor: dodgerblue
        bgColor: black
        toggleOnColor: limegreen
        toggleOffColor: gray
```

---

## Contributors

Without the contributions from these fine folks, this project would be a total dud!

<a href="https://github.com/derailed/k9s/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=derailed/k9s" />
</a>

---

## Known Issues

This is still work in progress! If something is broken or there's a feature
that you want, please file an issue and if so inclined submit a PR!

K9s will most likely blow up if...

1. You're running older versions of Kubernetes. K9s works best on later Kubernetes versions.
2. You don't have enough RBAC fu to manage your cluster.

---

## ATTA Girls/Boys!

K9s sits on top of many open source projects and libraries. Our *sincere*
appreciations to all the OSS contributors that work nights and weekends
to make this project a reality!

---

## Meet The Core Team!

If you have chops in GO and K8s and would like to offer your time to help maintain and enhance this project, please reach out to me.

* [Fernand Galiana](https://github.com/derailed)
  * <img src="assets/mail.png" width="16" height="auto" alt="email"/>  fernand@imhotep.io
  * <img src="assets/twitter.png" width="16" height="auto" alt="twitter"/> [@kitesurfer](https://twitter.com/kitesurfer?lang=en)

We always enjoy hearing from folks who benefit from our work!

## Contributions Guideline

* File an issue first prior to submitting a PR!
* Ensure all exported items are properly commented
* If applicable, submit a test suite against your PR

---

<img src="assets/imhotep_logo.png" width="32" height="auto" alt="Imhotep"/> &nbsp;© 2026 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.1.1.md
================================================
# Release v0.1.1

<br/>

---
## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

<br/>

---
## Change Logs

+ Added config file to tracks K9s configuration ~/.k9s/config.yml
+ Change log file location to use Go tmp dir stdlib package.
  Check the log destination and config file location using
    ```shell
    k9s info
    ```
+ Removed 9 namespaces limitation by allowing user to manage namespaces using
  the namespace view or the dotfile configuration.
+ Updated keyboard navigation on log view. Up/Down, PageUp/PageDown
+ Added configuration to manage buffer size while viewing container logs
+ Added fail early countermeasures. Hopefully will help us figure out non starts??
+ Beefed up CLI arguments
+ Changed help command to just ?
+ Changed back command to just Esc
+ Added filtering feature to trim down viewed resources
  Use **/**term or **Esc** to kill filtering

<br/>

---
## Resolved Bugs

+ [Issue 17] Multi user log usage. Added user descriptor on log files
+ [Issue 18] Non starts due to color. Added preflight item on README.
+ [Issue 13] ? does not do anything.
+ [Issue 8] Don't reset selection after deletion.
+ [Issue 1,7] Limit available namespaces. Added config file to manage top 5 namespaces
  and also added a switch command while in the namespace resource view.
+ [Issue 6] Sorting/filtering. Added preliminary filtering capability. Raw search
  on table item using /filter_me command. Use Esc to turn off filtering.
+ [Issue 5] Scrolling in log view. Added up/down/pageUp/pageDown.
+ [Issue 3] No output when failing. Added fail early countermeasures. Hopefully
  will give us a heads up now to track down config issues??


================================================
FILE: change_logs/release_0.1.10.md
================================================
# Release v0.1.10

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

---

## Resolved Bugs

* [Issue #92](https://github.com/derailed/k9s/issues/92)


================================================
FILE: change_logs/release_0.1.11.md
================================================
# Release v0.1.11

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

---

## Resolved Bugs

* [Issue #81](https://github.com/derailed/k9s/issues/81)
* [Issue #96](https://github.com/derailed/k9s/issues/96)
* [Issue #95](https://github.com/derailed/k9s/issues/95)
* [Issue #93](https://github.com/derailed/k9s/issues/93)


================================================
FILE: change_logs/release_0.1.2.md
================================================
# Release v0.1.2

<br/>

---
## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

<br/>

---
## Change Logs

+ Navigation changed! Thanks to [Teppei Fukuda](https://github.com/knqyf263) for
  hinting about the different modes ie command vs navigation. Now in order to
  navigate to a specific kubernetes resource you need to issue this command
  to say see all pods (using key `>`):

    ```text
    >po<ENTER>
    ```
+ Similarly to filter on a given resource you can use `/` and type your filter.
+ In both instances `<ESC>` will back you out of command mode and into navigation mode.

<br/>

---
## Resolved Bugs

+ [Issue #23](https://github.com/derailed/k9s/issues/23)
+ [Issue #19](https://github.com/derailed/k9s/issues/19)


================================================
FILE: change_logs/release_0.1.3.md
================================================
# Release v0.1.3

<br/>

---
## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

<br/>

---
## Change Logs

<br/>

+ IMPORTANT: Changed HotKeys to single chars for most non destructive operations
  For **command** mode use the <:> key
  For **search** mode use the </> key
+ Revert Delete to Ctrl-D. (Sorry for the brain fart on this!)
+ IMPORTANT! Breaking change! The K9s config has changed to handle multi-clusters.
  If K9s does not launch, please move over .k9s/config.yml.
+ Added Resource for ReplicaController
+ Added auth support for cloud provider using the same auth options as kubectl

---
## Resolved Bugs

+ [Issue #50](https://github.com/derailed/k9s/issues/50)
+ [Issue #44](https://github.com/derailed/k9s/issues/44)
+ [Issue #42](https://github.com/derailed/k9s/issues/42)
+ [Issue #38](https://github.com/derailed/k9s/issues/38)
+ [Issue #36](https://github.com/derailed/k9s/issues/36)
+ [Issue #28](https://github.com/derailed/k9s/issues/28)
+ [Issue #24](https://github.com/derailed/k9s/issues/24)
+ [Issue #24](https://github.com/derailed/k9s/issues/3)


================================================
FILE: change_logs/release_0.1.4.md
================================================
# Release v0.1.4

<br/>

---
## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

<br/>

---
## Change Logs

<br/>

+ IMPORTANT! Breaking change! The K9s config was changed
  If K9s does not launch, move over .k9s/config.yml
+ Reworked CLI args to better support contexts

---
## Resolved Bugs

+ [Issue #67](https://github.com/derailed/k9s/issues/67)
+ [Issue #65](https://github.com/derailed/k9s/issues/65)
+ [Issue #64](https://github.com/derailed/k9s/issues/64)
+ [Issue #60](https://github.com/derailed/k9s/issues/60)
+ [Issue #57](https://github.com/derailed/k9s/issues/57)
+ [Issue #56](https://github.com/derailed/k9s/issues/56)


================================================
FILE: change_logs/release_0.1.5.md
================================================
# Release v0.1.5

<br/>

---
## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

<br/>

---
## Change Logs

<br/>

+ [Feature #54](https://github.com/derailed/k9s/issues/54)
  Changed pod colorer to not show error status while initializing
  Tx! [jawahars16](https://github.com/jawahars16), [jmreicha](https://github.com/jmreicha)

---
## Resolved Bugs

- Fixed release version not showing up on execs


================================================
FILE: change_logs/release_0.1.6.md
================================================
# Release v0.1.6

<br/>

---
## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

<br/>

---
## Change Logs

<br/>

+ [Feature request #43](https://github.com/derailed/k9s/issues/43) Add CronJob Manual Trigger.
  All of this work is attributed to [dzoeteman](https://github.com/dzoeteman). Thank you!
+ Added ability to view logs on Job resource.
+ [Feature request #37](https://github.com/derailed/k9s/issues/37) Added Describe on resources as
  in kubectl describe xxx
+ NOTE! Changed alias to `job` and `cron` vs `jo` and `cjo`

---
## Resolved Bugs

- Fix issue with ServiceAccounts not displaying


================================================
FILE: change_logs/release_0.1.7.md
================================================
# Release v0.1.7

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

* [Feature request #73](https://github.com/derailed/k9s/issues/73) Add support for search/filter
* [Feature request #48](https://github.com/derailed/k9s/issues/48) Add support to filter alias view
* [Feature request #30](https://github.com/derailed/k9s/issues/30) Add support for init containers
* Major cleanup + refactor. Might have introduced some instability...

---

## Resolved Bugs

* [Issue #71](https://github.com/derailed/k9s/issues/71) K9s no longer assumes a metrics server is
  running. Better if it is but should not prevent from viewing resources.
* [Issue #77](https://github.com/derailed/k9s/issues/77)


================================================
FILE: change_logs/release_0.1.8.md
================================================
# Release v0.1.8

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

---

## Resolved Bugs

* [Issue #79](https://github.com/derailed/k9s/issues/79)


================================================
FILE: change_logs/release_0.1.9.md
================================================
# Release v0.1.9

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

---

## Resolved Bugs

* [Issue #83](https://github.com/derailed/k9s/issues/83)
* [Issue #84](https://github.com/derailed/k9s/issues/84)


================================================
FILE: change_logs/release_0.10.0.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.0

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

First off, Happy 2020 to you and yours!! Best wishes for good health and good fortune!

This release represents a major overall of K9s core. It's been a long time coming and indeed a long day in the saddle. There has been many code changes and hopefully improvements from previous releases. I think some of it is better but I've probably borked a bunch of functionality in the process ;( I look to you to help me flesh out issues and bugs, so we can move on to bigger and exciting features in 2020! Please do thread lightly on this one and make sure to keep a previous release handy just in case... This was a boatload of work to make this happen, my hope is you'll enjoy some of the improvements... In any case, and as always, if you feel they're better ways or imperfections by all means please pipe in!

I would also like to take this opportunity to thank all of you for your kind PRs and issues and for your support and patience with K9s. I understand this release might be a bit torked, but I will work hard to make sure we reach stability quickly in the next few drops. Thank you for your understanding!!

## VatDoesDisDo?

Most of the refactors are around K8s resource fetching and viewing as well as navigation changes. Based on our observations this release might load resources a bit slower than usual but should make navigation much faster once the cache is primed. We've made some improvements to be more consistent with navigation, menus and shortcuts management. We've got ride off the breadcrumbs navigation ie no more `p` to nav back. Crumbs are now just tracking a natural resource navigation ie pod -> containers -> logs and no longer commands history. Each new command will now load a brand new breadcrumb. You can press `<esc>` to nav back to the previous page. We're also introducing a new hotkeys feature, that efforts creating shortcuts to navigate to your favorite resources ie shift-0 -> view pods, shift-1 -> view deployments (See HotKey section below). I know there were many outstanding PRS (Thank you to all that I've submitted!) and given the extent of the changes, I've resolved to incorporate them in manually vs having to deal with merge conflicts.

## Custom Skins Per Cluster

In this release, we've added support for skins at the cluster level. Do you want K9s to look differently based on which cluster you're connecting to? All you'll need is to name the skin file in the K9s home directory as follows `mycluster_skin.yml`. If no cluster specific skin file is found, the standard `skin.yml` file will be loaded if present. Please checkout the `skins` directory in this repo or PR me if you have cool skins you'd like to share with your fellow K9sers as they will be featured in these release notes and in the project README.

## Hot(Ness)?

Feeling like you want to be able to quickly switch around your favorite resources with your very own shortcut? Wouldn't it be dandy to navigate to your deployments via a shortcut vs entering a command `:deploy`? Here is what you'll need to do to add HotKeys to your K9s sessions:

1. In your .k9s home directory create a file named `hotkey.yml`
2. For example add the following to your `hotkey.yml`. You can use short names or resource name to specify a command ie same as typing it in command mode.

      ```yaml
      hotKey:
        shift-0:
          shortCut: Shift-0
          description: View pods
          command: pods
        shift-1:
          shortCut: Shift-1
          description: View deployments
          command: dp
        shift-2:
          shortCut: Shift-2
          description: View services
          command: service
        shift-3:
          shortCut: Shift-3
          description: View statefulsets
          command: statefulsets
      ```

 Not feeling too `Hot`? No worried, your custom hotkeys list will be listed in the help view.`<?>`.

 You can choose any keyboard shortcuts that make sense to you, provided they are not part of the standard K9s shortcuts list.

## PullRequests

* [PR #447](https://github.com/derailed/k9s/pull/447) K9s MacPorts support. Thank you! [Nils Breunese](https://github.com/breun)
* [PR #446](https://github.com/derailed/k9s/pull/446) Same key invert sort. Big thanks!! [James Hiew](https://github.com/jameshiew)
* [PR #445](https://github.com/derailed/k9s/pull/445) Use `?` to toggle help. Major thanks!! [Ramz](https://github.com/ageekymonk)
* [PR #443](https://github.com/derailed/k9s/pull/443) Hex color skin support. Great work! [Gavin Ray](https://github.com/gavinray97)
* [PR #442](https://github.com/derailed/k9s/pull/442) Full screen/Wrap support on log view. ATTA BOY! [Shiv3](https://github.com/shiv3)
* [PR #412](https://github.com/derailed/k9s/pull/412) Simplify cruder interface. ATTA BOY!! (as always)[Gustavo Silva Paiva](https://github.com/paivagustavo)
* [PR #350](https://github.com/derailed/k9s/pull/350) Sanitize file name before saving. All credits to [Tuomo Syvänperä](https://github.com/syvanpera)

---

## Resolved Bugs/Features

* [Issue #437](https://github.com/derailed/k9s/issues/437) Error when viewing cluster role on a role binding.
* [Issue #434](https://github.com/derailed/k9s/issues/434) Same key `?` toggle help.
* [Issue #432](https://github.com/derailed/k9s/issues/432) Add address field to port forwards.
* [Issue #431](https://github.com/derailed/k9s/issues/431) Add LimitRange resource support.
* [Issue #430](https://github.com/derailed/k9s/issues/430) Add HotKey support.
* [Issue #426](https://github.com/derailed/k9s/issues/426) Address slow scroll while in table view.
* [Issue #417](https://github.com/derailed/k9s/issues/417) Ensure code lints correctly. Thank you Gustavo!!
* [Issue #415](https://github.com/derailed/k9s/issues/415) Add provisions to support longer clusterinfo/namespace header.
* [Issue #408](https://github.com/derailed/k9s/issues/408) Same key toggle inverse sort.
* [Issue #402](https://github.com/derailed/k9s/issues/402) Add `all` support to plugin scope.
* [Issue #401](https://github.com/derailed/k9s/issues/401) Add support for custom plugins on all views.
* [Issue #397](https://github.com/derailed/k9s/issues/397) Support HPA v2beta1 + v2beta2.

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.1.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.1

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

First casualties... As my pappy used to say `can't cook without making a big mess`. Also reminds me of his very last words `A Truck?`...

---

## Resolved Bugs/Features

* [Issue #450](https://github.com/derailed/k9s/issues/450) Skins work messed up the UI. Thank you [Julio H Morimoto](https://github.com/juliohm1978)!!

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.2.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.2

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

---

## Resolved Bugs/Features

* [Issue #451](https://github.com/derailed/k9s/issues/451)
* [Issue #415](https://github.com/derailed/k9s/issues/415)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.3.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.3

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

Thank you all for kicking the tires on these new drops and in making sure we get back to nominal quickly. You guys ROCK!!

---

## Resolved Bugs/Features

* [Issue #455](https://github.com/derailed/k9s/issues/455)
* [Issue #454](https://github.com/derailed/k9s/issues/454)
* [Issue #453](https://github.com/derailed/k9s/issues/453)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.4.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.4

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

---

## Resolved Bugs/Features

* [Issue #456](https://github.com/derailed/k9s/issues/456)
* [Issue #452](https://github.com/derailed/k9s/issues/452)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.5.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.5

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

Starting the new year with a ... Bug!

Hopefully moving the needle a bit more in the right direction??

---

## Resolved Bugs/Features

* [Issue #457](https://github.com/derailed/k9s/issues/457)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.6.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.6

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

---

## Resolved Bugs/Features

* [Issue #452](https://github.com/derailed/k9s/issues/452)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.7.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.7

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

---

## Resolved Bugs/Features

* [Issue #458](https://github.com/derailed/k9s/issues/458)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.8.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.8

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

---

## Resolved Bugs/Features

* [Issue #460](https://github.com/derailed/k9s/issues/460)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.10.9.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.10.9

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release!

---

## Resolved Bugs/Features

* [Issue #461](https://github.com/derailed/k9s/issues/461)
* [Issue #462](https://github.com/derailed/k9s/issues/462)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.11.0.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.11.0

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_helm.png" align="center" width="300" height="auto"/>

## Change Logs

### Anyone At The Helm?

K9s now offers preliminary support for Helm 3 charts! It's been a long time coming and I know a few early users had mentioned the need, but I wanted to see where Helm3 was going first. This is a preview release to see how we fair in Helm land. Besides managing your installed charts, you will be able to perform the following operations:

* Uninstall a chart
* View chart release notes
* View deployed manifests

#### How to use?

Simply enter `:charts` K9s alias command to view the deployed Helm3 charts on your cluster.

If you're using Helm3 in your current clusters, please give it a rip and also pipe in for potential features/enhancements. Mind the gap here as the paint on this feature is totally fresh...

### Bring Out Your Deads...

There are also a few bugs fixes from the refactor aftermath that made this drop. I know this was a bit of a brutal transition, so thank you all for your patience and for filing issues! I am hopeful that K9s will stabilize quickly so we can move on to bigger things.

---

## Resolved Bugs/Features

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.11.1.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.11.1

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_helm.png" align="center" width="300" height="auto"/>

Maintenance Release!

---

## Resolved Bugs/Features

* [Issue #466](https://github.com/derailed/k9s/issues/466)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.11.2.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.11.2

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_helm.png" align="center" width="300" height="auto"/>

Maintenance Release!

---

## Resolved Bugs/Features

* [Issue #469](https://github.com/derailed/k9s/issues/469)
* [Issue #468](https://github.com/derailed/k9s/issues/468)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2020 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.11.3.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.11.3

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_helm.png" align="center" width="300" height="auto"/>

Maintenance Release!

### Speedy Gonzales?

In this drop, we took a bit of a perf pass in light of recent issues and thanks to [Chris Werner Rau](https://github.com/cwrau) pushing me and keeping me up to speed, I've digged a bit deeper and found that there might be some seemingly innocent calls that sucked a bit of cycles during K9s refreshes. Long story short, I think this drop will improve perf by a factor of ~10x in some instances. Typically the initial load will be slower but subsequent loads should be much faster. Famous last words right? Anyhow, can't really take credit for this one as the awesome [Gustavo Silva Paiva](https://github.com/paivagustavo) suggested doing this a while back, but since I was already in flight with the refactor decided to punt until back online. And here we are now...

Hopefully these findings will coalesce with yours?? If not, please forward bulk Prozac patches at the address below ;)

Thanks Chris! Was up all night trying to figure out and what was the deal with K9s and your specific clusters. Hopefully this time for sure??

---

## Resolved Bugs/Features

* [Issue #475](https://github.com/derailed/k9s/issues/475)
* [Issue #473](https://github.com/derailed/k9s/issues/473)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2020 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.12.0.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.12.0

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

### Searchable Logs

There has been quite a few demands for this feature. It should now be generally available in this drop. It works the same as the resource view ie `/fred`, you can also specify a fuzzy filter using `/-f blee-duh`. The paint is still fresh on that deal and not super confident that it will work nominally as I had to rework the logs to enable. So totally possible I've hosed something in the process.

### APIServer Dud

At times, it could be you've lost your api server connection while K9s was up which resulted in the `K9s screen of death` or in other words a hosed terminal session ;(. K9s should now detect this condition and close out. Once again no super sure about this implementation on that deal. So if you see K9s close out under normal condition, that means I would need to go back to the drawing board.

### FullScreen Logs

I've been told having a flag to set fullScreen mode preference while viewing the logs would be `awesome`. Thanks [Fardin Khanjani](https://github.com/fardin01)!
So there is now a new K9s config flag available to set your fullscreen logs `drathers` in your .k9s/config.yml. This flag defaults to false if not set.

Here is a snippet:

```yaml
# .k9s/config.yml
k9s:
  refreshRate: 2
  headless: false
  currentContext: crashandburn666
  currentCluster: slowassnot
  fullScreenLogs: true
  ...
```

### K9s Slackers

I've enabled a [K9s slack channel](https://join.slack.com/t/k9sers/shared_invite/enQtOTAzNTczMDYwNjc5LWJlZjRkNzE2MzgzYWM0MzRiYjZhYTE3NDc1YjNhYmM2NTk2MjUxMWNkZGMzNjJiYzEyZmJiODBmZDYzOGQ5NWM) dedicated to all K9sers. This would be a place for us to meet and discuss ideas and use cases. I'll be honest here I am not a big slack aficionado as I don't do very well with interrupt drive workflows. But I think it would be a great resource for us all.

NOTE: Please be kind to each others and threat everyone with respect as I would like this to be a safe and fun place for folks to hangout. Thank you for you support and understanding!!

NOTE: I'll admit my slackFU is pretty low, so if you're a slack master, feel free to advise me for best practices around setup and management, etc... Thank you!

---

## Resolved Bugs/Features

* [Issue #484](https://github.com/derailed/k9s/issues/484)
* [Issue #481](https://github.com/derailed/k9s/issues/481)
* [Issue #480](https://github.com/derailed/k9s/issues/480)
* [Issue #479](https://github.com/derailed/k9s/issues/479)
* [Issue #477](https://github.com/derailed/k9s/issues/477)
* [Issue #476](https://github.com/derailed/k9s/issues/476)
* [Issue #468](https://github.com/derailed/k9s/issues/468)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2020 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.2.0.md
================================================
# Release v0.2.0

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

+ [Feature #97](https://github.com/derailed/k9s/issues/97)
  Changed log view to now use kubectl logs shell command.
  There were some issues with the previous implementation with missing info and panics.
  NOTE! User must type Ctrl-C to exit the logs and navigate back to K9s
+ Reordered containers to show spec.containers first vs spec.initcontainers.
+ [Feature #29](https://github.com/derailed/k9s/issues/29)
  Side effect of #97 Log coloring if present, will now show in the terminal.

---

## Resolved Bugs

* [Issue #99](https://github.com/derailed/k9s/issues/99)
* [Issue #100](https://github.com/derailed/k9s/issues/100)

================================================
FILE: change_logs/release_0.2.1.md
================================================
# Release v0.2.1

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

+ Bad call on the log view! Reverted to original and on the radar
  for a rewrite. This will most likely introduce some
  disturbance in the log force, but the previous solution would not
  work for init containers and not running pods.
+ Added live resource filters + alias view
+ Surfaced elevator control for table view navigation

---

## Resolved Bugs


================================================
FILE: change_logs/release_0.2.2.md
================================================
# Release v0.2.2

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

+ [Feature #98](https://github.com/derailed/k9s/issues/98) Pod view with node name.
+ [Feature #29](https://github.com/derailed/k9s/issues/29) Support ANSI colors in logs.
+ [Feature #105](https://github.com/derailed/k9s/issues/29) [Experimental] Add support for manual refresh.

---

## Resolved Bugs

+ [Issue #102](https://github.com/derailed/k9s/issues/102)
+ [Issue #104](https://github.com/derailed/k9s/issues/104)

================================================
FILE: change_logs/release_0.2.3.md
================================================
# Release v0.2.3

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

---

## Resolved Bugs

+ [Issue #109](https://github.com/derailed/k9s/issues/109)

================================================
FILE: change_logs/release_0.2.4.md
================================================
# Release v0.2.4

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

+ [Issue #87](https://github.com/derailed/k9s/issues/87) Added confirmation dialog on
  resource deletion. Either hit <ESC> or <Cancel> button to bail out of deletion.

---

## Resolved Bugs


================================================
FILE: change_logs/release_0.2.5.md
================================================
# Release v0.2.5

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

+ Added a help view to show available key bindings. Use `<?>` to access it.
+ Alias view is now accessible via key `<a>`
+ Pressing `<enter>` while on the namespace/context views will navigate directly to the pods view.
+ Added resource view breadcrumbs to easily navigate in history. Use key `<p>` to navigate back.
+ Added configuration `logBufferSize` to limit the size of the log view while viewing chatty or big logs.

---

## Resolved Bugs

+ [Issue #116](https://github.com/derailed/k9s/issues/116)
+ [Issue #113](https://github.com/derailed/k9s/issues/113)
+ [Issue #111](https://github.com/derailed/k9s/issues/111)
+ [Issue #110](https://github.com/derailed/k9s/issues/110)

================================================
FILE: change_logs/release_0.2.6.md
================================================
# Release v0.2.6

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

1. Preliminary drop on sorting by resource columns
2. Add sort by namespace, name and age for all views
3. Add invert sort functionality on all sortable views
4. Add sort on pod views for metrics and most other columns
5. For all other views we will add custom sort on a per request basis


---

## Resolved Bugs

+ [Issue #117](https://github.com/derailed/k9s/issues/117)
  Was filtering out inactive ns which need to be there for all to see anyway!
+ [Issue #59](https://github.com/derailed/k9s/issues/59)


================================================
FILE: change_logs/release_0.3.0.md
================================================
# Release v0.3.0

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

1. [Feature #127](https://github.com/derailed/k9s/issues/127)
   Added PodDisruptionBudgets initial support.

---

## Resolved Bugs

+ [Issue #126](https://github.com/derailed/k9s/issues/126)
+ [Issue #125](https://github.com/derailed/k9s/issues/125)
+ [Issue #122](https://github.com/derailed/k9s/issues/122) With feeling!


================================================
FILE: change_logs/release_0.3.1.md
================================================
# Release v0.3.1

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

1. Refactored a lot of code! So please watch for disturbance in the force!
1. Changed cronjob and job aliases names to `cj` and `jo` respectively
1. *JobView*: Added new columns
   1. Completions
   2. Containers
   3. Images
1. *NodeView* Added the following columns:
   1. Available CPU/Mem
   2. Capacity CPU/Mem
1. *NodeView* Added sort fields for cpu and mem

---

## Resolved Bugs

+ [Issue #133](https://github.com/derailed/k9s/issues/133)
+ [Issue #132](https://github.com/derailed/k9s/issues/132)
+ [Issue #129](https://github.com/derailed/k9s/issues/129) The easiest bug fix to date ;)


================================================
FILE: change_logs/release_0.3.2.md
================================================
# Release v0.3.2

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

1. [Feature #124](https://github.com/derailed/k9s/issues/124)
   1. *NodeView* Add current cpu/memory percentages to track current load on nodes.
   2. *NodeView* Add requested cpu/memory percentages to track how many container
     resources are requested on the cluster.
   3. *NodeView* Add requested cpu/memory raw metrics
   4. *NodeView* Add corresponding column sorters


---

## Resolved Bugs

+ None


================================================
FILE: change_logs/release_0.3.3.md
================================================
# Release v0.3.3

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support!!

---

## Change Logs

1. [Feature #131](https://github.com/derailed/k9s/issues/131)
   Preliminary support for snapcraft builds ie read trying this out...
2. [Feature #118](https://github.com/derailed/k9s/issues/118) Add arm 32/64 bit builds.
   NOTE: will need help vetting this out as my RPi cluster is currently down.

---

## Resolved Bugs

+ [Feature #132](https://github.com/derailed/k9s/issues/132). With feelings!


================================================
FILE: change_logs/release_0.4.0.md
================================================
# Release v0.4.0

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

---

## Change Logs

> NOTE! Lots of changes here, please report any disturbances in the force. Thank you!

1. [Feature #82](https://github.com/derailed/k9s/issues/82)
   1. Added ability to view RBAC policies while in clusterrole or role view.
   2. The RBAC view will auto-refresh just like any K9s views hence showing live RBAC updates
   3. RBAC view supports standard K8s verbs ie get,list,deletecollection,watch,create,patch,update,delete.
   4. Any verbs not in this standard K8s verb list, will end up in the EXTRAS column.
   5. For non resource URLS, we map standard REST verbs to K8s verbs ie post=create patch=update, etc.
   6. Added initial sorts by name and group while in RBAC view.
   7. Usage: To activate, enter command mode via `:cr` or `:ro` for clusterrole(cr)/role(ro), select a row and press `<enter>`
   8. To bail out of the view and return to previous use `p` or `<esc>`
2. One feature that was mentioned in the comments for the RBAC feature above Tx [faheem-cliqz](https://github.com/faheem-cliqz)! was the ability to check RBAC rules for a given user. Namely reverse RBAC lookup
   1. Added a new view, code name *Fu* view to show all the clusterroles/roles associated with a given user.
   2. The view also supports for checking RBAC Fu for a user, a group or an app via a serviceaccount.
   3. To activate: Enter command mode via `:fu` followed by u|g|s:subject + `<enter>`.
      For example: To view user *fred* Fu enter `:fu u:fred` + `<enter>` will show all clusterroles/roles and verbs associated
      with the user *fred*
   4. For group Fu lookup, use the same command as above and substitute `u:fred` with `g:fred`
   5. For ServiceAccount *fred* Fu check: use `s:fred`
3. Eliminated jitter while scrolling tables


---

## Resolved Bugs

+ None


================================================
FILE: change_logs/release_0.4.1.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>


# Release v0.4.1

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

---

## Change Logs

### o Subject View

   You can now view users/groups that are bound by RBAC rules without having to type to full subject name.
   To activate use the following command mode

   ```text
   # For users
   :usr
   # For groups
   :grp
   ```

   These commands will pull all the available cluster and role bindings associated with these subject types.
   Use select + `<enter>` to see the associated RBAC policy rules.
   You can also filter/sort, like in any other K9s views with the added bonus of auto updates when new user/group bindings come into your clusters.

   To see ServiceAccount RBAC policies, you can navigate to the serviceaccount view aka `:sa` and select + `<enter>` to view the associated policy rules.

### o ~~FuView~~ is now PolicyView

  The Fu command has been deprecated for pol(icy) command to see all RBAC policies available on a subject. You can use `pol` (instead of `fu`) to list out RBAC policies associated with a
  user/group or serviceaccount.

  ```text
  # To list out all the RBAC policies associated with user `fernand`
  :pol u:fernand
  ```

### Enter. Yes Please!

  Pressing `<enter>` on most resource views will now describe the resource by default.

---

## Resolved Bugs

+ RBAC long subject names [Issue #143](https://github.com/derailed/k9s/issues/143)
+ Support HPA v1 [Issue #140](https://github.com/derailed/k9s/issues/140)
  > NOTE: Describe on v1 HPA is busted just like it is when running kubectl v1.13
  > against an older cluster.

---


<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.4.2.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.4.2

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### o Decode Secrets On Demand

  Secrets can now be base64 decoded to view their actual content.

  In the secret view you can use `ctrl-x` to decode a selected secret. [Feature #123](https://github.com/derailed/k9s/issues/123)

### o YAML Highlighter

  Describe and YAML commands will now yield syntax highlighted view.
  [Feature #142](https://github.com/derailed/k9s/issues/142)

---

## Resolved Bugs

+ Sort by age busted [Issue #145](https://github.com/derailed/k9s/issues/145)
+ Logs not escaped correctly [Issue #137](https://github.com/derailed/k9s/issues/137)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.4.3.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.4.3

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

---

## Resolved Bugs

+ Sort by age busted (with feeling edition!) [Issue #145](https://github.com/derailed/k9s/issues/145)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.4.4.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.4.4

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Exiting K9s

  There are a few debates about drathers on K9s key bindings. I have caved in
  and decided to give up my beloved 'q' for quit which will no longer be bound. As of this release quitting K9s must be done via `:q` or `ctrl-c`.

### Container Logs

  [Feature #147](https://github.com/derailed/k9s/issues/147). The default behavior was to pick the first available container. Which meant if the pod has an init container, the log view would choose that.
  The view will now choose the first non init container. Most likely it
  would be the wrong choice in pod's sidecar scenarios, but for the time
  being showing log on one of the init containers just did not make much sense. You can still pick other containers via the menu options. We will implement a better solution for this soon...

### Delete Dialog

  [Feature #146](https://github.com/derailed/k9s/issues/146) Tx @dperique!
  Pressing `<enter>` on the delete dialog would delete the resource. Now
  `cancel` is the default button. Hence you must use `<tab>` or `->` to
  select `OK` then press `<enter>` to delete.

---

## Resolved Bugs

+ None

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.4.5.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.4.5

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Multi containers

  There was an [issue](https://github.com/derailed/k9s/issues/135) where we ran into limitations with the container
  selection keyboard shortcuts only allowing up to 10 containers. In this release, we've changed to a pick list vs the menu
  to select containers for both shell and logs access. This gives K9s the ability to select up to 26 containers now. This
  is not in any way an *encouragement* to have so many containers per pods!!

### Alias View ShortCut

  The change above entailed having to move the alias shortcut to `A` vs `a` as the pick list shortcuts conflicted with
  the alias view keyboard activation.


---

## Resolved Bugs

+ [Issue #152](https://github.com/derailed/k9s/issues/152)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.4.6.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.4.6

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest
rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

---

## Resolved Bugs

+ Node overview column ordering [Issue #153](https://github.com/derailed/k9s/issues/153)
+ Changed foreground color on container pick list [Issue #132](https://github.com/derailed/k9s/issues/132)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.4.7.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.4.7

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Popeye Support

Managing and operating a cluster is the wild is hard and getting harder.
I've created [Popeye](https://github.com/derailed/popeye) to help with cluster sanitation and best practices. Since K9s folks are so awesome, you're getting a sneak peek! I figured why not integrate it with K9s? No need to install yet another CLI right? Provided I did not mess this up too much, you should now be able to use command mod `:popeye` to access Popeye sanitizer reports within
K9s and scan your clusters. You can read more about it [here](https://medium.com/@fernand.galiana/k8s-clusters-oh-biff-em-popeye-637e9312963)
and if you like so give it a clap or two ;)

NOTE: In a K9s environment, if you'd like to specify a spinach config file, you must set it in your $HOME/.k9s/spinach.yml.

NOTE: There is a bit more that need to be done on this integration to be complete. Please file an issue if something does not work as expected.

NOTE: Popeye will run its own course and K9s is just a viewer for it, so if you'd like additional sanitation or find Popeye related issues, please tune to the corresponding repo!

Let us know if you dig it? And share your before/after clusters scores!

---

## Resolved Bugs

+ Great find! Thank you @swe-covis! Moved alias view to `Ctrl-A` [Issue #156](https://github.com/derailed/k9s/issues/156)
+ Added toggle autoscroll via `s` key [Issue #155](https://github.com/derailed/k9s/issues/155)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.4.8.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.4.8

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try
to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

---

## Resolved Bugs

+ [Issue #159](https://github.com/derailed/k9s/issues/159)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.5.0.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.5.0

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

I am super excited about this drop of K9s. Lots of cool improvements based on K9s friends excellent feedback!


### Popeye

Turns out [Popeye](https://github.com/derailed/popeye) is in too much flux at present, thus I've decided to remove it from K9s for the time being.

### ContainerView

Added a container view to list all the containers available on a given pod. On a selected pod, you can now press `<enter>` to view all of it's associated containers. Once in container view pressing `<enter>` on a selected container, will show the container logs.

### Resource Traversals

> Ever wanted to know where your pods originated from?

Fear not, K9s has got your back! Some folks have expressed desires to navigate from a deployment to its pods or see which pods are running on a given node. Whether you are starting from a Node, a Deployment, ReplicaSet, DaemonSet or StatefulSet, you can now simply `<enter>` of a selected item a view the associated pods. [Issue #149](https://github.com/derailed/k9s/issues/149)

### RollingBack ReplicaSets

You can now select a ReplicaSet and rollback your Deployment to that version. Enter the command mode via `:rs` to view ReplicaSets, select the replica you want to rollback to and use `Ctrl-B` to rollback your deployment to that revision.

---

## Resolved Bugs

+ [Issue #163](https://github.com/derailed/k9s/issues/163)
+ [Issue #162](https://github.com/derailed/k9s/issues/162)
+ [Issue #39](https://github.com/derailed/k9s/issues/39)
+ [Issue #27](https://github.com/derailed/k9s/issues/27)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.5.1.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.5.1

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Minor code cleanup and some display bug fixes.

---

## Resolved Bugs

+ [Issue #168](https://github.com/derailed/k9s/issues/168)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.5.2.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.5.2

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs


---

## Resolved Bugs

+ [Issue #171](https://github.com/derailed/k9s/issues/171)
+ [Issue #173](https://github.com/derailed/k9s/issues/173)
+ [Issue #174](https://github.com/derailed/k9s/issues/174)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.0.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.0

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### K9s Got Skins

You can now skin K9s based on your own sense of style. Skinning, is currently limited to color variations and is still very much experimental. More details on how to achieve this is provided in the README and skins sample directory on this repo. This could be a prime opportunity for someone to contribute to this project and help us come up with some cooler looks and share with all K9s folks. Any cool skins contributed will be added and featured in this repo 🐶!

### Possible instability

Just spent my birthday weekend tracking down a weird synchronization issue ;( I might have introduced some instability in the process. So please thread lightly and
please report any weirdness. Thank you!!

---

## Resolved Bugs

+ [Issue #169](https://github.com/derailed/k9s/issues/169)
+ [Issue #171](https://github.com/derailed/k9s/issues/171)
+ [Issue #172](https://github.com/derailed/k9s/issues/172)
+ [Issue #175](https://github.com/derailed/k9s/issues/175)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.1.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.1

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

---

## Resolved Bugs

+ [Issue #171](https://github.com/derailed/k9s/issues/171) With feelings...

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.2.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.2

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Performance

In our attempt to remediate screens lock outs, it looks like K9s performance on certain clusters took a major dive. In this drop we've taken a peek at improving some of the perf issues tho much more investigating does remain. Big ATTA Boys! in effect this week to @eldada and @despairblue for kind support in helping me track down some of these issues. We're not done yet but hopefully this drop will be a bit of an improvement in the 0.6.x lineage. Thank you all for your patience and support!!

---

## Resolved Bugs

+ [Issue #176](https://github.com/derailed/k9s/issues/171) Fingers crossed it's a better drop 🙏🐭?

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.3.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.3

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Performance... With feelings!

Ran thru another perf pass and hope I've pushed the needle in the right direction? K9s is now leveraging informers which I think came out of CRDs work. Our initial assessments shows numbers to μsecond updates, down from milliseconds 🎉. Hopefully the outputs are still correct as I have the tendency to make things much faster with incorrect results ;( We hope to hear back from you with a report from your clusters and assessments and brace for good news? This was a deep cycle thru K9s core and more perf will be gained, once we get a chance to vet this new strategy. I'd like to take this opportunity to thank you all for your patience and incredible kindness and support. We certainly hope this drop won't turn out to be a dud as I am fresh out of prozac patches 😩

---

## Resolved Bugs

+ [Issue #176](https://github.com/derailed/k9s/issues/171) Fingers crossed it's a better drop 🙏🐭?

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.4.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.4

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Aftermath...

Various bug fixes and cleanup items.

---

## Resolved Bugs


---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.5.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.5

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

---

## Resolved Bugs

+ [Issue #178](https://github.com/derailed/k9s/issues/178)
+ [Issue #179](https://github.com/derailed/k9s/issues/179)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.6.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.6

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

---

## Resolved Bugs

+ [Issue #180](https://github.com/derailed/k9s/issues/180)
+ [Issue #181](https://github.com/derailed/k9s/issues/181)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.6.7.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.6.7

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes!

If you've filed an issue please help me verify and close.

Thank you so much for your support and awesome suggestions to make K9s better!!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

This is a maintenance release to mainly resolve outstanding issues and bugs.

### Tracking Percentages

Added two new columns to track cpu/memory utilization on metrics-server enabled clusters. These apply to pod,container and node view.

---

## Resolved Bugs

+ [Issue #192](https://github.com/derailed/k9s/issues/192)
+ [Issue #190](https://github.com/derailed/k9s/issues/190)
+ [Issue #189](https://github.com/derailed/k9s/issues/189)
+ [Issue #185](https://github.com/derailed/k9s/issues/185)
+ [Issue #171](https://github.com/derailed/k9s/issues/171)
+ [Issue #155](https://github.com/derailed/k9s/issues/155)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.0.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.0

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Labor Day Weekend?

I always seem to get this wrong... Does Labor Day weekend mean you get to work on your OSS projects all weekend?

I am very excited about this drop and hopefully won't be unanimous (?) on this? 🐭

For the impatient watch this! [K9s v0.7.0 Features](https://youtu.be/83jYehwlql8)

### Service Traversals

Provided your K8s services are head(Full), you can now navigate to the pods that match the service selector. So you will be able to traverse Pods/Containers directly from a service just like other resources like deployment, cron, sts...

### Moving Forward!

In this drop, we've added support for port-forwarding that allows you to exercise your container from your local machine. To setup a port-forward, from the Pod view drill down to a selected Pod's containers, select the container that exposes the port of interest and hit `Ctrl-F`. A dialog will popup allowing you to configure a localhost port to forward to. Once set up, K9s will take you to the new PortForward view aka `pf`. Pending your terminal feature and container setup, you should be able to pop the forwarded URL directly into your browse. On iTerm2 me think `command+click` does the trick?

Big thanks and ATTABOY! in full effect all week to [Brent](https://github.com/brentco) for filing this initial issue. Please keep in mind, these port-forward babies are a bit expensive to run, so make sure you choose wisely and delete any superfluous PFs!!

This feature is still work in progress. It does require a new config file to help assist with URL configurations. As it stands, your PortForwards are in effect for the current K9s session and will be terminated on exit. Please thread lightly and checkout the README under the Benchmarking section. Your feedback on this as always, is welcome and encouraged!

### Hey now!

This is one feature that I think is, pardon my french.., totally `Bitch'n`! K9s now bundles [Hey](https://github.com/rakyll/hey) CLI tool from the extremely talented Jaana Dogan of Google fame. Hey allows you to benchmark HTTP service endpoints similar to apache bench.

Benchmarking is enabled via keyboard shortcuts `Ctrl-B` and `Alt-B` to activate/cancel a benchmark while in PortForward and Service view. Benchmarking a service assumes the HTTP service is exposed either as NodePort or LoadBalancer. To view your benchmarks, navigate to the new Benchmark view aka `:be<ENTER>` to list your benchmarks and runs statistics.

So you now have the ability to stretch out your cluster legs by benchmarking your pods and services and gather all kind of interesting statistics directly in K9s. Generating load on your resources will help you tune your cluster resources, exercise your auto scalers, compare Canary builds perf, etc...

Please keep in mind, this is very much a moving target at this point and will change. Ingress support will come next once we solidify the existing feature. Also checkout the README for additional configuration for this feature. With the understanding the Full Monty is coming, please help us solidify these features as these are the base ingredients to even cooler things coming down the line...

> NOTE! As with anything in life `Aim small, Miss small!`. You could totally overwhelm K9s with over-zealous benchmarks and port-forwards, so please start small say C:1 N:1000, measure and go from there.

---

## Resolved Bugs/Features

+ [Issue #198](https://github.com/derailed/k9s/issues/198)
+ [Issue #197](https://github.com/derailed/k9s/issues/197)
+ [Issue #195](https://github.com/derailed/k9s/issues/195) Thanks to the awesome [Sebastiaan](https://github.com/tammert). You Rock Sir!!
+ [Issue #194](https://github.com/derailed/k9s/issues/194)
+ [Issue #187](https://github.com/derailed/k9s/issues/187)
+ [Issue #119](https://github.com/derailed/k9s/issues/119) Added `Ctrl-S` shortcut to dump table data as csv and log data as text.
+ [Issue #69](https://github.com/derailed/k9s/issues/69)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.1.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.1

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### AfterMath

Looks like I've broken some stuff in the excitement of 0.7.0! As I ran thru the video this am, I noticed the last minute screen dumps might not be a viable feature. As [Norbert](https://github.com/ncsibra) correctly points out, in issue #187 (Thanks Norbert!!), retrieving screen dumps was a pain. So I've put together a quick ScreenDump view alias `sd` to view the screen snapshots and allows to pop your editor of choice upon selection to view the screen dump file content.

NOTE: You will need to use an EDITOR env var to tell K9s which editor you want to use.

```shell
# For example...
export EDITOR=vim
```

This is a quick turn around, hopefully I did not hose anything else in the process ;(

---

## Resolved Bugs/Features

+ [Issue #200](https://github.com/derailed/k9s/issues/200)
+ [Issue #187](https://github.com/derailed/k9s/issues/187)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.10.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.10

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Meow! Looks like v0.7.9 hosed the logger ;) Sorry!!

---

## Resolved Bugs/Features

+ [Issue #245](https://github.com/derailed/k9s/issues/245)
+ [Issue #231](https://github.com/derailed/k9s/issues/231)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.11.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.11

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release. Just code clean up and small bug fixes.

---

## Resolved Bugs/Features


---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.12.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.12

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release. Just code clean up and bug fixes.

---

## Resolved Bugs/Features

+ [Issue #259](https://github.com/derailed/k9s/issues/259)
+ [Issue #258](https://github.com/derailed/k9s/issues/258)
+ [Issue #256](https://github.com/derailed/k9s/issues/256)
+ [Issue #255](https://github.com/derailed/k9s/issues/255)
+ [Issue #252](https://github.com/derailed/k9s/issues/252)
+ [Issue #250](https://github.com/derailed/k9s/issues/250)
+ [Issue #246](https://github.com/derailed/k9s/issues/246)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.13.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.13

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release bug fixes

---

## Resolved Bugs/Features

+ [Issue #266](https://github.com/derailed/k9s/issues/266)
+ [Issue #262](https://github.com/derailed/k9s/issues/262)
+ [Issue #246](https://github.com/derailed/k9s/issues/246) Thank you @mcristina422!

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.2.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.2

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Bug Fix Drop

Removed requirement that enforces node access. In the case RBAC rules are in effect and user does not have enough RBAC-Fu to list/watch cluster nodes.

---

## Resolved Bugs/Features

+ [Issue #202](https://github.com/derailed/k9s/issues/202)


---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.3.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.3

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs


---

## Resolved Bugs/Features

+ [Issue #210](https://github.com/derailed/k9s/issues/210)
+ [Issue #209](https://github.com/derailed/k9s/issues/209)
+ [Issue #206](https://github.com/derailed/k9s/issues/206) Thank you @carlowouters!!


---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.4.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.4

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release.

---

## Resolved Bugs/Features

+ [Issue #211](https://github.com/derailed/k9s/issues/210)


---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.5.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.5

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Rats, looks like 0.7.4 is a dud! Sorry my fault, feeling burned out ;(
Please upgrade to 0.7.5. Thank you for your patience and support!

---

## Resolved Bugs/Features

+ [Issue #211](https://github.com/derailed/k9s/issues/210)


---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.6.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.6

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### MultiLogs Initial Support

This is an experimental enhancement to allow to view logs for associated resources ie view logs for all containers in a pod or view container logs for pods fronted by a service, deployment, etc... directly in K9s. We've contemplated integrating the excellent `stern` CLI for this which is more full featured than the current implementation, but decided that shelling out for logs was at this juncture not ideal. Based on your feedback, we might revisit in future releases should this feature be a total dud...

### Delete Dialog

The resource delete dialog was updated to provide affordance for force and cascade deletes. This should now provide an on par behavior with the `kubectl` CLI. Cascade and force options are checkboxes, please use `<ENTER>` to toggle the flags.

---

## Resolved Bugs/Features

+ [Feature #193](https://github.com/derailed/k9s/issues/193)
+ [Issue #205](https://github.com/derailed/k9s/issues/205)
+ [Issue #212](https://github.com/derailed/k9s/issues/212)
+ [Issue #215](https://github.com/derailed/k9s/issues/215)
+ [Issue #220](https://github.com/derailed/k9s/issues/220)


---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.7.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.7

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

### Labels Filters

K9s now provides an affordance to filter Kubernetes resources by label (Feature #233. Thank you [Chad Hanley](https://github.com/cchanley2003)). In order to enable filtering by labels, enter the filter mode via `/` on any resource table and enter your label filter via `-l app=fred,env=prod` + `<ENTER>`.

---

## Resolved Bugs/Features

+ [Feature #233](https://github.com/derailed/k9s/issues/233)
+ [Issue #232](https://github.com/derailed/k9s/issues/232)
+ [Issue #230](https://github.com/derailed/k9s/issues/230)
+ [Issue #229](https://github.com/derailed/k9s/issues/229)
+ [Issue #226](https://github.com/derailed/k9s/issues/226) Thank you for the excellent PR [Yves Blusseau](https://github.com/JrCs)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.8.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.8

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

This is mainly a maintenance release a few bugs were fixed.

### Breaking Change!

We've changed the benchmarks and skins file formats in this release. Please take a peek at the README and sample skin files for the deltas.

### RBAC Checks

There was a few issues regarding running K9s on RBAC enabled clusters. It turns out some of the permission checks were faulty. In this release, we hope these are now fixed. Please send us issues if that is not the case.

---

## Resolved Bugs/Features

+ [Issue #242](https://github.com/derailed/k9s/issues/242)
+ [Issue #241](https://github.com/derailed/k9s/issues/241)
+ [Issue #201](https://github.com/derailed/k9s/issues/201)

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.7.9.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.7.9

## Notes

Thank you to all that contributed with flushing out issues with K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as always very much appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Maintenance release a few bugs and code cleanup items.

---

## Resolved Bugs/Features

---

<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2019 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)


================================================
FILE: change_logs/release_0.8.0.md
================================================
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png" align="right" width="200" height="auto"/>

# Release v0.8.0

## Notes

Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better is as ever very much noticed and appreciated!

Also if you dig this tool, please make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)

---

## Change Logs

Pretty excited about this drop! I am as ever humbled by all the cool comments and suggestions you guys are coming up with.
There are a few features that were requested that are simply excellent! Thank you all for your support, feedback and observations 👏

Now that said, some features might be more or less baked, so there might be some disturbance in the force with this drop since much code churned. So please file issues or PRs 🥰 if you notice anything that no longer works as expected.

### Client Update

In the mist of the next Kubernetes 1.16 drop, deprecating some old apis, we've decided to update K9s to support 1.15.1 client. We don't forsee any issues here but please make sure all is cool with this K9s drop on your clusters. If not please let us know so we can address. Thank you!!

### Scaling Pods

This was feature #12 filed by [Tyler Lewis](https://github.com/alairock) many moons ago. So big thanks to Tyler!! To be honest I was on the fence with this feature as I am not a big fan of one offs when it comes to cluster management. However I think it's a great way to validate adequate HPA settings while putting your cluster under load and use K9s to figure out what reasonable number of pods might be. Now this feature was not my own implementation so all kudos on this one goes to [Nathan Piper](https://github.com/nathanpiper) for spending the time to make this a reality for all of us. So many thanks to you Nathan!!
By Nathan's imple
Download .txt
gitextract_p45lhan2/

├── .codebeatsettings
├── .dockerignore
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── dependabot.yml
│   └── workflows/
│       ├── lint.yml
│       ├── stales-issues.yml
│       ├── stales-prs.yml
│       └── test.yml
├── .gitignore
├── .golangci.yml
├── .goreleaser.yml
├── .semaphore/
│   └── semaphore.yml
├── .travis.yml
├── CNAME
├── COPYING
├── Dockerfile
├── LICENSE
├── Makefile
├── README.md
├── change_logs/
│   ├── release_0.1.1.md
│   ├── release_0.1.10.md
│   ├── release_0.1.11.md
│   ├── release_0.1.2.md
│   ├── release_0.1.3.md
│   ├── release_0.1.4.md
│   ├── release_0.1.5.md
│   ├── release_0.1.6.md
│   ├── release_0.1.7.md
│   ├── release_0.1.8.md
│   ├── release_0.1.9.md
│   ├── release_0.10.0.md
│   ├── release_0.10.1.md
│   ├── release_0.10.2.md
│   ├── release_0.10.3.md
│   ├── release_0.10.4.md
│   ├── release_0.10.5.md
│   ├── release_0.10.6.md
│   ├── release_0.10.7.md
│   ├── release_0.10.8.md
│   ├── release_0.10.9.md
│   ├── release_0.11.0.md
│   ├── release_0.11.1.md
│   ├── release_0.11.2.md
│   ├── release_0.11.3.md
│   ├── release_0.12.0.md
│   ├── release_0.2.0.md
│   ├── release_0.2.1.md
│   ├── release_0.2.2.md
│   ├── release_0.2.3.md
│   ├── release_0.2.4.md
│   ├── release_0.2.5.md
│   ├── release_0.2.6.md
│   ├── release_0.3.0.md
│   ├── release_0.3.1.md
│   ├── release_0.3.2.md
│   ├── release_0.3.3.md
│   ├── release_0.4.0.md
│   ├── release_0.4.1.md
│   ├── release_0.4.2.md
│   ├── release_0.4.3.md
│   ├── release_0.4.4.md
│   ├── release_0.4.5.md
│   ├── release_0.4.6.md
│   ├── release_0.4.7.md
│   ├── release_0.4.8.md
│   ├── release_0.5.0.md
│   ├── release_0.5.1.md
│   ├── release_0.5.2.md
│   ├── release_0.6.0.md
│   ├── release_0.6.1.md
│   ├── release_0.6.2.md
│   ├── release_0.6.3.md
│   ├── release_0.6.4.md
│   ├── release_0.6.5.md
│   ├── release_0.6.6.md
│   ├── release_0.6.7.md
│   ├── release_0.7.0.md
│   ├── release_0.7.1.md
│   ├── release_0.7.10.md
│   ├── release_0.7.11.md
│   ├── release_0.7.12.md
│   ├── release_0.7.13.md
│   ├── release_0.7.2.md
│   ├── release_0.7.3.md
│   ├── release_0.7.4.md
│   ├── release_0.7.5.md
│   ├── release_0.7.6.md
│   ├── release_0.7.7.md
│   ├── release_0.7.8.md
│   ├── release_0.7.9.md
│   ├── release_0.8.0.md
│   ├── release_0.8.1.md
│   ├── release_0.8.2.md
│   ├── release_0.8.3.md
│   ├── release_0.8.4.md
│   ├── release_0.9.0.md
│   ├── release_0.9.1.md
│   ├── release_0.9.2.md
│   ├── release_0.9.3.md
│   ├── release_v0.13.0.md
│   ├── release_v0.13.1.md
│   ├── release_v0.13.2.md
│   ├── release_v0.13.3.md
│   ├── release_v0.13.4.md
│   ├── release_v0.13.5.md
│   ├── release_v0.13.6.md
│   ├── release_v0.13.7.md
│   ├── release_v0.13.8.md
│   ├── release_v0.14.0.md
│   ├── release_v0.14.1.md
│   ├── release_v0.15.0.md
│   ├── release_v0.15.1.md
│   ├── release_v0.15.2.md
│   ├── release_v0.16.0.md
│   ├── release_v0.16.1.md
│   ├── release_v0.17.0.md
│   ├── release_v0.17.1.md
│   ├── release_v0.17.2.md
│   ├── release_v0.17.3.md
│   ├── release_v0.17.4.md
│   ├── release_v0.17.5.md
│   ├── release_v0.17.6.md
│   ├── release_v0.17.7.md
│   ├── release_v0.18.0.md
│   ├── release_v0.18.1.md
│   ├── release_v0.19.0.md
│   ├── release_v0.19.1.md
│   ├── release_v0.19.2.md
│   ├── release_v0.19.3.md
│   ├── release_v0.19.4.md
│   ├── release_v0.19.5.md
│   ├── release_v0.19.6.md
│   ├── release_v0.19.7.md
│   ├── release_v0.20.0.md
│   ├── release_v0.20.1.md
│   ├── release_v0.20.2.md
│   ├── release_v0.20.3.md
│   ├── release_v0.20.4.md
│   ├── release_v0.20.5.md
│   ├── release_v0.21.0.md
│   ├── release_v0.21.1.md
│   ├── release_v0.21.10.md
│   ├── release_v0.21.2.md
│   ├── release_v0.21.3.md
│   ├── release_v0.21.4.md
│   ├── release_v0.21.5.md
│   ├── release_v0.21.6.md
│   ├── release_v0.21.7.md
│   ├── release_v0.21.8.md
│   ├── release_v0.21.9.md
│   ├── release_v0.22.0.md
│   ├── release_v0.22.1.md
│   ├── release_v0.23.0.md
│   ├── release_v0.23.1.md
│   ├── release_v0.23.10.md
│   ├── release_v0.23.2.md
│   ├── release_v0.23.3.md
│   ├── release_v0.23.4.md
│   ├── release_v0.23.5.md
│   ├── release_v0.23.6.md
│   ├── release_v0.23.7.md
│   ├── release_v0.23.8.md
│   ├── release_v0.23.9.md
│   ├── release_v0.24.0.md
│   ├── release_v0.24.1.md
│   ├── release_v0.24.10.md
│   ├── release_v0.24.11.md
│   ├── release_v0.24.12.md
│   ├── release_v0.24.13.md
│   ├── release_v0.24.14.md
│   ├── release_v0.24.15.md
│   ├── release_v0.24.2.md
│   ├── release_v0.24.3.md
│   ├── release_v0.24.4.md
│   ├── release_v0.24.5.md
│   ├── release_v0.24.6.md
│   ├── release_v0.24.7.md
│   ├── release_v0.24.8.md
│   ├── release_v0.24.9.md
│   ├── release_v0.25.0.md
│   ├── release_v0.25.1.md
│   ├── release_v0.25.10.md
│   ├── release_v0.25.11.md
│   ├── release_v0.25.12.md
│   ├── release_v0.25.13.md
│   ├── release_v0.25.14.md
│   ├── release_v0.25.15.md
│   ├── release_v0.25.16.md
│   ├── release_v0.25.17.md
│   ├── release_v0.25.18.md
│   ├── release_v0.25.19.md
│   ├── release_v0.25.2.md
│   ├── release_v0.25.20.md
│   ├── release_v0.25.21.md
│   ├── release_v0.25.3.md
│   ├── release_v0.25.4.md
│   ├── release_v0.25.5.md
│   ├── release_v0.25.6.md
│   ├── release_v0.25.7.md
│   ├── release_v0.25.8.md
│   ├── release_v0.25.9.md
│   ├── release_v0.26.0.md
│   ├── release_v0.26.1.md
│   ├── release_v0.26.2.md
│   ├── release_v0.26.3.md
│   ├── release_v0.26.4.md
│   ├── release_v0.26.5.md
│   ├── release_v0.26.6.md
│   ├── release_v0.26.7.md
│   ├── release_v0.27.0.md
│   ├── release_v0.27.1.md
│   ├── release_v0.27.2.md
│   ├── release_v0.27.3.md
│   ├── release_v0.27.4.md
│   ├── release_v0.28.0.md
│   ├── release_v0.28.1.md
│   ├── release_v0.28.2.md
│   ├── release_v0.29.0.md
│   ├── release_v0.29.1.md
│   ├── release_v0.30.0.md
│   ├── release_v0.30.1.md
│   ├── release_v0.30.2.md
│   ├── release_v0.30.3.md
│   ├── release_v0.30.4.md
│   ├── release_v0.30.5.md
│   ├── release_v0.30.6.md
│   ├── release_v0.30.7.md
│   ├── release_v0.30.8.md
│   ├── release_v0.31.0.md
│   ├── release_v0.31.1.md
│   ├── release_v0.31.2.md
│   ├── release_v0.31.3.md
│   ├── release_v0.31.4.md
│   ├── release_v0.31.5.md
│   ├── release_v0.31.6.md
│   ├── release_v0.31.7.md
│   ├── release_v0.31.8.md
│   ├── release_v0.31.9.md
│   ├── release_v0.32.0.md
│   ├── release_v0.32.1.md
│   ├── release_v0.32.2.md
│   ├── release_v0.32.3.md
│   ├── release_v0.32.4.md
│   ├── release_v0.32.5.md
│   ├── release_v0.32.6.md
│   ├── release_v0.32.7.md
│   ├── release_v0.40.0.md
│   ├── release_v0.40.1.md
│   ├── release_v0.40.10.md
│   ├── release_v0.40.11.md
│   ├── release_v0.40.2.md
│   ├── release_v0.40.3.md
│   ├── release_v0.40.4.md
│   ├── release_v0.40.5.md
│   ├── release_v0.40.6.md
│   ├── release_v0.40.7.md
│   ├── release_v0.40.8.md
│   ├── release_v0.40.9.md
│   ├── release_v0.50.0.md
│   ├── release_v0.50.1.md
│   ├── release_v0.50.10.md
│   ├── release_v0.50.11.md
│   ├── release_v0.50.12.md
│   ├── release_v0.50.13.md
│   ├── release_v0.50.14.md
│   ├── release_v0.50.15.md
│   ├── release_v0.50.16.md
│   ├── release_v0.50.17.md
│   ├── release_v0.50.18.md
│   ├── release_v0.50.2.md
│   ├── release_v0.50.3.md
│   ├── release_v0.50.4.md
│   ├── release_v0.50.5.md
│   ├── release_v0.50.6.md
│   ├── release_v0.50.7.md
│   ├── release_v0.50.8.md
│   └── release_v0.50.9.md
├── cmd/
│   ├── info.go
│   ├── info_test.go
│   ├── root.go
│   ├── testdata/
│   │   ├── k9s.yaml
│   │   └── k9s1.yaml
│   └── version.go
├── go.mod
├── go.sum
├── internal/
│   ├── client/
│   │   ├── client.go
│   │   ├── client_test.go
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── errors.go
│   │   ├── gvr.go
│   │   ├── gvr_test.go
│   │   ├── gvrs.go
│   │   ├── helper_test.go
│   │   ├── helpers.go
│   │   ├── metrics.go
│   │   ├── metrics_test.go
│   │   ├── switch_context_test.go
│   │   ├── testdata/
│   │   │   ├── config
│   │   │   ├── config.1
│   │   │   └── config.2
│   │   └── types.go
│   ├── color/
│   │   ├── colorize.go
│   │   └── colorize_test.go
│   ├── config/
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── benchmark.go
│   │   ├── benchmark_test.go
│   │   ├── color.go
│   │   ├── color_test.go
│   │   ├── config.go
│   │   ├── config_test.go
│   │   ├── data/
│   │   │   ├── config.go
│   │   │   ├── context.go
│   │   │   ├── context_int_test.go
│   │   │   ├── context_test.go
│   │   │   ├── dir.go
│   │   │   ├── dir_test.go
│   │   │   ├── feature_gate.go
│   │   │   ├── helpers.go
│   │   │   ├── helpers_test.go
│   │   │   ├── ns.go
│   │   │   ├── ns_test.go
│   │   │   ├── proxy.go
│   │   │   ├── testdata/
│   │   │   │   ├── configs/
│   │   │   │   │   ├── aws_ct.yaml
│   │   │   │   │   ├── ct-1-1.yaml
│   │   │   │   │   ├── ct-1-2.yaml
│   │   │   │   │   ├── ct-2-1.yaml
│   │   │   │   │   └── def_ct.yaml
│   │   │   │   └── data/
│   │   │   │       └── k9s/
│   │   │   │           ├── cl-1/
│   │   │   │           │   ├── ct-1-1/
│   │   │   │           │   │   └── config.yaml
│   │   │   │           │   └── ct-1-2/
│   │   │   │           │       └── config.yaml
│   │   │   │           └── cl-2/
│   │   │   │               └── ct-2-1/
│   │   │   │                   └── config.yaml
│   │   │   ├── types.go
│   │   │   ├── view.go
│   │   │   └── view_test.go
│   │   ├── files.go
│   │   ├── files_int_test.go
│   │   ├── files_test.go
│   │   ├── flags.go
│   │   ├── flags_test.go
│   │   ├── helpers.go
│   │   ├── hotkey.go
│   │   ├── hotkey_test.go
│   │   ├── json/
│   │   │   ├── schemas/
│   │   │   │   ├── aliases.json
│   │   │   │   ├── context.json
│   │   │   │   ├── hotkeys.json
│   │   │   │   ├── k9s.json
│   │   │   │   ├── plugin-multi.json
│   │   │   │   ├── plugin.json
│   │   │   │   ├── plugins.json
│   │   │   │   ├── skin.json
│   │   │   │   └── views.json
│   │   │   ├── testdata/
│   │   │   │   ├── aliases/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── context/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── hotkeys/
│   │   │   │   │   └── cool.yaml
│   │   │   │   ├── k9s/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── plugins/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   ├── snippet.yaml
│   │   │   │   │   ├── snippets.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   ├── skins/
│   │   │   │   │   ├── cool.yaml
│   │   │   │   │   └── toast.yaml
│   │   │   │   └── views/
│   │   │   │       ├── cool.yaml
│   │   │   │       └── toast.yaml
│   │   │   ├── validator.go
│   │   │   └── validator_test.go
│   │   ├── k9s.go
│   │   ├── k9s_int_test.go
│   │   ├── k9s_test.go
│   │   ├── logger.go
│   │   ├── logger_test.go
│   │   ├── mock/
│   │   │   └── test_helpers.go
│   │   ├── plugin.go
│   │   ├── plugin_test.go
│   │   ├── refresh_rate_test.go
│   │   ├── scans.go
│   │   ├── scans_test.go
│   │   ├── shell_pod.go
│   │   ├── styles.go
│   │   ├── styles_int_test.go
│   │   ├── styles_test.go
│   │   ├── templates/
│   │   │   ├── aliases.yaml
│   │   │   ├── benchmarks.yaml
│   │   │   ├── hotkeys.yaml
│   │   │   └── stock-skin.yaml
│   │   ├── testdata/
│   │   │   ├── aliases/
│   │   │   │   ├── aliases.yaml
│   │   │   │   └── plain.yaml
│   │   │   ├── benchmarks/
│   │   │   │   ├── b_containers.yaml
│   │   │   │   ├── b_containers_1.yaml
│   │   │   │   ├── b_good.yaml
│   │   │   │   ├── b_toast.yaml
│   │   │   │   └── bench-fred.yaml
│   │   │   ├── configs/
│   │   │   │   ├── default.yaml
│   │   │   │   ├── expected.yaml
│   │   │   │   ├── k9s.yaml
│   │   │   │   └── k9s_toast.yaml
│   │   │   ├── hotkeys/
│   │   │   │   └── hotkeys.yaml
│   │   │   ├── k8s.yaml
│   │   │   ├── kubes/
│   │   │   │   └── test.yaml
│   │   │   ├── plugins/
│   │   │   │   ├── dir/
│   │   │   │   │   ├── snippet.1.yaml
│   │   │   │   │   ├── snippet.2.yaml
│   │   │   │   │   └── snippet.multi.yaml
│   │   │   │   ├── plugins-toast.yaml
│   │   │   │   └── plugins.yaml
│   │   │   ├── skins/
│   │   │   │   ├── black-and-wtf.yaml
│   │   │   │   ├── boarked.yaml
│   │   │   │   └── empty.yaml
│   │   │   └── views/
│   │   │       └── views.yaml
│   │   ├── threshold.go
│   │   ├── threshold_test.go
│   │   ├── types.go
│   │   ├── views.go
│   │   ├── views_int_test.go
│   │   └── views_test.go
│   ├── dao/
│   │   ├── accessor.go
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── benchmark.go
│   │   ├── benchmark_test.go
│   │   ├── cluster.go
│   │   ├── cm.go
│   │   ├── container.go
│   │   ├── container_test.go
│   │   ├── context.go
│   │   ├── crd.go
│   │   ├── cronjob.go
│   │   ├── cruiser.go
│   │   ├── cruiser_test.go
│   │   ├── describe.go
│   │   ├── dir.go
│   │   ├── dir_test.go
│   │   ├── dp.go
│   │   ├── ds.go
│   │   ├── dynamic.go
│   │   ├── generic.go
│   │   ├── helm_chart.go
│   │   ├── helm_history.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── img_scan.go
│   │   ├── job.go
│   │   ├── log_item.go
│   │   ├── log_item_test.go
│   │   ├── log_items.go
│   │   ├── log_items_test.go
│   │   ├── log_options.go
│   │   ├── log_options_test.go
│   │   ├── node.go
│   │   ├── non_resource.go
│   │   ├── ns.go
│   │   ├── patch.go
│   │   ├── patch_test.go
│   │   ├── pod.go
│   │   ├── pod_test.go
│   │   ├── port_forward.go
│   │   ├── port_forward_test.go
│   │   ├── port_forwarder.go
│   │   ├── pulse.go
│   │   ├── rbac.go
│   │   ├── rbac_policy.go
│   │   ├── rbac_policy_test.go
│   │   ├── rbac_subject.go
│   │   ├── recorder.go
│   │   ├── reference.go
│   │   ├── registry.go
│   │   ├── registry_test.go
│   │   ├── resource.go
│   │   ├── rest_mapper.go
│   │   ├── rs.go
│   │   ├── scalable.go
│   │   ├── screen_dump.go
│   │   ├── secret.go
│   │   ├── secret_test.go
│   │   ├── sts.go
│   │   ├── svc.go
│   │   ├── table.go
│   │   ├── testdata/
│   │   │   ├── bench/
│   │   │   │   └── default_fred_1577308050814961000.txt
│   │   │   ├── benchspec.yaml
│   │   │   ├── config
│   │   │   ├── config.1
│   │   │   ├── crb.json
│   │   │   ├── dir/
│   │   │   │   ├── a/
│   │   │   │   │   └── b.yaml
│   │   │   │   └── a.yaml
│   │   │   ├── dr.json
│   │   │   ├── n1.json
│   │   │   ├── p1.json
│   │   │   └── secret.json
│   │   ├── types.go
│   │   ├── utils_test.go
│   │   └── workload.go
│   ├── health/
│   │   ├── check.go
│   │   ├── check_test.go
│   │   └── types.go
│   ├── helpers.go
│   ├── helpers_test.go
│   ├── keys.go
│   ├── model/
│   │   ├── cluster.go
│   │   ├── cluster_info.go
│   │   ├── cluster_info_test.go
│   │   ├── cmd_buff.go
│   │   ├── cmd_buff_test.go
│   │   ├── describe.go
│   │   ├── fish_buff.go
│   │   ├── fish_buff_test.go
│   │   ├── flash.go
│   │   ├── flash_test.go
│   │   ├── helpers.go
│   │   ├── helpers_int_test.go
│   │   ├── helpers_test.go
│   │   ├── hint.go
│   │   ├── hint_test.go
│   │   ├── history.go
│   │   ├── history_test.go
│   │   ├── log.go
│   │   ├── log_int_test.go
│   │   ├── log_test.go
│   │   ├── menu_hint.go
│   │   ├── menu_hint_test.go
│   │   ├── pulse.go
│   │   ├── pulse_health.go
│   │   ├── registry.go
│   │   ├── rev_values.go
│   │   ├── semver.go
│   │   ├── semver_test.go
│   │   ├── stack.go
│   │   ├── stack_test.go
│   │   ├── table.go
│   │   ├── table_int_test.go
│   │   ├── table_test.go
│   │   ├── testdata/
│   │   │   └── p1.json
│   │   ├── text.go
│   │   ├── text_test.go
│   │   ├── tree.go
│   │   ├── types.go
│   │   ├── values.go
│   │   └── yaml.go
│   ├── model1/
│   │   ├── color.go
│   │   ├── color_test.go
│   │   ├── delta.go
│   │   ├── delta_test.go
│   │   ├── fields.go
│   │   ├── header.go
│   │   ├── header_test.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── pool.go
│   │   ├── pool_test.go
│   │   ├── row.go
│   │   ├── row_event.go
│   │   ├── row_event_test.go
│   │   ├── row_test.go
│   │   ├── rows.go
│   │   ├── table_data.go
│   │   ├── table_data_test.go
│   │   ├── test_helper_test.go
│   │   └── types.go
│   ├── perf/
│   │   └── benchmark.go
│   ├── pool.go
│   ├── pool_test.go
│   ├── port/
│   │   ├── ann.go
│   │   ├── ann_test.go
│   │   ├── co_portspec.go
│   │   ├── co_portspec_test.go
│   │   ├── pf.go
│   │   ├── pf_test.go
│   │   ├── pfs.go
│   │   ├── pfs_test.go
│   │   ├── tunnel.go
│   │   └── tunnel_test.go
│   ├── render/
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── base.go
│   │   ├── benchmark.go
│   │   ├── benchmark_int_test.go
│   │   ├── cm.go
│   │   ├── container.go
│   │   ├── container_int_test.go
│   │   ├── container_test.go
│   │   ├── context.go
│   │   ├── context_test.go
│   │   ├── cr.go
│   │   ├── cr_test.go
│   │   ├── crb.go
│   │   ├── crb_test.go
│   │   ├── crd.go
│   │   ├── crd_test.go
│   │   ├── cronjob.go
│   │   ├── cronjob_test.go
│   │   ├── cust_col.go
│   │   ├── cust_col_test.go
│   │   ├── cust_cols.go
│   │   ├── cust_cols_test.go
│   │   ├── dir.go
│   │   ├── dp.go
│   │   ├── dp_test.go
│   │   ├── ds.go
│   │   ├── ds_test.go
│   │   ├── ep.go
│   │   ├── ep_test.go
│   │   ├── eps.go
│   │   ├── eps_test.go
│   │   ├── ev.go
│   │   ├── generic.go
│   │   ├── helm/
│   │   │   ├── chart.go
│   │   │   └── history.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── hpa.go
│   │   ├── hpa_test.go
│   │   ├── img_scan.go
│   │   ├── job.go
│   │   ├── job_test.go
│   │   ├── node.go
│   │   ├── node_int_test.go
│   │   ├── node_test.go
│   │   ├── np.go
│   │   ├── np_test.go
│   │   ├── ns.go
│   │   ├── ns_test.go
│   │   ├── pdb.go
│   │   ├── pdb_test.go
│   │   ├── pod.go
│   │   ├── pod_int_test.go
│   │   ├── pod_test.go
│   │   ├── policy.go
│   │   ├── policy_int_test.go
│   │   ├── policy_test.go
│   │   ├── port_forward_test.go
│   │   ├── portforward.go
│   │   ├── pv.go
│   │   ├── pv_test.go
│   │   ├── pvc.go
│   │   ├── pvc_test.go
│   │   ├── rbac.go
│   │   ├── reference.go
│   │   ├── reference_test.go
│   │   ├── render_test.go
│   │   ├── ro.go
│   │   ├── ro_test.go
│   │   ├── rob.go
│   │   ├── rob_test.go
│   │   ├── rs.go
│   │   ├── rs_test.go
│   │   ├── sa.go
│   │   ├── sa_test.go
│   │   ├── sc.go
│   │   ├── sc_test.go
│   │   ├── screen_dump.go
│   │   ├── screen_dump_test.go
│   │   ├── secret.go
│   │   ├── section.go
│   │   ├── sts.go
│   │   ├── sts_test.go
│   │   ├── subject.go
│   │   ├── svc.go
│   │   ├── svc_test.go
│   │   ├── table.go
│   │   ├── table_int_test.go
│   │   ├── table_test.go
│   │   ├── testdata/
│   │   │   ├── b1.txt
│   │   │   ├── b2.txt
│   │   │   ├── b3.txt
│   │   │   ├── b4.txt
│   │   │   ├── cj.json
│   │   │   ├── cm.json
│   │   │   ├── cr.json
│   │   │   ├── crb.json
│   │   │   ├── crd.json
│   │   │   ├── dp.json
│   │   │   ├── ds.json
│   │   │   ├── ep.json
│   │   │   ├── eps.json
│   │   │   ├── ev.json
│   │   │   ├── hpa.json
│   │   │   ├── ing.json
│   │   │   ├── job.json
│   │   │   ├── no.json
│   │   │   ├── np.json
│   │   │   ├── ns.json
│   │   │   ├── p1.json
│   │   │   ├── pdb.json
│   │   │   ├── po.json
│   │   │   ├── po_init.json
│   │   │   ├── po_sidecar.json
│   │   │   ├── pv.json
│   │   │   ├── pv_terminating.json
│   │   │   ├── pvc.json
│   │   │   ├── rb.json
│   │   │   ├── ro.json
│   │   │   ├── rs.json
│   │   │   ├── sa.json
│   │   │   ├── sc.json
│   │   │   ├── sec.json
│   │   │   ├── sts.json
│   │   │   └── svc.json
│   │   ├── types.go
│   │   └── workload.go
│   ├── slogs/
│   │   ├── child.go
│   │   └── keys.go
│   ├── tchart/
│   │   ├── component.go
│   │   ├── component_int_test.go
│   │   ├── component_test.go
│   │   ├── dot_matrix.go
│   │   ├── dot_matrix_test.go
│   │   ├── gauge.go
│   │   ├── gauge_int_test.go
│   │   ├── gauge_test.go
│   │   ├── series.go
│   │   ├── series_test.go
│   │   └── sparkline.go
│   ├── ui/
│   │   ├── action.go
│   │   ├── action_test.go
│   │   ├── app.go
│   │   ├── app_test.go
│   │   ├── config.go
│   │   ├── config_int_test.go
│   │   ├── config_test.go
│   │   ├── crumbs.go
│   │   ├── crumbs_test.go
│   │   ├── deltas.go
│   │   ├── deltas_test.go
│   │   ├── dialog/
│   │   │   ├── confirm.go
│   │   │   ├── confirm_test.go
│   │   │   ├── delete.go
│   │   │   ├── delete_test.go
│   │   │   ├── error.go
│   │   │   ├── error_test.go
│   │   │   ├── plugin_inputs.go
│   │   │   ├── prompt.go
│   │   │   ├── prompt_test.go
│   │   │   ├── restart.go
│   │   │   ├── selection.go
│   │   │   └── transfer.go
│   │   ├── flash.go
│   │   ├── flash_test.go
│   │   ├── indicator.go
│   │   ├── indicator_test.go
│   │   ├── key.go
│   │   ├── logo.go
│   │   ├── logo_test.go
│   │   ├── menu.go
│   │   ├── menu_test.go
│   │   ├── modal_list.go
│   │   ├── padding.go
│   │   ├── padding_test.go
│   │   ├── pages.go
│   │   ├── pages_test.go
│   │   ├── prompt.go
│   │   ├── prompt_test.go
│   │   ├── prompt_validation_test.go
│   │   ├── select_table.go
│   │   ├── splash.go
│   │   ├── splash_test.go
│   │   ├── table.go
│   │   ├── table_helper.go
│   │   ├── table_helper_test.go
│   │   ├── table_test.go
│   │   ├── tree.go
│   │   └── types.go
│   ├── view/
│   │   ├── actions.go
│   │   ├── actions_test.go
│   │   ├── alias.go
│   │   ├── alias_test.go
│   │   ├── app.go
│   │   ├── app_test.go
│   │   ├── benchmark.go
│   │   ├── browser.go
│   │   ├── cluster_info.go
│   │   ├── cm.go
│   │   ├── cm_test.go
│   │   ├── cmd/
│   │   │   ├── args.go
│   │   │   ├── args_test.go
│   │   │   ├── helpers.go
│   │   │   ├── helpers_test.go
│   │   │   ├── interpreter.go
│   │   │   ├── interpreter_test.go
│   │   │   └── types.go
│   │   ├── command.go
│   │   ├── command_test.go
│   │   ├── container.go
│   │   ├── container_test.go
│   │   ├── context.go
│   │   ├── context_test.go
│   │   ├── cow.go
│   │   ├── crd.go
│   │   ├── cronjob.go
│   │   ├── details.go
│   │   ├── dir.go
│   │   ├── dir_int_test.go
│   │   ├── dir_test.go
│   │   ├── dp.go
│   │   ├── dp_test.go
│   │   ├── drain_dialog.go
│   │   ├── ds.go
│   │   ├── ds_test.go
│   │   ├── env.go
│   │   ├── env_test.go
│   │   ├── event.go
│   │   ├── exec.go
│   │   ├── group.go
│   │   ├── helm_chart.go
│   │   ├── helm_history.go
│   │   ├── help.go
│   │   ├── help_test.go
│   │   ├── helpers.go
│   │   ├── helpers_test.go
│   │   ├── image_extender.go
│   │   ├── img_scan.go
│   │   ├── job.go
│   │   ├── live_view.go
│   │   ├── live_view_test.go
│   │   ├── log.go
│   │   ├── log_indicator.go
│   │   ├── log_indicator_test.go
│   │   ├── log_int_test.go
│   │   ├── log_test.go
│   │   ├── logger.go
│   │   ├── logs_extender.go
│   │   ├── node.go
│   │   ├── ns.go
│   │   ├── ns_test.go
│   │   ├── owner_extender.go
│   │   ├── page_stack.go
│   │   ├── pf.go
│   │   ├── pf_dialog.go
│   │   ├── pf_dialog_test.go
│   │   ├── pf_extender.go
│   │   ├── pf_extender_test.go
│   │   ├── pf_test.go
│   │   ├── picker.go
│   │   ├── pod.go
│   │   ├── pod_int_test.go
│   │   ├── pod_test.go
│   │   ├── policy.go
│   │   ├── priorityclass.go
│   │   ├── priorityclass_test.go
│   │   ├── pulse.go
│   │   ├── pvc.go
│   │   ├── pvc_test.go
│   │   ├── rbac.go
│   │   ├── rbac_test.go
│   │   ├── reference.go
│   │   ├── reference_test.go
│   │   ├── registrar.go
│   │   ├── restart_extender.go
│   │   ├── rs.go
│   │   ├── sa.go
│   │   ├── scale_extender.go
│   │   ├── screen_dump.go
│   │   ├── screen_dump_test.go
│   │   ├── secret.go
│   │   ├── secret_test.go
│   │   ├── sts.go
│   │   ├── sts_test.go
│   │   ├── svc.go
│   │   ├── svc_test.go
│   │   ├── table.go
│   │   ├── table_helper.go
│   │   ├── table_int_test.go
│   │   ├── testdata/
│   │   │   ├── fred/
│   │   │   │   └── kmanifests/
│   │   │   │       ├── cm.yaml
│   │   │   │       └── kustomization.yaml
│   │   │   ├── k1manifests/
│   │   │   │   ├── cm.yaml
│   │   │   │   └── kustomization.yml
│   │   │   ├── k2manifests/
│   │   │   │   ├── Kustomization
│   │   │   │   └── cm.yaml
│   │   │   ├── kmanifests/
│   │   │   │   ├── cm.yaml
│   │   │   │   └── kustomization.yaml
│   │   │   └── manifests/
│   │   │       ├── cm.yaml
│   │   │       └── kustomization.yaml
│   │   ├── types.go
│   │   ├── user.go
│   │   ├── value_extender.go
│   │   ├── vul_extender.go
│   │   ├── workload.go
│   │   ├── xray.go
│   │   ├── yaml.go
│   │   └── yaml_test.go
│   ├── vul/
│   │   ├── scan.go
│   │   ├── scanner.go
│   │   ├── scorer.go
│   │   ├── scorer_test.go
│   │   ├── table.go
│   │   ├── table_test.go
│   │   ├── tally.go
│   │   ├── tally_test.go
│   │   ├── testdata/
│   │   │   ├── sort/
│   │   │   │   ├── dups/
│   │   │   │   │   ├── sc1.text
│   │   │   │   │   └── sc2.text
│   │   │   │   ├── full/
│   │   │   │   │   ├── sc1.text
│   │   │   │   │   └── sc2.text
│   │   │   │   └── no_dups/
│   │   │   │       ├── sc1.text
│   │   │   │       └── sc2.text
│   │   │   └── sort_sev/
│   │   │       ├── dups/
│   │   │       │   ├── sc1.text
│   │   │       │   └── sc2.text
│   │   │       ├── full/
│   │   │       │   ├── sc1.text
│   │   │       │   └── sc2.text
│   │   │       └── no_dups/
│   │   │           ├── sc1.text
│   │   │           └── sc2.text
│   │   └── types.go
│   ├── watch/
│   │   ├── factory.go
│   │   ├── forwarders.go
│   │   ├── forwarders_test.go
│   │   └── helper.go
│   └── xray/
│       ├── container.go
│       ├── container_test.go
│       ├── dp.go
│       ├── dp_test.go
│       ├── ds.go
│       ├── ds_test.go
│       ├── generic.go
│       ├── generic_test.go
│       ├── ns.go
│       ├── ns_test.go
│       ├── pod.go
│       ├── pod_test.go
│       ├── rs.go
│       ├── rs_test.go
│       ├── sa.go
│       ├── sa_test.go
│       ├── section.go
│       ├── sts.go
│       ├── sts_test.go
│       ├── svc.go
│       ├── svc_test.go
│       ├── testdata/
│       │   ├── cilium.json
│       │   ├── dp.json
│       │   ├── ds.json
│       │   ├── init.json
│       │   ├── ns.json
│       │   ├── po.json
│       │   ├── rs.json
│       │   ├── sa.json
│       │   ├── sts.json
│       │   └── svc.json
│       ├── tree_node.go
│       └── tree_node_test.go
├── main.go
├── plugins/
│   ├── README.md
│   ├── ai-incident-investigation.yaml
│   ├── argo-rollouts-powershell.yaml
│   ├── argo-rollouts.yaml
│   ├── argo-workflows.yaml
│   ├── argocd.yaml
│   ├── blame.yaml
│   ├── carvel.yaml
│   ├── cert-manager.yaml
│   ├── crd-wizard.yaml
│   ├── crossplane.yaml
│   ├── current-ctx-terminal.yaml
│   ├── debug-container.yaml
│   ├── dive.yaml
│   ├── dup.yaml
│   ├── duplik8s.yaml
│   ├── eks-node-viewer.yaml
│   ├── external-secrets.yaml
│   ├── flux.yaml
│   ├── get-all-namespace-resources.yaml
│   ├── get-all.yaml
│   ├── helm-default-values.yaml
│   ├── helm-diff.yaml
│   ├── helm-purge.yaml
│   ├── helm-values.yaml
│   ├── job-suspend.yaml
│   ├── k3d-root-shell.yaml
│   ├── keda-toggle.yaml
│   ├── kube-metrics.yaml
│   ├── kubectl/
│   │   └── kubectl-purge
│   ├── kubectl-get-in-shell.yaml
│   ├── kubectl-plugins/
│   │   └── kubectl-jq
│   ├── liveMigration.yaml
│   ├── log-bunyan.yaml
│   ├── log-full.yaml
│   ├── log-jq.yaml
│   ├── log-loki.yaml
│   ├── log-stern.yaml
│   ├── node-root-shell.yaml
│   ├── openssl.yaml
│   ├── pvc-debug-container.yaml
│   ├── remove-finalizers.yaml
│   ├── resource-recommendations.yaml
│   ├── rm-ns.yaml
│   ├── spark-operator.yaml
│   ├── start-alpine.yaml
│   ├── szero.yaml
│   ├── trace-dns.yaml
│   ├── vector-dev-top.yaml
│   └── watch-events.yaml
├── skins/
│   ├── axual.yaml
│   ├── black-and-wtf.yaml
│   ├── dracula.yaml
│   ├── everforest-dark.yaml
│   ├── everforest-light.yaml
│   ├── gruvbox-dark-hard.yaml
│   ├── gruvbox-dark.yaml
│   ├── gruvbox-light-hard.yaml
│   ├── gruvbox-light.yaml
│   ├── gruvbox-material-dark-hard.yaml
│   ├── gruvbox-material-dark-medium.yaml
│   ├── gruvbox-material-dark-soft.yaml
│   ├── gruvbox-material-light-hard.yaml
│   ├── gruvbox-material-light-medium.yaml
│   ├── gruvbox-material-light-soft.yaml
│   ├── in-the-navy.yaml
│   ├── kanagawa.yaml
│   ├── kiss.yaml
│   ├── monokai.yaml
│   ├── narsingh.yaml
│   ├── nightfox.yaml
│   ├── nord.yaml
│   ├── one-dark.yaml
│   ├── red.yaml
│   ├── rose-pine-dawn.yaml
│   ├── rose-pine-moon.yaml
│   ├── rose-pine.yaml
│   ├── snazzy.yaml
│   ├── solarized-16.yaml
│   ├── solarized-dark.yaml
│   ├── solarized-light.yaml
│   ├── stock.yaml
│   ├── transparent.yaml
│   └── vercel.yaml
├── snap/
│   └── snapcraft.yaml
└── testdata/
    └── aliases/
        └── aliases.yaml
Download .txt
Showing preview only (405K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4963 symbols across 513 files)

FILE: cmd/info.go
  function infoCmd (line 19) | func infoCmd() *cobra.Command {
  function printInfo (line 27) | func printInfo(*cobra.Command, []string) error {
  function printLogo (line 49) | func printLogo(c color.Paint) {
  function getScreenDumpDirForInfo (line 57) | func getScreenDumpDirForInfo() string {

FILE: cmd/info_test.go
  function Test_getScreenDumpDirForInfo (line 13) | func Test_getScreenDumpDirForInfo(t *testing.T) {

FILE: cmd/root.go
  constant appName (line 29) | appName      = config.AppName
  constant shortAppDesc (line 30) | shortAppDesc = "A graphical CLI for your Kubernetes cluster management."
  constant longAppDesc (line 31) | longAppDesc  = "K9s is a CLI to view and manage your Kubernetes clusters."
  type flagError (line 51) | type flagError struct
    method Error (line 53) | func (e flagError) Error() string { return e.err.Error() }
  function init (line 55) | func init() {
  function Execute (line 70) | func Execute() {
  function run (line 76) | func run(*cobra.Command, []string) error {
  function loadConfiguration (line 130) | func loadConfiguration() (*config.Config, error) {
  function parseLevel (line 171) | func parseLevel(level string) slog.Level {
  function initK9sFlags (line 184) | func initK9sFlags() {
  function initK8sFlags (line 267) | func initK8sFlags() {
  function initAsFlags (line 318) | func initAsFlags() {
  function initCertFlags (line 334) | func initCertFlags() {
  type k8sPickerFn (line 372) | type k8sPickerFn
  type completeFn (line 373) | type completeFn
  function initK8sFlagCompletion (line 376) | func initK8sFlagCompletion() {
  function k8sFlagCompletion (line 401) | func k8sFlagCompletion[T any](picker k8sPickerFn[T]) completeFn {
  function filterFlagCompletions (line 413) | func filterFlagCompletions[T any](m map[string]T, s string) ([]string, c...

FILE: cmd/version.go
  function versionCmd (line 13) | func versionCmd() *cobra.Command {
  function printVersion (line 30) | func printVersion(short bool) {
  function printTuple (line 45) | func printTuple(fmat, section, value string, outputColor color.Paint) {

FILE: internal/client/client.go
  constant cacheSize (line 31) | cacheSize     = 100
  constant cacheExpiry (line 32) | cacheExpiry   = 5 * time.Minute
  constant cacheMXAPIKey (line 33) | cacheMXAPIKey = "metricsAPI"
  constant serverVersion (line 34) | serverVersion = "serverVersion"
  constant cacheNSKey (line 35) | cacheNSKey    = "validNamespaces"
  type NamespaceNames (line 41) | type NamespaceNames
  type APIClient (line 44) | type APIClient struct
    method ConnectionOK (line 85) | func (a *APIClient) ConnectionOK() bool {
    method ActiveContext (line 113) | func (a *APIClient) ActiveContext() string {
    method IsActiveNamespace (line 123) | func (a *APIClient) IsActiveNamespace(ns string) bool {
    method ActiveNamespace (line 132) | func (a *APIClient) ActiveNamespace() string {
    method clearCache (line 140) | func (a *APIClient) clearCache() {
    method CanI (line 147) | func (a *APIClient) CanI(ns string, gvr *GVR, name string, verbs []str...
    method CurrentNamespaceName (line 211) | func (a *APIClient) CurrentNamespaceName() (string, error) {
    method ServerVersion (line 216) | func (a *APIClient) ServerVersion() (*version.Info, error) {
    method IsValidNamespace (line 236) | func (a *APIClient) IsValidNamespace(ns string) bool {
    method isValidNamespace (line 248) | func (a *APIClient) isValidNamespace(n string) (bool, error) {
    method ValidNamespaceNames (line 262) | func (a *APIClient) ValidNamespaceNames() (NamespaceNames, error) {
    method CheckConnectivity (line 299) | func (a *APIClient) CheckConnectivity() bool {
    method Config (line 337) | func (a *APIClient) Config() *Config {
    method HasMetrics (line 342) | func (a *APIClient) HasMetrics() bool {
    method getMxsClient (line 346) | func (a *APIClient) getMxsClient() *versioned.Clientset {
    method setMxsClient (line 353) | func (a *APIClient) setMxsClient(c *versioned.Clientset) {
    method getCachedClient (line 360) | func (a *APIClient) getCachedClient() *disk.CachedDiscoveryClient {
    method setCachedClient (line 367) | func (a *APIClient) setCachedClient(c *disk.CachedDiscoveryClient) {
    method getDClient (line 374) | func (a *APIClient) getDClient() dynamic.Interface {
    method setDClient (line 381) | func (a *APIClient) setDClient(c dynamic.Interface) {
    method getConnOK (line 388) | func (a *APIClient) getConnOK() bool {
    method setConnOK (line 395) | func (a *APIClient) setConnOK(b bool) {
    method setLogClient (line 402) | func (a *APIClient) setLogClient(k kubernetes.Interface) {
    method getLogClient (line 409) | func (a *APIClient) getLogClient() kubernetes.Interface {
    method setClient (line 416) | func (a *APIClient) setClient(k kubernetes.Interface) {
    method getClient (line 423) | func (a *APIClient) getClient() kubernetes.Interface {
    method DialLogs (line 431) | func (a *APIClient) DialLogs() (kubernetes.Interface, error) {
    method Dial (line 454) | func (a *APIClient) Dial() (kubernetes.Interface, error) {
    method RestConfig (line 476) | func (a *APIClient) RestConfig() (*restclient.Config, error) {
    method CachedDiscovery (line 481) | func (a *APIClient) CachedDiscovery() (*disk.CachedDiscoveryClient, er...
    method DynDial (line 513) | func (a *APIClient) DynDial() (dynamic.Interface, error) {
    method MXDial (line 532) | func (a *APIClient) MXDial() (*versioned.Clientset, error) {
    method invalidateCache (line 551) | func (a *APIClient) invalidateCache() error {
    method SwitchContext (line 562) | func (a *APIClient) SwitchContext(name string) error {
    method reset (line 580) | func (a *APIClient) reset() {
    method checkCacheBool (line 593) | func (a *APIClient) checkCacheBool(key string) (state, ok bool) {
    method supportsMetricsResources (line 602) | func (a *APIClient) supportsMetricsResources() error {
  function NewTestAPIClient (line 58) | func NewTestAPIClient() *APIClient {
  function InitConnection (line 67) | func InitConnection(config *Config, log *slog.Logger) (*APIClient, error) {
  function makeSAR (line 89) | func makeSAR(ns string, gvr *GVR, name string) *authorizationv1.SelfSubj...
  function makeCacheKey (line 108) | func makeCacheKey(ns string, gvr *GVR, n string, vv []string) string {
  function checkMetricsVersion (line 637) | func checkMetricsVersion(grp *metav1.APIGroup) bool {

FILE: internal/client/client_test.go
  function TestMakeSAR (line 14) | func TestMakeSAR(t *testing.T) {
  function TestIsValidNamespace (line 85) | func TestIsValidNamespace(t *testing.T) {
  function TestCheckCacheBool (line 153) | func TestCheckCacheBool(t *testing.T) {

FILE: internal/client/config.go
  constant DefaultCallTimeoutDuration (line 23) | DefaultCallTimeoutDuration time.Duration = 120 * time.Second
  constant UsePersistentConfig (line 26) | UsePersistentConfig = true
  type Config (line 30) | type Config struct
    method CallTimeout (line 44) | func (c *Config) CallTimeout() time.Duration {
    method RESTConfig (line 56) | func (c *Config) RESTConfig() (*restclient.Config, error) {
    method Flags (line 69) | func (c *Config) Flags() *genericclioptions.ConfigFlags {
    method RawConfig (line 73) | func (c *Config) RawConfig() (api.Config, error) {
    method clientConfig (line 77) | func (c *Config) clientConfig() clientcmd.ClientConfig {
    method reset (line 81) | func (*Config) reset() {}
    method SwitchContext (line 84) | func (c *Config) SwitchContext(name string) error {
    method Clone (line 106) | func (c *Config) Clone(ns string) (*genericclioptions.ConfigFlags, err...
    method CurrentClusterName (line 125) | func (c *Config) CurrentClusterName() (string, error) {
    method CurrentContextName (line 149) | func (c *Config) CurrentContextName() (string, error) {
    method CurrentContextNamespace (line 161) | func (c *Config) CurrentContextNamespace() (string, error) {
    method CurrentContext (line 175) | func (c *Config) CurrentContext() (*api.Context, error) {
    method GetContext (line 184) | func (c *Config) GetContext(n string) (*api.Context, error) {
    method SetProxy (line 197) | func (c *Config) SetProxy(proxy func(*http.Request) (*url.URL, error)) {
    method Contexts (line 202) | func (c *Config) Contexts() (map[string]*api.Context, error) {
    method DelContext (line 212) | func (c *Config) DelContext(n string) error {
    method RenameContext (line 228) | func (c *Config) RenameContext(oldCtx, newCtx string) error {
    method ContextNames (line 258) | func (c *Config) ContextNames() (map[string]struct{}, error) {
    method CurrentGroupNames (line 272) | func (c *Config) CurrentGroupNames() ([]string, error) {
    method ImpersonateGroups (line 281) | func (c *Config) ImpersonateGroups() (string, error) {
    method ImpersonateUser (line 290) | func (c *Config) ImpersonateUser() (string, error) {
    method CurrentUserName (line 299) | func (c *Config) CurrentUserName() (string, error) {
    method CurrentNamespaceName (line 325) | func (c *Config) CurrentNamespaceName() (string, error) {
    method ConfigAccess (line 340) | func (c *Config) ConfigAccess() (clientcmd.ConfigAccess, error) {
  function NewConfig (line 37) | func NewConfig(f *genericclioptions.ConfigFlags) *Config {
  function isSet (line 350) | func isSet(s *string) bool {
  function areSet (line 354) | func areSet(ss *[]string) bool {

FILE: internal/client/config_test.go
  function init (line 21) | func init() {
  function TestCallTimeout (line 25) | func TestCallTimeout(t *testing.T) {
  function TestConfigCurrentContext (line 50) | func TestConfigCurrentContext(t *testing.T) {
  function TestConfigCurrentCluster (line 80) | func TestConfigCurrentCluster(t *testing.T) {
  function TestConfigCurrentUser (line 112) | func TestConfigCurrentUser(t *testing.T) {
  function TestConfigCurrentNamespace (line 139) | func TestConfigCurrentNamespace(t *testing.T) {
  function TestConfigGetContext (line 172) | func TestConfigGetContext(t *testing.T) {
  function TestConfigSwitchContext (line 202) | func TestConfigSwitchContext(t *testing.T) {
  function TestConfigAccess (line 217) | func TestConfigAccess(t *testing.T) {
  function TestConfigContextNames (line 230) | func TestConfigContextNames(t *testing.T) {
  function TestConfigContexts (line 243) | func TestConfigContexts(t *testing.T) {
  function TestConfigDelContext (line 256) | func TestConfigDelContext(t *testing.T) {
  function TestConfigRestConfig (line 276) | func TestConfigRestConfig(t *testing.T) {
  function TestConfigBadConfig (line 287) | func TestConfigBadConfig(t *testing.T) {
  function cp (line 300) | func cp(src, dst string) error {

FILE: internal/client/errors.go
  type Error (line 9) | type Error
    method Error (line 12) | func (e Error) Error() string {
  constant noMetricServerErr (line 17) | noMetricServerErr     = Error("No metrics-server detected")
  constant metricsUnsupportedErr (line 18) | metricsUnsupportedErr = Error("No metrics api group " + metricsapi.Group...

FILE: internal/client/gvr.go
  type GVR (line 25) | type GVR struct
    method IsAlias (line 86) | func (g *GVR) IsAlias() bool {
    method IsK8sRes (line 90) | func (g *GVR) IsK8sRes() bool {
    method WithSubResource (line 95) | func (g *GVR) WithSubResource(sub string) *GVR {
    method FQN (line 128) | func (g *GVR) FQN(n string) string {
    method AsResourceName (line 133) | func (g *GVR) AsResourceName() string {
    method SubResource (line 142) | func (g *GVR) SubResource() string {
    method String (line 147) | func (g *GVR) String() string {
    method GV (line 152) | func (g *GVR) GV() schema.GroupVersion {
    method GVK (line 160) | func (g *GVR) GVK() schema.GroupVersionKind {
    method GVR (line 169) | func (g *GVR) GVR() schema.GroupVersionResource {
    method GVSub (line 178) | func (g *GVR) GVSub() string {
    method GR (line 187) | func (g *GVR) GR() *schema.GroupResource {
    method V (line 195) | func (g *GVR) V() string {
    method RG (line 200) | func (g *GVR) RG() (resource, group string) {
    method R (line 205) | func (g *GVR) R() string {
    method G (line 210) | func (g *GVR) G() string {
    method IsDecodable (line 215) | func (g *GVR) IsDecodable() bool {
    method MarshalYAML (line 222) | func (g *GVR) MarshalYAML() (any, error) {
    method UnmarshalYAML (line 226) | func (g *GVR) UnmarshalYAML(n *yaml.Node) error {
  type gvrCache (line 29) | type gvrCache struct
    method add (line 34) | func (c *gvrCache) add(gvr *GVR) {
    method get (line 42) | func (c *gvrCache) get(gvrs string) *GVR {
  function NewGVR (line 58) | func NewGVR(s string) *GVR {
  function NewGVRFromMeta (line 100) | func NewGVRFromMeta(a *metav1.APIResource) *GVR {
  function NewGVRFromCRD (line 105) | func NewGVRFromCRD(crd *apiext.CustomResourceDefinition) map[*GVR]*apiex...
  function FromGVAndR (line 123) | func FromGVAndR(gv, r string) *GVR {
  type GVRs (line 233) | type GVRs
    method Len (line 236) | func (g GVRs) Len() int {
    method Swap (line 241) | func (g GVRs) Swap(i, j int) {
    method Less (line 246) | func (g GVRs) Less(i, j int) bool {
  function Can (line 255) | func Can(verbs []string, v string) bool {
  function mapVerb (line 278) | func mapVerb(v string) ([]string, error) {

FILE: internal/client/gvr_test.go
  function TestGVRSort (line 16) | func TestGVRSort(t *testing.T) {
  function TestGVRCan (line 30) | func TestGVRCan(t *testing.T) {
  function TestGVR (line 52) | func TestGVR(t *testing.T) {
  function TestAsGV (line 70) | func TestAsGV(t *testing.T) {
  function TestNewGVR (line 88) | func TestNewGVR(t *testing.T) {
  function TestGVRAsResourceName (line 105) | func TestGVRAsResourceName(t *testing.T) {
  function TestToR (line 124) | func TestToR(t *testing.T) {
  function TestToG (line 143) | func TestToG(t *testing.T) {
  function TestToV (line 162) | func TestToV(t *testing.T) {
  function TestToString (line 181) | func TestToString(t *testing.T) {

FILE: internal/client/helper_test.go
  function TestMetaFQN (line 14) | func TestMetaFQN(t *testing.T) {
  function TestCoFQN (line 40) | func TestCoFQN(t *testing.T) {
  function TestIsClusterScoped (line 68) | func TestIsClusterScoped(t *testing.T) {
  function TestIsNamespaced (line 97) | func TestIsNamespaced(t *testing.T) {
  function TestIsAllNamespaces (line 126) | func TestIsAllNamespaces(t *testing.T) {
  function TestIsAllNamespace (line 155) | func TestIsAllNamespace(t *testing.T) {
  function TestCleanseNamespace (line 178) | func TestCleanseNamespace(t *testing.T) {
  function TestNamespaced (line 201) | func TestNamespaced(t *testing.T) {
  function TestFQN (line 216) | func TestFQN(t *testing.T) {

FILE: internal/client/helpers.go
  function IsClusterWide (line 21) | func IsClusterWide(ns string) bool {
  function PrintNamespace (line 25) | func PrintNamespace(ns string) string {
  function CleanseNamespace (line 34) | func CleanseNamespace(ns string) string {
  function IsAllNamespace (line 43) | func IsAllNamespace(ns string) bool {
  function IsAllNamespaces (line 48) | func IsAllNamespaces(ns string) bool {
  function IsNamespaced (line 53) | func IsNamespaced(ns string) bool {
  function IsClusterScoped (line 58) | func IsClusterScoped(ns string) bool {
  function Namespaced (line 63) | func Namespaced(p string) (ns, name string) {
  function CoFQN (line 70) | func CoFQN(m *metav1.ObjectMeta, co string) string {
  function FQN (line 75) | func FQN(ns, n string) string {
  function MetaFQN (line 83) | func MetaFQN(m *metav1.ObjectMeta) string {
  function mustHomeDir (line 91) | func mustHomeDir() string {
  function toHostDir (line 100) | func toHostDir(host string) string {

FILE: internal/client/metrics.go
  constant mxCacheSize (line 21) | mxCacheSize   = 100
  constant mxCacheExpiry (line 22) | mxCacheExpiry = 1 * time.Minute
  function DialMetrics (line 29) | func DialMetrics(c Connection) *MetricsServer {
  function ResetMetrics (line 38) | func ResetMetrics() {
  type MetricsServer (line 43) | type MetricsServer struct
    method ClusterLoad (line 58) | func (*MetricsServer) ClusterLoad(nos *v1.NodeList, nmx *mv1beta1.Node...
    method checkAccess (line 89) | func (m *MetricsServer) checkAccess(ns string, gvr *GVR, msg string) e...
    method NodesMetrics (line 105) | func (*MetricsServer) NodesMetrics(nodes *v1.NodeList, metrics *mv1bet...
    method FetchNodesMetricsMap (line 134) | func (m *MetricsServer) FetchNodesMetricsMap(ctx context.Context) (Nod...
    method FetchNodesMetrics (line 150) | func (m *MetricsServer) FetchNodesMetrics(ctx context.Context) (*mv1be...
    method FetchNodeMetrics (line 181) | func (m *MetricsServer) FetchNodeMetrics(ctx context.Context, n string...
    method FetchPodsMetricsMap (line 202) | func (m *MetricsServer) FetchPodsMetricsMap(ctx context.Context, ns st...
    method FetchPodsMetrics (line 218) | func (m *MetricsServer) FetchPodsMetrics(ctx context.Context, ns strin...
    method FetchContainersMetrics (line 252) | func (m *MetricsServer) FetchContainersMetrics(ctx context.Context, fq...
    method FetchPodMetrics (line 268) | func (m *MetricsServer) FetchPodMetrics(ctx context.Context, fqn strin...
    method PodsMetrics (line 293) | func (*MetricsServer) PodsMetrics(pods *mv1beta1.PodMetricsList, mmx P...
  function NewMetricsServer (line 50) | func NewMetricsServer(c Connection) *MetricsServer {
  constant MegaByte (line 313) | MegaByte = 1024 * 1024
  function ToMB (line 316) | func ToMB(v int64) int64 {
  function ToPercentage (line 321) | func ToPercentage(v, dv int64) int {
  function ToPercentageStr (line 330) | func ToPercentageStr(v, dv int64) string {

FILE: internal/client/metrics_test.go
  function TestToPercentage (line 17) | func TestToPercentage(t *testing.T) {
  function TestToMB (line 33) | func TestToMB(t *testing.T) {
  function TestPodsMetrics (line 48) | func TestPodsMetrics(t *testing.T) {
  function BenchmarkPodsMetrics (line 93) | func BenchmarkPodsMetrics(b *testing.B) {
  function TestNodesMetrics (line 112) | func TestNodesMetrics(t *testing.T) {
  function BenchmarkNodesMetrics (line 189) | func BenchmarkNodesMetrics(b *testing.B) {
  function TestClusterLoad (line 214) | func TestClusterLoad(t *testing.T) {
  function BenchmarkClusterLoad (line 274) | func BenchmarkClusterLoad(b *testing.B) {
  function makeMxPod (line 301) | func makeMxPod(name, cpu, mem string) *v1beta1.PodMetrics {
  function makeNode (line 315) | func makeNode(name, tcpu, tmem, acpu, amem string) v1.Node {
  function makeMxNode (line 327) | func makeMxNode(name, cpu, mem string) *v1beta1.NodeMetrics {
  function makeRes (line 336) | func makeRes(c, m string) v1.ResourceList {

FILE: internal/client/switch_context_test.go
  constant testContext1 (line 24) | testContext1 = "context1"
  constant testContext2 (line 25) | testContext2 = "context2"
  function newFakeK8sServer (line 28) | func newFakeK8sServer(t *testing.T) (*httptest.Server, *atomic.Int32) {
  function writeSwitchTestKubeconfig (line 57) | func writeSwitchTestKubeconfig(t *testing.T, server1URL, server2URL stri...
  function setupSwitchTest (line 93) | func setupSwitchTest(t *testing.T) (*httptest.Server, *atomic.Int32, *AP...
  function TestSwitchContextSuccess (line 116) | func TestSwitchContextSuccess(t *testing.T) {
  function TestSwitchContextReusesConnectivityClient (line 128) | func TestSwitchContextReusesConnectivityClient(t *testing.T) {
  function TestSwitchContextPreWarmsDynDial (line 138) | func TestSwitchContextPreWarmsDynDial(t *testing.T) {
  function TestSwitchContextDialAfterSwitch (line 148) | func TestSwitchContextDialAfterSwitch(t *testing.T) {
  function TestSwitchContextMinimalVersionCalls (line 163) | func TestSwitchContextMinimalVersionCalls(t *testing.T) {
  function TestSwitchContextInvalidContext (line 173) | func TestSwitchContextInvalidContext(t *testing.T) {
  function TestInitConnectionMetricsUnsupported (line 180) | func TestInitConnectionMetricsUnsupported(t *testing.T) {
  function TestInitConnectionStoresDialClient (line 195) | func TestInitConnectionStoresDialClient(t *testing.T) {

FILE: internal/client/types.go
  constant NA (line 18) | NA = "n/a"
  constant NamespaceAll (line 21) | NamespaceAll = "all"
  constant BlankNamespace (line 24) | BlankNamespace = ""
  constant DefaultNamespace (line 27) | DefaultNamespace = "default"
  constant ClusterScope (line 30) | ClusterScope = "-"
  constant NotNamespaced (line 33) | NotNamespaced = "*"
  constant CreateVerb (line 36) | CreateVerb = "create"
  constant UpdateVerb (line 39) | UpdateVerb = "update"
  constant PatchVerb (line 42) | PatchVerb = "patch"
  constant DeleteVerb (line 45) | DeleteVerb = "delete"
  constant GetVerb (line 48) | GetVerb = "get"
  constant ListVerb (line 51) | ListVerb = "list"
  constant WatchVerb (line 54) | WatchVerb = "watch"
  type ContainersMetrics (line 75) | type ContainersMetrics
  type NodesMetricsMap (line 78) | type NodesMetricsMap
  type PodsMetricsMap (line 81) | type PodsMetricsMap
  type Authorizer (line 84) | type Authorizer interface
  type Connection (line 90) | type Connection interface
  type CurrentMetrics (line 146) | type CurrentMetrics struct
  type PodMetrics (line 151) | type PodMetrics
  type NodeMetrics (line 154) | type NodeMetrics struct
  type ClusterMetrics (line 163) | type ClusterMetrics struct
  type NodesMetrics (line 168) | type NodesMetrics
  type PodsMetrics (line 171) | type PodsMetrics

FILE: internal/color/colorize.go
  constant colorFmt (line 11) | colorFmt = "\x1b[%dm%s\x1b[0m"
  type Paint (line 14) | type Paint
  constant Black (line 18) | Black     Paint = iota + 30
  constant Red (line 19) | Red
  constant Green (line 20) | Green
  constant Yellow (line 21) | Yellow
  constant Blue (line 22) | Blue
  constant Magenta (line 23) | Magenta
  constant Cyan (line 24) | Cyan
  constant LightGray (line 25) | LightGray
  constant DarkGray (line 26) | DarkGray  = 90
  constant Bold (line 28) | Bold = 1
  function Colorize (line 32) | func Colorize(s string, c Paint) string {
  function ANSIColorize (line 40) | func ANSIColorize(text string, color int) string {
  function Highlight (line 45) | func Highlight(bb []byte, ii []int, c int) []byte {

FILE: internal/color/colorize_test.go
  function TestColorize (line 13) | func TestColorize(t *testing.T) {
  function TestHighlight (line 32) | func TestHighlight(t *testing.T) {

FILE: internal/config/alias.go
  type Alias (line 25) | type Alias
  type ShortNames (line 28) | type ShortNames
  type Aliases (line 31) | type Aliases struct
    method AliasesFor (line 44) | func (a *Aliases) AliasesFor(gvr *client.GVR) sets.Set[string] {
    method ShortNames (line 59) | func (a *Aliases) ShortNames() ShortNames {
    method Clear (line 76) | func (a *Aliases) Clear() {
    method Resolve (line 85) | func (a *Aliases) Resolve(p *cmd.Interpreter) (*client.GVR, bool) {
    method Get (line 110) | func (a *Aliases) Get(alias string) (*client.GVR, bool) {
    method Define (line 120) | func (a *Aliases) Define(gvr *client.GVR, aliases ...string) {
    method Load (line 132) | func (a *Aliases) Load(path string) error {
    method LoadFile (line 148) | func (a *Aliases) LoadFile(path string) error {
    method declare (line 174) | func (a *Aliases) declare(gvr *client.GVR, aliases ...string) {
    method loadDefaultAliases (line 181) | func (a *Aliases) loadDefaultAliases() {
    method Save (line 202) | func (a *Aliases) Save() error {
    method saveAliases (line 211) | func (a *Aliases) saveAliases(path string) error {
  function NewAliases (line 38) | func NewAliases() *Aliases {

FILE: internal/config/alias_test.go
  function TestAliasClear (line 21) | func TestAliasClear(t *testing.T) {
  function TestAliasKeys (line 28) | func TestAliasKeys(t *testing.T) {
  function TestAliasShortNames (line 35) | func TestAliasShortNames(t *testing.T) {
  function TestAliasDefine (line 52) | func TestAliasDefine(t *testing.T) {
  function TestAliasesLoad (line 111) | func TestAliasesLoad(t *testing.T) {
  function TestAliasesSave (line 119) | func TestAliasesSave(t *testing.T) {
  function TestAliasResolve (line 133) | func TestAliasResolve(t *testing.T) {
  function testAliases (line 282) | func testAliases() *config.Aliases {

FILE: internal/config/benchmark.go
  type Bench (line 18) | type Bench struct
    method Reload (line 108) | func (s *Bench) Reload(path string) error {
    method load (line 113) | func (s *Bench) load(path string) error {
  type Benchmarks (line 23) | type Benchmarks struct
  type Auth (line 30) | type Auth struct
  type Benchmark (line 36) | type Benchmark struct
    method Empty (line 90) | func (b Benchmark) Empty() bool {
  type HTTP (line 42) | type HTTP struct
  type BenchConfig (line 52) | type BenchConfig struct
  constant DefaultC (line 63) | DefaultC = 1
  constant DefaultN (line 65) | DefaultN = 200
  constant DefaultMethod (line 67) | DefaultMethod = "GET"
  function DefaultBenchSpec (line 71) | func DefaultBenchSpec() BenchConfig {
  function newBenchmark (line 82) | func newBenchmark() Benchmark {
  function newBenchmarks (line 94) | func newBenchmarks() *Benchmarks {
  function NewBench (line 101) | func NewBench(path string) (*Bench, error) {

FILE: internal/config/benchmark_test.go
  function TestBenchEmpty (line 14) | func TestBenchEmpty(t *testing.T) {
  function TestBenchLoad (line 31) | func TestBenchLoad(t *testing.T) {
  function TestBenchServiceLoad (line 68) | func TestBenchServiceLoad(t *testing.T) {
  function TestBenchReLoad (line 125) | func TestBenchReLoad(t *testing.T) {
  function TestBenchLoadToast (line 134) | func TestBenchLoadToast(t *testing.T) {
  function TestBenchContainerLoad (line 139) | func TestBenchContainerLoad(t *testing.T) {

FILE: internal/config/color.go
  constant DefaultColor (line 15) | DefaultColor Color = "default"
  constant TransparentColor (line 18) | TransparentColor Color = "-"
  type Colors (line 22) | type Colors
    method Colors (line 25) | func (c Colors) Colors() []tcell.Color {
    method Invert (line 35) | func (c Colors) Invert() Colors {
  type Color (line 44) | type Color
    method String (line 52) | func (c Color) String() string {
    method isHex (line 67) | func (c Color) isHex() bool {
    method Color (line 72) | func (c Color) Color() tcell.Color {
    method InvertColor (line 145) | func (c Color) InvertColor() Color {
  function NewColor (line 47) | func NewColor(c string) Color {
  function maxChromaForLH (line 82) | func maxChromaForLH(l, h float64) float64 {
  constant chromaPreserveFactor (line 99) | chromaPreserveFactor = 0.5
  function closestLForChroma (line 104) | func closestLForChroma(targetL, c, h float64) float64 {

FILE: internal/config/color_test.go
  function TestColors (line 16) | func TestColors(t *testing.T) {
  function TestColorString (line 56) | func TestColorString(t *testing.T) {
  function TestColorToColor (line 95) | func TestColorToColor(t *testing.T) {
  function getOkch (line 124) | func getOkch(hex string) (c, h float64) {
  function huesEqual (line 134) | func huesEqual(h1, h2, tolerance float64) bool {
  function TestInvertColor (line 142) | func TestInvertColor(t *testing.T) {
  function TestInvertColorPreservesHue (line 212) | func TestInvertColorPreservesHue(t *testing.T) {
  function TestInvertGrayRoundTrip (line 257) | func TestInvertGrayRoundTrip(t *testing.T) {
  function TestInvertColorSelfInverting (line 282) | func TestInvertColorSelfInverting(t *testing.T) {
  function TestInvertColorOutOfGamut (line 300) | func TestInvertColorOutOfGamut(t *testing.T) {

FILE: internal/config/config.go
  type Config (line 24) | type Config struct
    method IsReadOnly (line 39) | func (c *Config) IsReadOnly() bool {
    method ActiveClusterName (line 44) | func (c *Config) ActiveClusterName(contextName string) (string, error) {
    method ContextHotkeysPath (line 54) | func (c *Config) ContextHotkeysPath() string {
    method ContextAliasesPath (line 64) | func (c *Config) ContextAliasesPath() string {
    method ContextPluginsPath (line 74) | func (c *Config) ContextPluginsPath() (string, error) {
    method Refine (line 89) | func (c *Config) Refine(flags *genericclioptions.ConfigFlags, k9sFlags...
    method Reset (line 143) | func (c *Config) Reset() {
    method ActivateContext (line 147) | func (c *Config) ActivateContext(n string) (*data.Context, error) {
    method CurrentContext (line 157) | func (c *Config) CurrentContext() (*data.Context, error) {
    method ActiveNamespace (line 163) | func (c *Config) ActiveNamespace() string {
    method FavNamespaces (line 174) | func (c *Config) FavNamespaces() []string {
    method SetActiveNamespace (line 185) | func (c *Config) SetActiveNamespace(ns string) error {
    method ActiveView (line 199) | func (c *Config) ActiveView() string {
    method ResetActiveView (line 216) | func (c *Config) ResetActiveView() {
    method SetActiveView (line 231) | func (c *Config) SetActiveView(view string) {
    method GetConnection (line 238) | func (c *Config) GetConnection() client.Connection {
    method SetConnection (line 243) | func (c *Config) SetConnection(conn client.Connection) {
    method ActiveContextName (line 250) | func (c *Config) ActiveContextName() string {
    method Merge (line 254) | func (c *Config) Merge(c1 *Config) {
    method Load (line 259) | func (c *Config) Load(path string, force bool) error {
    method Save (line 284) | func (c *Config) Save(force bool) error {
    method SaveFile (line 302) | func (c *Config) SaveFile(path string) error {
    method Validate (line 317) | func (c *Config) Validate(contextName, clusterName string) {
    method Dump (line 325) | func (c *Config) Dump(msg string) {
  function NewConfig (line 31) | func NewConfig(ks data.KubeSettings) *Config {
  function setK8sTimeout (line 83) | func setK8sTimeout(flags *genericclioptions.ConfigFlags, d time.Duration) {

FILE: internal/config/config_test.go
  function init (line 25) | func init() {
  function TestConfigSave (line 29) | func TestConfigSave(t *testing.T) {
  function TestSetActiveView (line 72) | func TestSetActiveView(t *testing.T) {
  function TestActiveContextName (line 127) | func TestActiveContextName(t *testing.T) {
  function TestActiveView (line 169) | func TestActiveView(t *testing.T) {
  function TestFavNamespaces (line 225) | func TestFavNamespaces(t *testing.T) {
  function TestContextAliasesPath (line 250) | func TestContextAliasesPath(t *testing.T) {
  function TestContextPluginsPath (line 275) | func TestContextPluginsPath(t *testing.T) {
  function TestConfigLoader (line 307) | func TestConfigLoader(t *testing.T) {
  function TestConfigActivateContext (line 335) | func TestConfigActivateContext(t *testing.T) {
  function TestConfigCurrentContext (line 366) | func TestConfigCurrentContext(t *testing.T) {
  function TestConfigRefine (line 413) | func TestConfigRefine(t *testing.T) {
  function TestConfigValidate (line 535) | func TestConfigValidate(t *testing.T) {
  function TestConfigLoad (line 543) | func TestConfigLoad(t *testing.T) {
  function TestConfigLoadCrap (line 552) | func TestConfigLoadCrap(t *testing.T) {
  function TestConfigSaveFile (line 558) | func TestConfigSaveFile(t *testing.T) {
  function TestConfigReset (line 583) | func TestConfigReset(t *testing.T) {
  function TestSetup (line 601) | func TestSetup(t *testing.T) {

FILE: internal/config/data/config.go
  type Config (line 17) | type Config struct
    method Merge (line 30) | func (c *Config) Merge(c1 *Config) {
    method Validate (line 40) | func (c *Config) Validate(conn client.Connection, contextName, cluster...
    method Dump (line 51) | func (c *Config) Dump(w io.Writer) {
  function NewConfig (line 23) | func NewConfig(ct *api.Context) *Config {

FILE: internal/config/data/context.go
  type Context (line 15) | type Context struct
    method merge (line 53) | func (c *Context) merge(old *Context) {
    method GetClusterName (line 63) | func (c *Context) GetClusterName() string {
    method Validate (line 71) | func (c *Context) Validate(conn client.Connection, _, clusterName stri...
  function NewContext (line 27) | func NewContext() *Context {
  function NewContextFromConfig (line 36) | func NewContextFromConfig(cfg *api.Context) *Context {
  function NewContextFromKubeConfig (line 44) | func NewContextFromKubeConfig(ks KubeSettings) (*Context, error) {

FILE: internal/config/data/context_int_test.go
  function Test_contextMerge (line 12) | func Test_contextMerge(t *testing.T) {

FILE: internal/config/data/context_test.go
  function TestClusterValidate (line 14) | func TestClusterValidate(t *testing.T) {
  function TestClusterValidateEmpty (line 24) | func TestClusterValidateEmpty(t *testing.T) {

FILE: internal/config/data/dir.go
  type Dir (line 22) | type Dir struct
    method Load (line 35) | func (d *Dir) Load(contextName string, ct *api.Context) (*Config, erro...
    method genConfig (line 57) | func (d *Dir) genConfig(path string, ct *api.Context) (*Config, error) {
    method Save (line 66) | func (d *Dir) Save(path string, c *Config) error {
    method loadConfig (line 81) | func (d *Dir) loadConfig(path string) (*Config, error) {
  function NewDir (line 28) | func NewDir(root string) *Dir {

FILE: internal/config/data/dir_test.go
  function init (line 20) | func init() {
  function TestDirLoad (line 24) | func TestDirLoad(t *testing.T) {
  function makeFlags (line 93) | func makeFlags(cl, ct string) *genericclioptions.ConfigFlags {
  function mustLoadConfig (line 100) | func mustLoadConfig(cfg string) *data.Config {

FILE: internal/config/data/feature_gate.go
  type FeatureGates (line 7) | type FeatureGates struct
  function NewFeatureGates (line 12) | func NewFeatureGates() FeatureGates {

FILE: internal/config/data/helpers.go
  constant envFGNodeShell (line 17) | envFGNodeShell = "K9S_FEATURE_GATE_NODE_SHELL"
  function SanitizeContextSubpath (line 22) | func SanitizeContextSubpath(cluster, context string) string {
  function SanitizeFileName (line 27) | func SanitizeFileName(name string) string {
  function defaultFGNodeShell (line 31) | func defaultFGNodeShell() bool {
  function EnsureDirPath (line 40) | func EnsureDirPath(path string, mod os.FileMode) error {
  function EnsureFullPath (line 45) | func EnsureFullPath(path string, mod os.FileMode) error {
  function WriteYAML (line 56) | func WriteYAML(content any) ([]byte, error) {
  function SaveYAML (line 69) | func SaveYAML(path string, content any) error {

FILE: internal/config/data/helpers_test.go
  function TestSanitizeFileName (line 17) | func TestSanitizeFileName(t *testing.T) {
  function TestHelperInList (line 48) | func TestHelperInList(t *testing.T) {
  function TestEnsureDirPathNone (line 66) | func TestEnsureDirPathNone(t *testing.T) {
  function TestEnsureDirPathNoOpt (line 80) | func TestEnsureDirPathNoOpt(t *testing.T) {

FILE: internal/config/data/ns.go
  constant MaxFavoritesNS (line 17) | MaxFavoritesNS = 9
  type Namespace (line 21) | type Namespace struct
    method merge (line 44) | func (n *Namespace) merge(old *Namespace) {
    method Validate (line 62) | func (n *Namespace) Validate(conn client.Connection) {
    method SetActive (line 83) | func (n *Namespace) SetActive(ns string, _ KubeSettings) error {
    method isAllNamespaces (line 103) | func (n *Namespace) isAllNamespaces() bool {
    method addFavNS (line 107) | func (n *Namespace) addFavNS(ns string) {
    method rmFavNS (line 122) | func (n *Namespace) rmFavNS(ns string) {
    method trimFavNs (line 141) | func (n *Namespace) trimFavNs() {
  function NewNamespace (line 29) | func NewNamespace() *Namespace {
  function NewActiveNamespace (line 33) | func NewActiveNamespace(n string) *Namespace {

FILE: internal/config/data/ns_test.go
  function TestNSValidate (line 15) | func TestNSValidate(t *testing.T) {
  function TestNSValidateMissing (line 23) | func TestNSValidateMissing(t *testing.T) {
  function TestNSValidateNoNS (line 31) | func TestNSValidateNoNS(t *testing.T) {
  function TestNsValidateMaxNS (line 39) | func TestNsValidateMaxNS(t *testing.T) {
  function TestNSSetActive (line 48) | func TestNSSetActive(t *testing.T) {
  function TestNSValidateRmFavs (line 71) | func TestNSValidateRmFavs(t *testing.T) {

FILE: internal/config/data/proxy.go
  type Proxy (line 7) | type Proxy struct

FILE: internal/config/data/types.go
  constant DefaultDirMod (line 20) | DefaultDirMod os.FileMode = 0744
  constant DefaultFileMod (line 23) | DefaultFileMod os.FileMode = 0600
  constant MainConfigFile (line 26) | MainConfigFile = "config.yaml"
  type KubeSettings (line 30) | type KubeSettings interface

FILE: internal/config/data/view.go
  constant DefaultView (line 6) | DefaultView = "po"
  type View (line 9) | type View struct
    method Validate (line 19) | func (v *View) Validate() {
  function NewView (line 14) | func NewView() *View {

FILE: internal/config/data/view_test.go
  function TestViewValidate (line 13) | func TestViewValidate(t *testing.T) {
  function TestViewValidateBlank (line 24) | func TestViewValidateBlank(t *testing.T) {

FILE: internal/config/files.go
  constant K9sEnvConfigDir (line 21) | K9sEnvConfigDir = "K9S_CONFIG_DIR"
  constant K9sEnvLogsDir (line 24) | K9sEnvLogsDir = "K9S_LOGS_DIR"
  constant AppName (line 27) | AppName = "k9s"
  constant K9sLogsFile (line 29) | K9sLogsFile = "k9s.log"
  function InitLogLoc (line 86) | func InitLogLoc() error {
  function InitLocs (line 113) | func InitLocs() error {
  function initK9sEnvLocs (line 121) | func initK9sEnvLocs() error {
  function initXDGLocs (line 162) | func initXDGLocs() error {
  function AppContextDir (line 214) | func AppContextDir(cluster, context string) string {
  function AppContextAliasesFile (line 219) | func AppContextAliasesFile(cluster, context string) string {
  function AppContextPluginsFile (line 224) | func AppContextPluginsFile(cluster, context string) string {
  function AppContextHotkeysFile (line 229) | func AppContextHotkeysFile(cluster, context string) string {
  function AppContextConfig (line 234) | func AppContextConfig(cluster, context string) string {
  function DumpsDir (line 239) | func DumpsDir(cluster, context string) (string, error) {
  function EnsureBenchmarksDir (line 246) | func EnsureBenchmarksDir(cluster, context string) (string, error) {
  function EnsureBenchmarksCfgFile (line 253) | func EnsureBenchmarksCfgFile(cluster, context string) (string, error) {
  function EnsureAliasesCfgFile (line 266) | func EnsureAliasesCfgFile() (string, error) {
  function EnsureHotkeysCfgFile (line 279) | func EnsureHotkeysCfgFile() (string, error) {
  function SkinFileFromName (line 292) | func SkinFileFromName(n string) string {

FILE: internal/config/files_int_test.go
  function Test_initXDGLocs (line 17) | func Test_initXDGLocs(t *testing.T) {

FILE: internal/config/files_test.go
  function TestInitLogLoc (line 18) | func TestInitLogLoc(t *testing.T) {
  function TestEnsureBenchmarkCfg (line 63) | func TestEnsureBenchmarkCfg(t *testing.T) {
  function TestSkinFileFromName (line 101) | func TestSkinFileFromName(t *testing.T) {

FILE: internal/config/flags.go
  constant DefaultRefreshRate (line 8) | DefaultRefreshRate float32 = 2.0
  constant DefaultLogLevel (line 11) | DefaultLogLevel = "info"
  constant DefaultCommand (line 14) | DefaultCommand = ""
  type Flags (line 18) | type Flags struct
  function NewFlags (line 35) | func NewFlags() *Flags {
  function boolPtr (line 53) | func boolPtr(b bool) *bool {
  function float32Ptr (line 57) | func float32Ptr(f float32) *float32 {
  function strPtr (line 61) | func strPtr(s string) *string {

FILE: internal/config/flags_test.go
  function TestNewFlags (line 13) | func TestNewFlags(t *testing.T) {

FILE: internal/config/helpers.go
  constant envPFAddress (line 16) | envPFAddress          = "K9S_DEFAULT_PF_ADDRESS"
  constant defaultPortFwdAddress (line 17) | defaultPortFwdAddress = "localhost"
  function IsBoolSet (line 21) | func IsBoolSet(b *bool) bool {
  function isStringSet (line 25) | func isStringSet(s *string) bool {
  function isYamlFile (line 29) | func isYamlFile(file string) bool {
  function isEnvSet (line 36) | func isEnvSet(env string) bool {
  function UserTmpDir (line 41) | func UserTmpDir() (string, error) {
  function MustK9sUser (line 53) | func MustK9sUser() string {
  function defaultPFAddress (line 70) | func defaultPFAddress() string {

FILE: internal/config/hotkey.go
  type HotKeys (line 19) | type HotKeys struct
    method Load (line 40) | func (h HotKeys) Load(path string) error {
    method LoadHotKeys (line 52) | func (h HotKeys) LoadHotKeys(path string) error {
  type HotKey (line 24) | type HotKey struct
  function NewHotKeys (line 33) | func NewHotKeys() HotKeys {

FILE: internal/config/hotkey_test.go
  function TestHotKeyLoad (line 14) | func TestHotKeyLoad(t *testing.T) {

FILE: internal/config/json/validator.go
  constant PluginsSchema (line 21) | PluginsSchema = "plugins.json"
  constant PluginSchema (line 24) | PluginSchema = "plugin.json"
  constant PluginMultiSchema (line 27) | PluginMultiSchema = "plugin-multi.json"
  constant AliasesSchema (line 30) | AliasesSchema = "aliases.json"
  constant ViewsSchema (line 33) | ViewsSchema = "views.json"
  constant HotkeysSchema (line 36) | HotkeysSchema = "hotkeys.json"
  constant K9sSchema (line 39) | K9sSchema = "k9s.json"
  constant ContextSchema (line 42) | ContextSchema = "context.json"
  constant SkinSchema (line 45) | SkinSchema = "skin.json"
  type Validator (line 78) | type Validator struct
    method register (line 104) | func (v *Validator) register() {
    method ValidatePlugins (line 121) | func (v *Validator) ValidatePlugins(bb []byte) (string, error) {
    method Validate (line 135) | func (v *Validator) Validate(k string, bb []byte) error {
    method ValidateObj (line 165) | func (v *Validator) ValidateObj(k string, o any) error {
  function NewValidator (line 84) | func NewValidator() *Validator {

FILE: internal/config/json/validator_test.go
  function TestValidatePluginSnippet (line 16) | func TestValidatePluginSnippet(t *testing.T) {
  function TestValidatePlugins (line 25) | func TestValidatePlugins(t *testing.T) {
  function TestValidatePluginDir (line 62) | func TestValidatePluginDir(t *testing.T) {
  function TestValidateSkinDir (line 84) | func TestValidateSkinDir(t *testing.T) {
  function TestValidateSkin (line 102) | func TestValidateSkin(t *testing.T) {
  function TestValidateK9s (line 129) | func TestValidateK9s(t *testing.T) {
  function TestValidateContext (line 156) | func TestValidateContext(t *testing.T) {
  function TestValidateAliases (line 184) | func TestValidateAliases(t *testing.T) {
  function TestValidateViews (line 212) | func TestValidateViews(t *testing.T) {

FILE: internal/config/k9s.go
  type gpuVendors (line 23) | type gpuVendors
  type K9s (line 36) | type K9s struct
    method ToggleContextSwitch (line 87) | func (k *K9s) ToggleContextSwitch(b bool) {
    method getContextSwitch (line 94) | func (k *K9s) getContextSwitch() bool {
    method resetConnection (line 101) | func (k *K9s) resetConnection(conn client.Connection) {
    method Save (line 109) | func (k *K9s) Save(contextName, clusterName string, force bool) error {
    method Merge (line 129) | func (k *K9s) Merge(k1 *K9s) {
    method AppScreenDumpDir (line 159) | func (k *K9s) AppScreenDumpDir() string {
    method ContextScreenDumpDir (line 173) | func (k *K9s) ContextScreenDumpDir() string {
    method contextPath (line 177) | func (k *K9s) contextPath() string {
    method Reset (line 189) | func (k *K9s) Reset() {
    method ActiveContextNamespace (line 195) | func (k *K9s) ActiveContextNamespace() (string, error) {
    method ActiveContextName (line 205) | func (k *K9s) ActiveContextName() string {
    method ActiveContext (line 210) | func (k *K9s) ActiveContext() (*data.Context, error) {
    method setActiveConfig (line 219) | func (k *K9s) setActiveConfig(c *data.Config) {
    method getActiveConfig (line 226) | func (k *K9s) getActiveConfig() *data.Config {
    method setActiveContextName (line 233) | func (k *K9s) setActiveContextName(n string) {
    method getActiveContextName (line 240) | func (k *K9s) getActiveContextName() string {
    method ActivateContext (line 248) | func (k *K9s) ActivateContext(contextName string) (*data.Context, erro...
    method Reload (line 297) | func (k *K9s) Reload() error {
    method Override (line 318) | func (k *K9s) Override(k9sFlags *Flags) {
    method IsHeadless (line 340) | func (k *K9s) IsHeadless() bool {
    method IsLogoless (line 349) | func (k *K9s) IsLogoless() bool {
    method IsCrumbsless (line 358) | func (k *K9s) IsCrumbsless() bool {
    method IsSplashless (line 367) | func (k *K9s) IsSplashless() bool {
    method IsInvert (line 376) | func (k *K9s) IsInvert() bool {
    method GetRefreshRate (line 385) | func (k *K9s) GetRefreshRate() float32 {
    method RefreshDuration (line 406) | func (k *K9s) RefreshDuration() time.Duration {
    method IsReadOnly (line 411) | func (k *K9s) IsReadOnly() bool {
    method Validate (line 424) | func (k *K9s) Validate(c client.Connection, contextName, clusterName s...
  function NewK9s (line 69) | func NewK9s(conn client.Connection, ks data.KubeSettings) *K9s {

FILE: internal/config/k9s_int_test.go
  function Test_k9sOverrides (line 13) | func Test_k9sOverrides(t *testing.T) {
  function Test_screenDumpDirOverride (line 123) | func Test_screenDumpDirOverride(t *testing.T) {

FILE: internal/config/k9s_test.go
  function TestK9sReload (line 17) | func TestK9sReload(t *testing.T) {
  function TestK9sMerge (line 64) | func TestK9sMerge(t *testing.T) {
  function TestContextScreenDumpDir (line 135) | func TestContextScreenDumpDir(t *testing.T) {
  function TestAppScreenDumpDir (line 144) | func TestAppScreenDumpDir(t *testing.T) {

FILE: internal/config/logger.go
  constant DefaultLoggerTailCount (line 8) | DefaultLoggerTailCount = 100
  constant MaxLogThreshold (line 11) | MaxLogThreshold = 5_000
  constant DefaultSinceSeconds (line 14) | DefaultSinceSeconds = -1
  type Logger (line 18) | type Logger struct
    method Validate (line 38) | func (l Logger) Validate() Logger {
  function NewLogger (line 29) | func NewLogger() Logger {

FILE: internal/config/logger_test.go
  function TestNewLogger (line 13) | func TestNewLogger(t *testing.T) {
  function TestLoggerValidate (line 21) | func TestLoggerValidate(t *testing.T) {

FILE: internal/config/mock/test_helpers.go
  function EnsureDir (line 29) | func EnsureDir(d string) error {
  function NewMockConfig (line 40) | func NewMockConfig(t testing.TB) *config.Config {
  type mockKubeSettings (line 59) | type mockKubeSettings struct
    method CurrentContextName (line 90) | func (m mockKubeSettings) CurrentContextName() (string, error) {
    method CurrentClusterName (line 93) | func (m mockKubeSettings) CurrentClusterName() (string, error) {
    method CurrentNamespaceName (line 96) | func (mockKubeSettings) CurrentNamespaceName() (string, error) {
    method GetContext (line 99) | func (m mockKubeSettings) GetContext(s string) (*api.Context, error) {
    method CurrentContext (line 106) | func (m mockKubeSettings) CurrentContext() (*api.Context, error) {
    method ContextNames (line 109) | func (m mockKubeSettings) ContextNames() (map[string]struct{}, error) {
    method SetProxy (line 118) | func (mockKubeSettings) SetProxy(func(*http.Request) (*url.URL, error)...
  function NewMockKubeSettings (line 64) | func NewMockKubeSettings(f *genericclioptions.ConfigFlags) mockKubeSetti...
  type mockConnection (line 120) | type mockConnection struct
    method CanI (line 131) | func (mockConnection) CanI(string, *client.GVR, string, []string) (boo...
    method Config (line 134) | func (mockConnection) Config() *client.Config {
    method ConnectionOK (line 137) | func (mockConnection) ConnectionOK() bool {
    method Dial (line 140) | func (mockConnection) Dial() (kubernetes.Interface, error) {
    method DialLogs (line 143) | func (mockConnection) DialLogs() (kubernetes.Interface, error) {
    method SwitchContext (line 146) | func (mockConnection) SwitchContext(string) error {
    method CachedDiscovery (line 149) | func (mockConnection) CachedDiscovery() (*disk.CachedDiscoveryClient, ...
    method RestConfig (line 152) | func (mockConnection) RestConfig() (*restclient.Config, error) {
    method MXDial (line 155) | func (mockConnection) MXDial() (*versioned.Clientset, error) {
    method DynDial (line 158) | func (mockConnection) DynDial() (dynamic.Interface, error) {
    method HasMetrics (line 161) | func (mockConnection) HasMetrics() bool {
    method ValidNamespaceNames (line 164) | func (mockConnection) ValidNamespaceNames() (client.NamespaceNames, er...
    method IsValidNamespace (line 167) | func (mockConnection) IsValidNamespace(string) bool {
    method ServerVersion (line 170) | func (mockConnection) ServerVersion() (*version.Info, error) {
    method CheckConnectivity (line 173) | func (mockConnection) CheckConnectivity() bool {
    method ActiveContext (line 176) | func (m mockConnection) ActiveContext() string {
    method ActiveNamespace (line 179) | func (mockConnection) ActiveNamespace() string {
    method IsActiveNamespace (line 182) | func (mockConnection) IsActiveNamespace(string) bool {
  function NewMockConnection (line 124) | func NewMockConnection() mockConnection {
  function NewMockConnectionWithContext (line 127) | func NewMockConnectionWithContext(ct string) mockConnection {

FILE: internal/config/plugin.go
  type plugins (line 26) | type plugins
  type Plugins (line 29) | type Plugins struct
    method Load (line 122) | func (p Plugins) Load(path string, loadExtra bool) error {
    method load (line 150) | func (p *Plugins) load(path string) error {
    method loadDir (line 209) | func (p Plugins) loadDir(dir string) error {
  type PluginInputType (line 34) | type PluginInputType
  constant InputTypeString (line 37) | InputTypeString   PluginInputType = "string"
  constant InputTypeNumber (line 38) | InputTypeNumber   PluginInputType = "number"
  constant InputTypeBool (line 39) | InputTypeBool     PluginInputType = "bool"
  constant InputTypeDropdown (line 40) | InputTypeDropdown PluginInputType = "dropdown"
  type PluginInput (line 44) | type PluginInput struct
  type Plugin (line 54) | type Plugin struct
    method String (line 69) | func (p Plugin) String() string {
    method ShouldConfirm (line 75) | func (p *Plugin) ShouldConfirm() bool {
    method Validate (line 83) | func (p *Plugin) Validate() error {
  function NewPlugins (line 115) | func NewPlugins() Plugins {

FILE: internal/config/plugin_test.go
  function TestPluginLoad (line 15) | func TestPluginLoad(t *testing.T) {
  function TestSinglePluginFileLoad (line 98) | func TestSinglePluginFileLoad(t *testing.T) {
  function TestMultiplePluginFilesLoad (line 119) | func TestMultiplePluginFilesLoad(t *testing.T) {
  function TestPluginLoadSymlink (line 183) | func TestPluginLoadSymlink(t *testing.T) {

FILE: internal/config/refresh_rate_test.go
  function TestRefreshRateBackwardCompatibility (line 11) | func TestRefreshRateBackwardCompatibility(t *testing.T) {
  function TestGetRefreshRateMinimum (line 36) | func TestGetRefreshRateMinimum(t *testing.T) {

FILE: internal/config/scans.go
  type Labels (line 7) | type Labels
    method exclude (line 9) | func (l Labels) exclude(k, val string) bool {
  type ScanExcludes (line 25) | type ScanExcludes struct
    method exclude (line 36) | func (b ScanExcludes) exclude(ns string, ll map[string]string) bool {
  function newScanExcludes (line 30) | func newScanExcludes() ScanExcludes {
  type ImageScans (line 52) | type ImageScans struct
    method ShouldExclude (line 65) | func (i ImageScans) ShouldExclude(ns string, ll map[string]string) bool {
  function NewImageScans (line 58) | func NewImageScans() ImageScans {

FILE: internal/config/scans_test.go
  function TestScansShouldExclude (line 13) | func TestScansShouldExclude(t *testing.T) {

FILE: internal/config/shell_pod.go
  constant defaultDockerShellImage (line 10) | defaultDockerShellImage = "busybox:1.37.0"
  type Limits (line 13) | type Limits
  type ShellPod (line 16) | type ShellPod struct
    method Validate (line 46) | func (s *ShellPod) Validate() {
  type hostPathVolume (line 29) | type hostPathVolume struct
  function NewShellPod (line 37) | func NewShellPod() *ShellPod {
  function defaultLimits (line 55) | func defaultLimits() Limits {

FILE: internal/config/styles.go
  type StyleListener (line 18) | type StyleListener interface
  type TextStyle (line 24) | type TextStyle
    method ToShortString (line 38) | func (ts TextStyle) ToShortString() string {
  constant TextStyleNormal (line 28) | TextStyleNormal TextStyle = "normal"
  constant TextStyleBold (line 31) | TextStyleBold TextStyle = "bold"
  constant TextStyleDim (line 34) | TextStyleDim TextStyle = "dim"
  type Styles (line 53) | type Styles struct
    method Reset (line 482) | func (s *Styles) Reset(invert bool) {
    method FgColor (line 492) | func (s *Styles) FgColor() tcell.Color {
    method BgColor (line 497) | func (s *Styles) BgColor() tcell.Color {
    method AddListener (line 502) | func (s *Styles) AddListener(l StyleListener) {
    method RemoveListener (line 507) | func (s *Styles) RemoveListener(l StyleListener) {
    method fireStylesChanged (line 521) | func (s *Styles) fireStylesChanged() {
    method Body (line 528) | func (s *Styles) Body() Body {
    method Prompt (line 533) | func (s *Styles) Prompt() Prompt {
    method Frame (line 538) | func (s *Styles) Frame() Frame {
    method Crumb (line 543) | func (s *Styles) Crumb() Crumb {
    method Title (line 548) | func (s *Styles) Title() Title {
    method Charts (line 553) | func (s *Styles) Charts() Charts {
    method Dialog (line 558) | func (s *Styles) Dialog() Dialog {
    method Table (line 563) | func (s *Styles) Table() Table {
    method Xray (line 568) | func (s *Styles) Xray() Xray {
    method Views (line 573) | func (s *Styles) Views() Views {
    method Load (line 774) | func (s *Styles) Load(path string, invert bool) error {
    method Update (line 794) | func (s *Styles) Update() {
    method Dump (line 812) | func (s *Styles) Dump() {
  type Style (line 59) | type Style struct
    method Invert (line 578) | func (s *Style) Invert() {
  type Prompt (line 70) | type Prompt struct
    method Invert (line 600) | func (p *Prompt) Invert() {
  type PromptBorder (line 78) | type PromptBorder struct
    method Invert (line 608) | func (p *PromptBorder) Invert() {
  type Help (line 84) | type Help struct
    method Invert (line 614) | func (h *Help) Invert() {
  type Body (line 93) | type Body struct
    method Invert (line 589) | func (b *Body) Invert() {
  type Dialog (line 104) | type Dialog struct
    method Invert (line 623) | func (d *Dialog) Invert() {
  type Frame (line 116) | type Frame struct
    method Invert (line 635) | func (f *Frame) Invert() {
  type Views (line 125) | type Views struct
    method Invert (line 694) | func (v *Views) Invert() {
  type Status (line 135) | type Status struct
    method Invert (line 673) | func (s *Status) Invert() {
  type Log (line 147) | type Log struct
    method Invert (line 759) | func (l *Log) Invert() {
  type Picker (line 154) | type Picker struct
    method Invert (line 752) | func (p *Picker) Invert() {
  type LogIndicator (line 161) | type LogIndicator struct
    method Invert (line 766) | func (l *LogIndicator) Invert() {
  type Yaml (line 169) | type Yaml struct
    method Invert (line 745) | func (y *Yaml) Invert() {
  type Title (line 176) | type Title struct
    method Invert (line 644) | func (t *Title) Invert() {
  type Info (line 185) | type Info struct
    method Invert (line 685) | func (i *Info) Invert() {
  type Border (line 194) | type Border struct
    method Invert (line 653) | func (b *Border) Invert() {
  type Crumb (line 200) | type Crumb struct
    method Invert (line 666) | func (c *Crumb) Invert() {
  type Table (line 207) | type Table struct
    method Invert (line 704) | func (t *Table) Invert() {
  type TableHeader (line 217) | type TableHeader struct
    method Invert (line 714) | func (t *TableHeader) Invert() {
  type Xray (line 225) | type Xray struct
    method Invert (line 722) | func (x *Xray) Invert() {
  type Menu (line 234) | type Menu struct
    method Invert (line 659) | func (m *Menu) Invert() {
  type Charts (line 242) | type Charts struct
    method Invert (line 731) | func (c *Charts) Invert() {
  function newStyle (line 254) | func newStyle() Style {
  function newDialog (line 266) | func newDialog() Dialog {
  function newPrompt (line 279) | func newPrompt() Prompt {
  function newCharts (line 291) | func newCharts() Charts {
  function newViews (line 307) | func newViews() Views {
  function newFrame (line 318) | func newFrame() Frame {
  function newHelp (line 328) | func newHelp() Help {
  function newBody (line 338) | func newBody() Body {
  function newStatus (line 350) | func newStatus() Status {
  function newPicker (line 363) | func newPicker() Picker {
  function newLog (line 371) | func newLog() Log {
  function newLogIndicator (line 379) | func newLogIndicator() LogIndicator {
  function newYaml (line 388) | func newYaml() Yaml {
  function newTitle (line 396) | func newTitle() Title {
  function newInfo (line 406) | func newInfo() Info {
  function newXray (line 416) | func newXray() Xray {
  function newTable (line 426) | func newTable() Table {
  function newTableHeader (line 437) | func newTableHeader() TableHeader {
  function newCrumb (line 446) | func newCrumb() Crumb {
  function newBorder (line 454) | func newBorder() Border {
  function newMenu (line 461) | func newMenu() Menu {
  function NewStyles (line 470) | func NewStyles() *Styles {

FILE: internal/config/styles_int_test.go
  function Test_newStyle (line 12) | func Test_newStyle(t *testing.T) {

FILE: internal/config/styles_test.go
  function TestNewStyle (line 16) | func TestNewStyle(t *testing.T) {
  function TestColor (line 24) | func TestColor(t *testing.T) {
  function TestSkinHappy (line 40) | func TestSkinHappy(t *testing.T) {
  function TestSkinLoad (line 53) | func TestSkinLoad(t *testing.T) {

FILE: internal/config/threshold.go
  constant SeverityLow (line 8) | SeverityLow SeverityLevel = iota
  constant SeverityMedium (line 11) | SeverityMedium
  constant SeverityHigh (line 14) | SeverityHigh
  type SeverityLevel (line 18) | type SeverityLevel
  type Severity (line 21) | type Severity struct
    method Validate (line 35) | func (s *Severity) Validate() {
  function NewSeverity (line 27) | func NewSeverity() *Severity {
  function validateRange (line 45) | func validateRange(v int) bool {
  type Threshold (line 53) | type Threshold
    method Validate (line 64) | func (t Threshold) Validate() Threshold {
    method LevelFor (line 78) | func (t Threshold) LevelFor(k string, v int) SeverityLevel {
    method SeverityColor (line 94) | func (t *Threshold) SeverityColor(k string, v int) string {
  function NewThreshold (line 56) | func NewThreshold() Threshold {

FILE: internal/config/threshold_test.go
  function TestSeverityValidate (line 13) | func TestSeverityValidate(t *testing.T) {
  function TestLevelFor (line 44) | func TestLevelFor(t *testing.T) {

FILE: internal/config/types.go
  constant defaultRefreshRate (line 7) | defaultRefreshRate  = 2
  constant defaultMaxConnRetry (line 8) | defaultMaxConnRetry = 5
  constant CPU (line 11) | CPU = "cpu"
  constant MEM (line 14) | MEM = "memory"
  type UI (line 18) | type UI struct

FILE: internal/config/views.go
  type ViewConfigListener (line 26) | type ViewConfigListener interface
  type ViewSetting (line 35) | type ViewSetting struct
    method HasCols (line 40) | func (v *ViewSetting) HasCols() bool {
    method IsBlank (line 44) | func (v *ViewSetting) IsBlank() bool {
    method SortCol (line 48) | func (v *ViewSetting) SortCol() (name string, asc bool, err error) {
    method Equals (line 61) | func (v *ViewSetting) Equals(vs *ViewSetting) bool {
  type CustomView (line 77) | type CustomView struct
    method Reset (line 91) | func (v *CustomView) Reset() {
    method Load (line 98) | func (v *CustomView) Load(path string) error {
    method AddListeners (line 123) | func (v *CustomView) AddListeners(l ViewConfigListener, cmds ...string) {
    method AddListener (line 133) | func (v *CustomView) AddListener(cmd string, l ViewConfigListener) {
    method RemoveListener (line 139) | func (v *CustomView) RemoveListener(l ViewConfigListener) {
    method fireConfigChanged (line 147) | func (v *CustomView) fireConfigChanged() {
    method getVS (line 177) | func (v *CustomView) getVS(gvr, ns string) *ViewSetting {
  function NewCustomView (line 83) | func NewCustomView() *CustomView {

FILE: internal/config/views_int_test.go
  function TestCustomView_getVS (line 14) | func TestCustomView_getVS(t *testing.T) {

FILE: internal/config/views_test.go
  function init (line 16) | func init() {
  function TestCustomViewLoad (line 20) | func TestCustomViewLoad(t *testing.T) {
  function TestViewSettingEquals (line 52) | func TestViewSettingEquals(t *testing.T) {

FILE: internal/dao/accessor.go
  type Accessors (line 42) | type Accessors
  function AccessorFor (line 47) | func AccessorFor(f Factory, gvr *client.GVR) (Accessor, error) {

FILE: internal/dao/alias.go
  type Alias (line 24) | type Alias struct
    method AliasesFor (line 41) | func (a *Alias) AliasesFor(gvr *client.GVR) sets.Set[string] {
    method List (line 46) | func (*Alias) List(ctx context.Context, _ string) ([]runtime.Object, e...
    method Get (line 65) | func (*Alias) Get(_ context.Context, _ string) (runtime.Object, error) {
    method Ensure (line 70) | func (a *Alias) Ensure(path string) (config.Alias, error) {
    method load (line 77) | func (a *Alias) load(path string) error {
  function NewAlias (line 31) | func NewAlias(f Factory) *Alias {

FILE: internal/dao/alias_test.go
  function TestAliasList (line 19) | func TestAliasList(t *testing.T) {
  function makeAliases (line 34) | func makeAliases() *dao.Alias {

FILE: internal/dao/benchmark.go
  type Benchmark (line 28) | type Benchmark struct
    method Delete (line 33) | func (*Benchmark) Delete(_ context.Context, path string, _ *metav1.Del...
    method Get (line 38) | func (*Benchmark) Get(context.Context, string) (runtime.Object, error) {
    method List (line 43) | func (*Benchmark) List(ctx context.Context, _ string) ([]runtime.Objec...

FILE: internal/dao/benchmark_test.go
  function TestBenchmarkList (line 18) | func TestBenchmarkList(t *testing.T) {

FILE: internal/dao/cluster.go
  type RefScanner (line 19) | type RefScanner interface
  type Ref (line 31) | type Ref struct
  type Refs (line 37) | type Refs
  function scanners (line 47) | func scanners() map[*client.GVR]RefScanner {
  function ScanForRefs (line 58) | func ScanForRefs(ctx context.Context, f Factory) (Refs, error) {
  function ScanForSARefs (line 109) | func ScanForSARefs(ctx context.Context, f Factory) (Refs, error) {

FILE: internal/dao/cm.go
  type ConfigMap (line 9) | type ConfigMap struct

FILE: internal/dao/container.go
  constant initIDX (line 27) | initIDX = "I"
  constant mainIDX (line 28) | mainIDX = "M"
  constant ephIDX (line 29) | ephIDX  = "E"
  type Container (line 33) | type Container struct
    method List (line 38) | func (c *Container) List(ctx context.Context, _ string) ([]runtime.Obj...
    method TailLogs (line 90) | func (c *Container) TailLogs(ctx context.Context, opts *LogOptions) ([...
    method fetchPod (line 135) | func (c *Container) fetchPod(fqn string) (*v1.Pod, error) {
  function makeContainerRes (line 100) | func makeContainerRes(kind string, idx int, co *v1.Container, po *v1.Pod...
  function getContainerStatus (line 110) | func getContainerStatus(kind, name string, status *v1.PodStatus) *v1.Con...

FILE: internal/dao/container_test.go
  function TestContainerList (line 30) | func TestContainerList(t *testing.T) {
  type conn (line 43) | type conn struct
    method Config (line 49) | func (*conn) Config() *client.Config                                  ...
    method Dial (line 50) | func (*conn) Dial() (kubernetes.Interface, error)                     ...
    method DialLogs (line 51) | func (*conn) DialLogs() (kubernetes.Interface, error)                 ...
    method ConnectionOK (line 52) | func (*conn) ConnectionOK() bool                                      ...
    method SwitchContext (line 53) | func (*conn) SwitchContext(string) error                              ...
    method CachedDiscovery (line 54) | func (*conn) CachedDiscovery() (*disk.CachedDiscoveryClient, error)   ...
    method RestConfig (line 55) | func (*conn) RestConfig() (*restclient.Config, error)                 ...
    method MXDial (line 56) | func (*conn) MXDial() (*versioned.Clientset, error)                   ...
    method DynDial (line 57) | func (*conn) DynDial() (dynamic.Interface, error)                     ...
    method HasMetrics (line 58) | func (*conn) HasMetrics() bool                                        ...
    method CheckConnectivity (line 59) | func (*conn) CheckConnectivity() bool                                 ...
    method IsNamespaced (line 60) | func (*conn) IsNamespaced(string) bool                                ...
    method SupportsResource (line 61) | func (*conn) SupportsResource(string) bool                            ...
    method ValidNamespaces (line 62) | func (*conn) ValidNamespaces() ([]v1.Namespace, error)                ...
    method SupportsRes (line 63) | func (*conn) SupportsRes(string, []string) (a string, b bool, e error)...
    method ServerVersion (line 64) | func (*conn) ServerVersion() (*version.Info, error)                   ...
    method CurrentNamespaceName (line 65) | func (*conn) CurrentNamespaceName() (string, error)                   ...
    method CanI (line 66) | func (*conn) CanI(string, *client.GVR, string, []string) (bool, error)...
    method ActiveContext (line 67) | func (*conn) ActiveContext() string                                   ...
    method ActiveNamespace (line 68) | func (*conn) ActiveNamespace() string                                 ...
    method IsValidNamespace (line 69) | func (*conn) IsValidNamespace(string) bool                            ...
    method ValidNamespaceNames (line 70) | func (*conn) ValidNamespaceNames() (client.NamespaceNames, error)     ...
    method IsActiveNamespace (line 71) | func (*conn) IsActiveNamespace(string) bool                           ...
  function makeConn (line 45) | func makeConn() *conn {
  type podFactory (line 73) | type podFactory struct
    method Client (line 77) | func (podFactory) Client() client.Connection {
    method Get (line 81) | func (podFactory) Get(*client.GVR, string, bool, labels.Selector) (run...
    method List (line 89) | func (podFactory) List(*client.GVR, string, bool, labels.Selector) ([]...
    method ForResource (line 92) | func (podFactory) ForResource(string, *client.GVR) (informers.GenericI...
    method CanForResource (line 95) | func (podFactory) CanForResource(string, *client.GVR, []string) (infor...
    method WaitForCacheSync (line 98) | func (podFactory) WaitForCacheSync()            {}
    method Forwarders (line 99) | func (podFactory) Forwarders() watch.Forwarders { return nil }
    method DeleteForwarder (line 100) | func (podFactory) DeleteForwarder(string)       {}
  function makePodFactory (line 102) | func makePodFactory() dao.Factory {
  function poYaml (line 106) | func poYaml() string {

FILE: internal/dao/context.go
  type Context (line 22) | type Context struct
    method config (line 26) | func (c *Context) config() *client.Config {
    method Get (line 31) | func (c *Context) Get(_ context.Context, path string) (runtime.Object,...
    method List (line 40) | func (c *Context) List(context.Context, string) ([]runtime.Object, err...
    method MustCurrentContextName (line 54) | func (c *Context) MustCurrentContextName() string {
    method Switch (line 63) | func (c *Context) Switch(ctx string) error {

FILE: internal/dao/crd.go
  type CustomResourceDefinition (line 12) | type CustomResourceDefinition struct

FILE: internal/dao/cronjob.go
  constant maxJobNameSize (line 23) | maxJobNameSize = 42
  type CronJob (line 32) | type CronJob struct
    method ListImages (line 37) | func (c *CronJob) ListImages(_ context.Context, fqn string) ([]string,...
    method Run (line 47) | func (c *CronJob) Run(path string) error {
    method ScanSA (line 102) | func (c *CronJob) ScanSA(_ context.Context, fqn string, wait bool) (Re...
    method GetInstance (line 128) | func (c *CronJob) GetInstance(fqn string) (*batchv1.CronJob, error) {
    method ToggleSuspend (line 144) | func (c *CronJob) ToggleSuspend(ctx context.Context, path string) error {
    method Scan (line 175) | func (c *CronJob) Scan(_ context.Context, gvr *client.GVR, fqn string,...

FILE: internal/dao/cruiser.go
  function mustMap (line 13) | func mustMap(o runtime.Object, field string) map[string]any {
  function mustSlice (line 26) | func mustSlice(o runtime.Object, field string) []any {
  function mustField (line 39) | func mustField(o map[string]any, field string) any {

FILE: internal/dao/cruiser_test.go
  function TestCruiserMeta (line 17) | func TestCruiserMeta(t *testing.T) {
  function TestCruiserSlice (line 24) | func TestCruiserSlice(t *testing.T) {
  function loadJSON (line 35) | func loadJSON(t require.TestingT, n string) *unstructured.Unstructured {

FILE: internal/dao/describe.go
  function Describe (line 15) | func Describe(c client.Connection, gvr *client.GVR, path string) (string...

FILE: internal/dao/dir.go
  type Dir (line 23) | type Dir struct
    method List (line 37) | func (*Dir) List(ctx context.Context, _ string) ([]runtime.Object, err...
    method Get (line 63) | func (*Dir) Get(_ context.Context, _ string) (runtime.Object, error) {
  function NewDir (line 28) | func NewDir(f Factory) *Dir {

FILE: internal/dao/dir_test.go
  function TestNewDir (line 16) | func TestNewDir(t *testing.T) {

FILE: internal/dao/dp.go
  type Deployment (line 39) | type Deployment struct
    method ListImages (line 44) | func (d *Deployment) ListImages(_ context.Context, fqn string) ([]stri...
    method Scale (line 54) | func (d *Deployment) Scale(ctx context.Context, path string, replicas ...
    method Restart (line 59) | func (d *Deployment) Restart(ctx context.Context, path string, opts *m...
    method TailLogs (line 64) | func (d *Deployment) TailLogs(ctx context.Context, opts *LogOptions) (...
    method Pod (line 77) | func (d *Deployment) Pod(fqn string) (string, error) {
    method GetInstance (line 87) | func (d *Deployment) GetInstance(fqn string) (*appsv1.Deployment, erro...
    method ScanSA (line 103) | func (d *Deployment) ScanSA(_ context.Context, fqn string, wait bool) ...
    method Scan (line 129) | func (d *Deployment) Scan(_ context.Context, gvr *client.GVR, fqn stri...
    method GetPodSpec (line 191) | func (d *Deployment) GetPodSpec(path string) (*v1.PodSpec, error) {
    method SetImages (line 201) | func (d *Deployment) SetImages(ctx context.Context, path string, image...
  function hasPVC (line 230) | func hasPVC(spec *v1.PodSpec, name string) bool {
  function hasPC (line 239) | func hasPC(spec *v1.PodSpec, name string) bool {
  function hasConfigMap (line 243) | func hasConfigMap(spec *v1.PodSpec, name string) bool {
  function hasSecret (line 270) | func hasSecret(f Factory, spec *v1.PodSpec, ns, name string, wait bool) ...
  function containerHasSecret (line 325) | func containerHasSecret(envFrom []v1.EnvFromSource, env []v1.EnvVar, nam...
  function containerHasConfigMap (line 343) | func containerHasConfigMap(envFrom []v1.EnvFromSource, env []v1.EnvVar, ...
  function scaleRes (line 361) | func scaleRes(ctx context.Context, f Factory, gvr *client.GVR, path stri...
  function restartRes (line 398) | func restartRes[T runtime.Object](ctx context.Context, f Factory, gvr *c...

FILE: internal/dao/ds.go
  type DaemonSet (line 38) | type DaemonSet struct
    method ListImages (line 43) | func (d *DaemonSet) ListImages(_ context.Context, fqn string) ([]strin...
    method Restart (line 53) | func (d *DaemonSet) Restart(ctx context.Context, path string, opts *me...
    method TailLogs (line 58) | func (d *DaemonSet) TailLogs(ctx context.Context, opts *LogOptions) ([...
    method Pod (line 114) | func (d *DaemonSet) Pod(fqn string) (string, error) {
    method GetInstance (line 124) | func (d *DaemonSet) GetInstance(fqn string) (*appsv1.DaemonSet, error) {
    method ScanSA (line 140) | func (d *DaemonSet) ScanSA(_ context.Context, fqn string, wait bool) (...
    method Scan (line 166) | func (d *DaemonSet) Scan(_ context.Context, gvr *client.GVR, fqn strin...
    method GetPodSpec (line 228) | func (d *DaemonSet) GetPodSpec(path string) (*v1.PodSpec, error) {
    method SetImages (line 238) | func (d *DaemonSet) SetImages(ctx context.Context, path string, imageS...
  function podLogs (line 71) | func podLogs(ctx context.Context, sel map[string]string, opts *LogOption...
  function toSelector (line 268) | func toSelector(m map[string]string) string {

FILE: internal/dao/dynamic.go
  type Dynamic (line 23) | type Dynamic struct
    method Get (line 28) | func (d *Dynamic) Get(ctx context.Context, path string) (runtime.Objec...
    method List (line 38) | func (d *Dynamic) List(ctx context.Context, ns string) ([]runtime.Obje...
    method toTable (line 42) | func (d *Dynamic) toTable(ctx context.Context, fqn string) ([]runtime....
    method transformRequests (line 152) | func (d *Dynamic) transformRequests(req *rest.Request) {
  function decodeIntoTable (line 93) | func decodeIntoTable(obj runtime.Object, allNs bool) (runtime.Object, er...

FILE: internal/dao/generic.go
  type Grace (line 19) | type Grace
  constant DefaultGrace (line 23) | DefaultGrace Grace = -1
  constant ForceGrace (line 26) | ForceGrace Grace = 0
  constant NowGrace (line 29) | NowGrace Grace = 1
  type Generic (line 35) | type Generic struct
    method List (line 41) | func (g *Generic) List(ctx context.Context, ns string) ([]runtime.Obje...
    method Get (line 75) | func (g *Generic) Get(ctx context.Context, path string) (runtime.Objec...
    method Describe (line 91) | func (g *Generic) Describe(path string) (string, error) {
    method ToYAML (line 96) | func (g *Generic) ToYAML(path string, showManaged bool) (string, error) {
    method Delete (line 110) | func (g *Generic) Delete(ctx context.Context, path string, propagation...
    method dynClient (line 142) | func (g *Generic) dynClient() (dynamic.NamespaceableResourceInterface,...

FILE: internal/dao/helm_chart.go
  type HelmChart (line 30) | type HelmChart struct
    method List (line 35) | func (h *HelmChart) List(_ context.Context, ns string) ([]runtime.Obje...
    method Get (line 58) | func (h *HelmChart) Get(_ context.Context, path string) (runtime.Objec...
    method GetValues (line 73) | func (h *HelmChart) GetValues(path string, allValues bool) ([]byte, er...
    method Describe (line 90) | func (h *HelmChart) Describe(path string) (string, error) {
    method ToYAML (line 105) | func (h *HelmChart) ToYAML(path string, _ bool) (string, error) {
    method Delete (line 120) | func (h *HelmChart) Delete(_ context.Context, path string, _ *metav1.D...
    method Uninstall (line 125) | func (h *HelmChart) Uninstall(path string, keepHist bool) error {
  function ensureHelmConfig (line 147) | func ensureHelmConfig(flags *genericclioptions.ConfigFlags, ns string) (...
  function helmLogger (line 167) | func helmLogger(fmat string, args ...any) {

FILE: internal/dao/helm_history.go
  type HelmHistory (line 29) | type HelmHistory struct
    method List (line 34) | func (h *HelmHistory) List(ctx context.Context, _ string) ([]runtime.O...
    method Get (line 60) | func (h *HelmHistory) Get(_ context.Context, path string) (runtime.Obj...
    method Describe (line 87) | func (h *HelmHistory) Describe(path string) (string, error) {
    method ToYAML (line 102) | func (h *HelmHistory) ToYAML(path string, _ bool) (string, error) {
    method GetValues (line 117) | func (h *HelmHistory) GetValues(path string, allValues bool) ([]byte, ...
    method Rollback (line 138) | func (h *HelmHistory) Rollback(_ context.Context, path, rev string) er...
    method Delete (line 156) | func (h *HelmHistory) Delete(_ context.Context, path string, _ *metav1...

FILE: internal/dao/helpers.go
  constant defaultServiceAccount (line 23) | defaultServiceAccount = "default"
  constant DefaultContainerAnnotation (line 26) | DefaultContainerAnnotation = "kubectl.kubernetes.io/default-container"
  function GetDefaultContainer (line 30) | func GetDefaultContainer(m *metav1.ObjectMeta, spec *v1.PodSpec) (string...
  function extractFQN (line 49) | func extractFQN(o runtime.Object) string {
  function FQN (line 60) | func FQN(ns, n string) string {
  function inList (line 67) | func inList(ll []string, s string) bool {
  function toPerc (line 76) | func toPerc(v, dv float64) float64 {
  function ToYAML (line 85) | func ToYAML(o runtime.Object, showManaged bool) (string, error) {
  function serviceAccountMatches (line 109) | func serviceAccountMatches(podSA, saName string) bool {
  function ContinuousRanges (line 119) | func ContinuousRanges(indexes []int) [][]int {

FILE: internal/dao/helpers_test.go
  function TestToPerc (line 13) | func TestToPerc(t *testing.T) {
  function TestServiceAccountMatches (line 28) | func TestServiceAccountMatches(t *testing.T) {
  function TestContinuousRanges (line 65) | func TestContinuousRanges(t *testing.T) {

FILE: internal/dao/img_scan.go
  type ImageScan (line 20) | type ImageScan struct
    method listImages (line 24) | func (is *ImageScan) listImages(ctx context.Context, gvr *client.GVR, ...
    method List (line 38) | func (is *ImageScan) List(ctx context.Context, _ string) ([]runtime.Ob...

FILE: internal/dao/job.go
  type Job (line 30) | type Job struct
    method ListImages (line 35) | func (j *Job) ListImages(_ context.Context, fqn string) ([]string, err...
    method List (line 45) | func (j *Job) List(ctx context.Context, ns string) ([]runtime.Object, ...
    method TailLogs (line 76) | func (j *Job) TailLogs(ctx context.Context, opts *LogOptions) ([]LogCh...
    method GetInstance (line 95) | func (j *Job) GetInstance(fqn string) (*batchv1.Job, error) {
    method ScanSA (line 111) | func (j *Job) ScanSA(_ context.Context, fqn string, wait bool) (Refs, ...
    method Scan (line 137) | func (j *Job) Scan(_ context.Context, gvr *client.GVR, fqn string, wai...

FILE: internal/dao/log_item.go
  type LogChan (line 11) | type LogChan
  type LogItem (line 16) | type LogItem struct
    method ID (line 38) | func (l *LogItem) ID() string {
    method GetTimestamp (line 46) | func (l *LogItem) GetTimestamp() string {
    method Info (line 55) | func (l *LogItem) Info() string {
    method IsEmpty (line 60) | func (l *LogItem) IsEmpty() bool {
    method Size (line 65) | func (l *LogItem) Size() int {
    method Render (line 70) | func (l *LogItem) Render(paint string, showTime bool, bb *bytes.Buffer) {
  function NewLogItem (line 24) | func NewLogItem(bb []byte) *LogItem {
  function NewLogItemFromString (line 31) | func NewLogItemFromString(s string) *LogItem {

FILE: internal/dao/log_item_test.go
  function TestLogItemEmpty (line 17) | func TestLogItemEmpty(t *testing.T) {
  function TestLogItemRender (line 35) | func TestLogItemRender(t *testing.T) {
  function BenchmarkLogItemRenderTS (line 108) | func BenchmarkLogItemRenderTS(b *testing.B) {
  function BenchmarkLogItemRenderNoTS (line 121) | func BenchmarkLogItemRenderNoTS(b *testing.B) {

FILE: internal/dao/log_items.go
  type podColors (line 17) | type podColors
  type LogItems (line 31) | type LogItems struct
    method Items (line 45) | func (l *LogItems) Items() []*LogItem {
    method Len (line 53) | func (l *LogItems) Len() int {
    method Clear (line 61) | func (l *LogItems) Clear() {
    method Shift (line 72) | func (l *LogItems) Shift(i *LogItem) {
    method Subset (line 80) | func (l *LogItems) Subset(index int) *LogItems {
    method Merge (line 91) | func (l *LogItems) Merge(n *LogItems) {
    method Add (line 102) | func (l *LogItems) Add(ii ...*LogItem) {
    method podColorFor (line 109) | func (l *LogItems) podColorFor(id string) string {
    method Lines (line 124) | func (l *LogItems) Lines(index int, showTime bool, ll [][]byte) {
    method StrLines (line 136) | func (l *LogItems) StrLines(index int, showTime bool) []string {
    method Render (line 151) | func (l *LogItems) Render(index int, showTime bool, ll [][]byte) {
    method DumpDebug (line 160) | func (l *LogItems) DumpDebug(m string) {
    method Filter (line 168) | func (l *LogItems) Filter(index int, q string, showTime bool) (matches...
    method fuzzyFilter (line 184) | func (l *LogItems) fuzzyFilter(index int, q string, showTime bool) (ma...
    method filterLogs (line 196) | func (l *LogItems) filterLogs(index int, q string, showTime bool) (mat...
  function NewLogItems (line 38) | func NewLogItems() *LogItems {

FILE: internal/dao/log_items_test.go
  function init (line 16) | func init() {
  function TestLogItemsFilter (line 20) | func TestLogItemsFilter(t *testing.T) {
  function TestLogItemsRender (line 100) | func TestLogItemsRender(t *testing.T) {

FILE: internal/dao/log_options.go
  type LogOptions (line 16) | type LogOptions struct
    method Info (line 33) | func (o *LogOptions) Info() string {
    method Clone (line 42) | func (o *LogOptions) Clone() *LogOptions {
    method HasContainer (line 60) | func (o *LogOptions) HasContainer() bool {
    method ToggleAllContainers (line 65) | func (o *LogOptions) ToggleAllContainers() {
    method ToPodLogOptions (line 81) | func (o *LogOptions) ToPodLogOptions() *v1.PodLogOptions {
    method ToLogItem (line 116) | func (o *LogOptions) ToLogItem(bytes []byte) *LogItem {
    method ToErrLogItem (line 135) | func (*LogOptions) ToErrLogItem(err error) *LogItem {

FILE: internal/dao/log_options_test.go
  function TestLogOptionsToggleAllContainers (line 13) | func TestLogOptionsToggleAllContainers(t *testing.T) {

FILE: internal/dao/node.go
  type NodeMetricsFunc (line 33) | type NodeMetricsFunc
  type Node (line 36) | type Node struct
    method ToggleCordon (line 41) | func (n *Node) ToggleCordon(fqn string, cordon bool) error {
    method Drain (line 98) | func (n *Node) Drain(path string, opts DrainOptions, w io.Writer) error {
    method Get (line 134) | func (n *Node) Get(ctx context.Context, path string) (runtime.Object, ...
    method List (line 159) | func (n *Node) List(ctx context.Context, ns string) ([]runtime.Object,...
    method CountPods (line 208) | func (*Node) CountPods(oo []runtime.Object, nodeName string) (int, err...
    method GetPods (line 228) | func (n *Node) GetPods(nodeName string) ([]*v1.Pod, error) {
    method ensureCordoned (line 249) | func (n *Node) ensureCordoned(path string) (bool, error) {
  method toDrainHelper (line 83) | func (o DrainOptions) toDrainHelper(k kubernetes.Interface, w io.Writer)...
  function FetchNode (line 262) | func FetchNode(_ context.Context, f Factory, path string) (*v1.Node, err...
  function FetchNodes (line 287) | func FetchNodes(_ context.Context, f Factory, _ string) (*v1.NodeList, e...

FILE: internal/dao/non_resource.go
  type NonResource (line 16) | type NonResource struct
    method Init (line 25) | func (n *NonResource) Init(f Factory, gvr *client.GVR) {
    method SetIncludeObject (line 32) | func (n *NonResource) SetIncludeObject(f bool) {
    method gvrStr (line 36) | func (n *NonResource) gvrStr() string {
    method getFactory (line 43) | func (n *NonResource) getFactory() Factory {
    method GVR (line 51) | func (n *NonResource) GVR() string {
    method Get (line 59) | func (*NonResource) Get(context.Context, string) (runtime.Object, erro...

FILE: internal/dao/ns.go
  type Namespace (line 9) | type Namespace struct

FILE: internal/dao/patch.go
  type ImageSpec (line 11) | type ImageSpec struct
  type ImageSpecs (line 18) | type ImageSpecs
  type JsonPatch (line 21) | type JsonPatch struct
  type Spec (line 26) | type Spec struct
  type PodSpec (line 31) | type PodSpec struct
  type ImagesSpec (line 36) | type ImagesSpec struct
  type Element (line 44) | type Element struct
  function GetTemplateJsonPatch (line 50) | func GetTemplateJsonPatch(imageSpecs ImageSpecs) ([]byte, error) {
  function GetJsonPatch (line 60) | func GetJsonPatch(imageSpecs ImageSpecs) ([]byte, error) {
  function getPatchPodSpec (line 65) | func getPatchPodSpec(imageSpecs ImageSpecs) PodSpec {
  function extractElements (line 78) | func extractElements(imageSpecs ImageSpecs) (initElementsOrders, initEle...

FILE: internal/dao/patch_test.go
  function TestGetTemplateJsonPatch (line 12) | func TestGetTemplateJsonPatch(t *testing.T) {
  function TestGetJsonPatch (line 55) | func TestGetJsonPatch(t *testing.T) {

FILE: internal/dao/pod.go
  type streamResult (line 43) | type streamResult
  constant logRetryCount (line 46) | logRetryCount                  = 20
  constant logBackoffInitial (line 47) | logBackoffInitial              = 500 * time.Millisecond
  constant logBackoffMax (line 48) | logBackoffMax                  = 30 * time.Second
  constant logChannelBuffer (line 49) | logChannelBuffer               = 50
  constant streamEOF (line 50) | streamEOF         streamResult = iota
  constant streamError (line 51) | streamError
  constant streamCanceled (line 52) | streamCanceled
  type Pod (line 56) | type Pod struct
    method shouldStopRetrying (line 61) | func (p *Pod) shouldStopRetrying(path string) bool {
    method Get (line 80) | func (p *Pod) Get(ctx context.Context, path string) (runtime.Object, e...
    method ListImages (line 100) | func (p *Pod) ListImages(_ context.Context, path string) ([]string, er...
    method List (line 110) | func (p *Pod) List(ctx context.Context, ns string) ([]runtime.Object, ...
    method Logs (line 152) | func (p *Pod) Logs(path string, opts *v1.PodLogOptions) (*restclient.R...
    method Containers (line 171) | func (p *Pod) Containers(path string, includeInit bool) ([]string, err...
    method Pod (line 192) | func (*Pod) Pod(fqn string) (string, error) {
    method GetInstance (line 197) | func (p *Pod) GetInstance(fqn string) (*v1.Pod, error) {
    method TailLogs (line 213) | func (p *Pod) TailLogs(ctx context.Context, opts *LogOptions) ([]LogCh...
    method ScanSA (line 259) | func (p *Pod) ScanSA(_ context.Context, fqn string, wait bool) (Refs, ...
    method Scan (line 289) | func (p *Pod) Scan(_ context.Context, gvr *client.GVR, fqn string, wai...
    method GetPodSpec (line 532) | func (p *Pod) GetPodSpec(path string) (*v1.PodSpec, error) {
    method SetImages (line 543) | func (p *Pod) SetImages(ctx context.Context, path string, imageSpecs I...
    method isControlled (line 578) | func (p *Pod) isControlled(path string) (fqn string, ok bool, err erro...
    method Sanitize (line 602) | func (p *Pod) Sanitize(ctx context.Context, ns string) (int, error) {
  function tailLogs (line 357) | func tailLogs(ctx context.Context, logger Logger, opts *LogOptions) LogC...
  function readLogs (line 472) | func readLogs(ctx context.Context, stream io.ReadCloser, out chan<- *Log...
  function MetaFQN (line 523) | func MetaFQN(m *metav1.ObjectMeta) string {

FILE: internal/dao/pod_test.go
  function TestGetDefaultContainer (line 14) | func TestGetDefaultContainer(t *testing.T) {

FILE: internal/dao/port_forward.go
  type PortForward (line 28) | type PortForward struct
    method Delete (line 33) | func (p *PortForward) Delete(_ context.Context, path string, _ *metav1...
    method List (line 40) | func (p *PortForward) List(ctx context.Context, _ string) ([]runtime.O...
  function PodToKey (line 81) | func PodToKey(path string) string {
  function BenchConfigFor (line 92) | func BenchConfigFor(benchFile, path string) config.BenchConfig {

FILE: internal/dao/port_forward_test.go
  function TestBenchForConfig (line 14) | func TestBenchForConfig(t *testing.T) {

FILE: internal/dao/port_forwarder.go
  constant defaultTimeout (line 28) | defaultTimeout = 30 * time.Second
  type PortForwarder (line 31) | type PortForwarder struct
    method String (line 52) | func (p *PortForwarder) String() string {
    method Age (line 57) | func (p *PortForwarder) Age() time.Time {
    method Active (line 62) | func (p *PortForwarder) Active() bool {
    method SetActive (line 67) | func (p *PortForwarder) SetActive(b bool) {
    method Port (line 72) | func (p *PortForwarder) Port() string {
    method Address (line 77) | func (p *PortForwarder) Address() string {
    method ContainerPort (line 82) | func (p *PortForwarder) ContainerPort() string {
    method LocalPort (line 87) | func (p *PortForwarder) LocalPort() string {
    method ID (line 92) | func (p *PortForwarder) ID() string {
    method Container (line 97) | func (p *PortForwarder) Container() string {
    method Stop (line 102) | func (p *PortForwarder) Stop() {
    method FQN (line 111) | func (p *PortForwarder) FQN() string {
    method HasPortMapping (line 116) | func (p *PortForwarder) HasPortMapping(portMap string) bool {
    method Start (line 121) | func (p *PortForwarder) Start(path string, tt port.PortTunnel) (*portf...
    method forwardPorts (line 173) | func (p *PortForwarder) forwardPorts(method string, u *url.URL, addr, ...
  function NewPortForwarder (line 43) | func NewPortForwarder(f Factory) *PortForwarder {
  function PortForwardID (line 203) | func PortForwardID(path, co, portMap string) string {
  function codec (line 211) | func codec() (serializer.CodecFactory, runtime.ParameterCodec) {

FILE: internal/dao/pulse.go
  type Pulse (line 14) | type Pulse struct
    method List (line 19) | func (*Pulse) List(context.Context, string) ([]runtime.Object, error) {

FILE: internal/dao/rbac.go
  type Rbac (line 25) | type Rbac struct
    method List (line 30) | func (r *Rbac) List(ctx context.Context, ns string) ([]runtime.Object,...
    method loadClusterRoleBinding (line 54) | func (r *Rbac) loadClusterRoleBinding(path string) ([]runtime.Object, ...
    method loadRoleBinding (line 78) | func (r *Rbac) loadRoleBinding(path string) ([]runtime.Object, error) {
    method loadClusterRole (line 114) | func (r *Rbac) loadClusterRole(fqn string) ([]runtime.Object, error) {
    method loadRole (line 128) | func (r *Rbac) loadRole(path string) ([]runtime.Object, error) {
  function asRuntimeObjects (line 142) | func asRuntimeObjects(rr render.Policies) []runtime.Object {
  function parseRules (line 151) | func parseRules(ns, binding string, rules []rbacv1.PolicyRule) render.Po...

FILE: internal/dao/rbac_policy.go
  type Policy (line 27) | type Policy struct
    method List (line 32) | func (p *Policy) List(ctx context.Context, _ string) ([]runtime.Object...
    method loadClusterRoleBinding (line 62) | func (p *Policy) loadClusterRoleBinding(kind, name string) (render.Pol...
    method loadRoleBinding (line 93) | func (p *Policy) loadRoleBinding(kind, name string) (render.Policies, ...
    method fetchRoleBindingNamespaces (line 167) | func (p *Policy) fetchRoleBindingNamespaces(kind, name string) (map[st...
    method fetchClusterRoles (line 204) | func (p *Policy) fetchClusterRoles() ([]rbacv1.ClusterRole, error) {
    method fetchRoles (line 222) | func (p *Policy) fetchRoles() ([]rbacv1.Role, error) {
  function fetchClusterRoleBindings (line 131) | func fetchClusterRoleBindings(f Factory) ([]rbacv1.ClusterRoleBinding, e...
  function fetchRoleBindings (line 149) | func fetchRoleBindings(f Factory) ([]rbacv1.RoleBinding, error) {
  function isSameSubject (line 189) | func isSameSubject(kind, ns, bns, name string, subject *rbacv1.Subject) ...

FILE: internal/dao/rbac_policy_test.go
  function TestIsSameSubject (line 13) | func TestIsSameSubject(t *testing.T) {

FILE: internal/dao/rbac_subject.go
  type Subject (line 21) | type Subject struct
    method List (line 26) | func (s *Subject) List(ctx context.Context, _ string) ([]runtime.Objec...
    method listClusterRoleBindings (line 53) | func (s *Subject) listClusterRoleBindings(kind string) (render.Subject...
    method listRoleBindings (line 76) | func (s *Subject) listRoleBindings(kind string) (render.Subjects, erro...

FILE: internal/dao/recorder.go
  constant seriesCacheSize (line 24) | seriesCacheSize   = 600
  constant seriesCacheExpiry (line 25) | seriesCacheExpiry = 3 * time.Hour
  constant seriesRecordRate (line 26) | seriesRecordRate  = 1 * time.Minute
  constant nodeMetrics (line 27) | nodeMetrics       = "node"
  constant podMetrics (line 28) | podMetrics        = "pod"
  type MetricsChan (line 31) | type MetricsChan
  type TimeSeries (line 33) | type TimeSeries
  type Point (line 35) | type Point struct
  type Recorder (line 41) | type Recorder struct
    method Clear (line 65) | func (r *Recorder) Clear() {
    method dispatchSeries (line 75) | func (r *Recorder) dispatchSeries(kind, ns string) {
    method Watch (line 104) | func (r *Recorder) Watch(ctx context.Context, ns string) MetricsChan {
    method Record (line 141) | func (r *Recorder) Record(ctx context.Context) error {
    method recordNodeMetrics (line 148) | func (r *Recorder) recordNodeMetrics(ctx context.Context) error {
    method recordClusterMetrics (line 173) | func (r *Recorder) recordClusterMetrics(ctx context.Context, nn *v1.No...
    method recordPodMetrics (line 209) | func (r *Recorder) recordPodMetrics(ctx context.Context, ns string) er...
    method recordPodsMetrics (line 230) | func (r *Recorder) recordPodsMetrics(ctx context.Context, ns string) e...
  function DialRecorder (line 48) | func DialRecorder(c client.Connection) *Recorder {
  function ResetRecorder (line 60) | func ResetRecorder(c client.Connection) {
  function FetchPods (line 276) | func FetchPods(_ context.Context, f Factory, ns string) (*v1.PodList, er...

FILE: internal/dao/reference.go
  type Reference (line 19) | type Reference struct
    method List (line 24) | func (r *Reference) List(ctx context.Context, _ string) ([]runtime.Obj...
    method Get (line 38) | func (*Reference) Get(context.Context, string) (runtime.Object, error) {
    method Scan (line 43) | func (r *Reference) Scan(ctx context.Context) ([]runtime.Object, error) {
    method ScanSA (line 68) | func (r *Reference) ScanSA(ctx context.Context) ([]runtime.Object, err...

FILE: internal/dao/registry.go
  constant crdCat (line 26) | crdCat   = "crd"
  constant k9sCat (line 27) | k9sCat   = "k9s"
  constant helmCat (line 28) | helmCat  = "helm"
  constant scaleCat (line 29) | scaleCat = "scale"
  type ResourceMetas (line 49) | type ResourceMetas
    method clear (line 51) | func (m ResourceMetas) clear() {
  type Meta (line 61) | type Meta struct
    method Lookup (line 71) | func (m *Meta) Lookup(cmd string) *client.GVR {
    method RegisterMeta (line 87) | func (m *Meta) RegisterMeta(gvr string, res *metav1.APIResource) {
    method AllGVRs (line 95) | func (m *Meta) AllGVRs() client.GVRs {
    method GVK2GVR (line 104) | func (m *Meta) GVK2GVR(gv schema.GroupVersion, kind string) (*client.G...
    method IsNamespaced (line 118) | func (m *Meta) IsNamespaced(gvr *client.GVR) (bool, error) {
    method MetaFor (line 128) | func (m *Meta) MetaFor(gvr *client.GVR) (*metav1.APIResource, error) {
    method LoadResources (line 162) | func (m *Meta) LoadResources(f Factory) error {
  function NewMeta (line 67) | func NewMeta() *Meta {
  function IsCRD (line 140) | func IsCRD(r *metav1.APIResource) bool {
  function IsK8sMeta (line 145) | func IsK8sMeta(m *metav1.APIResource) bool {
  function IsK9sMeta (line 152) | func IsK9sMeta(m *metav1.APIResource) bool {
  function IsScalable (line 157) | func IsScalable(m *metav1.APIResource) bool {
  function loadNonResource (line 180) | func loadNonResource(m ResourceMetas) {
  function loadK9s (line 186) | func loadK9s(m ResourceMetas) {
  function loadHelm (line 277) | func loadHelm(m ResourceMetas) {
  function loadRBAC (line 294) | func loadRBAC(m ResourceMetas) {
  function loadPreferred (line 318) | func loadPreferred(f Factory, m ResourceMetas) error {
  function isStandardGroup (line 356) | func isStandardGroup(gv string) bool {
  function isScalable (line 360) | func isScalable(gvr *client.GVR) bool {
  function isDeprecated (line 369) | func isDeprecated(gvr *client.GVR) bool {
  function loadCRDs (line 374) | func loadCRDs(f Factory, m ResourceMetas) {

FILE: internal/dao/registry_test.go
  function TestMetaFor (line 16) | func TestMetaFor(t *testing.T) {

FILE: internal/dao/resource.go
  type Resource (line 22) | type Resource struct
    method List (line 27) | func (r *Resource) List(ctx context.Context, ns string) ([]runtime.Obj...
    method Get (line 37) | func (r *Resource) Get(_ context.Context, path string) (runtime.Object...
    method ToYAML (line 42) | func (r *Resource) ToYAML(path string, showManaged bool) (string, erro...

FILE: internal/dao/rest_mapper.go
  type RestMapper (line 20) | type RestMapper struct
    method ToRESTMapper (line 25) | func (r *RestMapper) ToRESTMapper() (meta.RESTMapper, error) {
    method ResourceFor (line 38) | func (r *RestMapper) ResourceFor(resourceArg, kind string) (*meta.REST...
    method resourceFor (line 46) | func (r *RestMapper) resourceFor(resourceArg string) (schema.GroupVers...
    method toRESTMapping (line 77) | func (*RestMapper) toRESTMapping(gvr schema.GroupVersionResource, kind...
    method Name (line 90) | func (*RestMapper) Name() meta.RESTScopeName {

FILE: internal/dao/rs.go
  type ReplicaSet (line 29) | type ReplicaSet struct
    method ListImages (line 34) | func (r *ReplicaSet) ListImages(_ context.Context, fqn string) ([]stri...
    method Load (line 44) | func (*ReplicaSet) Load(f Factory, path string) (*appsv1.ReplicaSet, e...
    method Rollback (line 88) | func (r *ReplicaSet) Rollback(fqn string) error {
  function getRSRevision (line 59) | func getRSRevision(rs *appsv1.ReplicaSet) (int64, error) {
  function controllerInfo (line 72) | func controllerInfo(rs *appsv1.ReplicaSet) (name, kind, group string, er...

FILE: internal/dao/scalable.go
  type Scaler (line 24) | type Scaler struct
    method Replicas (line 29) | func (s *Scaler) Replicas(ctx context.Context, path string) (int32, er...
    method Scale (line 45) | func (s *Scaler) Scale(ctx context.Context, path string, replicas int3...
    method scaleClient (line 71) | func (s *Scaler) scaleClient() (scale.ScalesGetter, error) {

FILE: internal/dao/screen_dump.go
  type ScreenDump (line 23) | type ScreenDump struct
    method Delete (line 28) | func (*ScreenDump) Delete(_ context.Context, path string, _ *metav1.De...
    method List (line 33) | func (*ScreenDump) List(ctx context.Context, _ string) ([]runtime.Obje...

FILE: internal/dao/secret.go
  type Secret (line 21) | type Secret struct
    method Describe (line 27) | func (s *Secret) Describe(path string) (string, error) {
    method ToYAML (line 40) | func (s *Secret) ToYAML(path string, showManaged bool) (string, error) {
    method decodeYAML (line 48) | func (s *Secret) decodeYAML(path string, showManaged bool) (string, er...
    method SetDecodeData (line 83) | func (s *Secret) SetDecodeData(b bool) {
    method Decode (line 89) | func (s *Secret) Decode(encodedDescription, path string) (string, erro...
  function ExtractSecrets (line 126) | func ExtractSecrets(o runtime.Object) (map[string]string, error) {

FILE: internal/dao/secret_test.go
  function TestEncodedSecretDescribe (line 15) | func TestEncodedSecretDescribe(t *testing.T) {

FILE: internal/dao/sts.go
  type StatefulSet (line 37) | type StatefulSet struct
    method ListImages (line 42) | func (s *StatefulSet) ListImages(_ context.Context, fqn string) ([]str...
    method Scale (line 52) | func (s *StatefulSet) Scale(ctx context.Context, path string, replicas...
    method Restart (line 57) | func (s *StatefulSet) Restart(ctx context.Context, path string, opts *...
    method GetInstance (line 62) | func (*StatefulSet) GetInstance(f Factory, fqn string) (*appsv1.Statef...
    method TailLogs (line 78) | func (s *StatefulSet) TailLogs(ctx context.Context, opts *LogOptions) ...
    method Pod (line 91) | func (s *StatefulSet) Pod(fqn string) (string, error) {
    method getStatefulSet (line 100) | func (s *StatefulSet) getStatefulSet(fqn string) (*appsv1.StatefulSet,...
    method ScanSA (line 116) | func (s *StatefulSet) ScanSA(_ context.Context, fqn string, wait bool)...
    method Scan (line 142) | func (s *StatefulSet) Scan(_ context.Context, gvr *client.GVR, fqn str...
    method GetPodSpec (line 213) | func (s *StatefulSet) GetPodSpec(path string) (*v1.PodSpec, error) {
    method SetImages (line 223) | func (s *StatefulSet) SetImages(ctx context.Context, path string, imag...

FILE: internal/dao/svc.go
  type Service (line 25) | type Service struct
    method TailLogs (line 30) | func (s *Service) TailLogs(ctx context.Context, opts *LogOptions) ([]L...
    method Pod (line 43) | func (s *Service) Pod(fqn string) (string, error) {
    method GetInstance (line 53) | func (s *Service) GetInstance(fqn string) (*v1.Service, error) {
  function podFromSelector (line 71) | func podFromSelector(f Factory, ns string, sel map[string]string) (strin...

FILE: internal/dao/table.go
  constant gvFmt (line 22) | gvFmt       = "application/json;as=Table;v=%s;g=%s, application/json"
  constant includeMeta (line 23) | includeMeta = "Metadata"
  constant includeObj (line 24) | includeObj  = "Object"
  constant includeNone (line 25) | includeNone = "None"
  constant header (line 26) | header      = "application/json;as=Table;v=v1;g=meta.k8s.io,application/...
  type Table (line 32) | type Table struct
    method Get (line 37) | func (t *Table) Get(ctx context.Context, path string) (runtime.Object,...
    method List (line 59) | func (t *Table) List(ctx context.Context, ns string) ([]runtime.Object...
    method getClient (line 143) | func (t *Table) getClient(f serializer.CodecFactory) (*rest.RESTClient...
    method codec (line 163) | func (t *Table) codec() (serializer.CodecFactory, runtime.ParameterCod...
  function decodeTable (line 105) | func decodeTable(ctx context.Context, table *metav1.Table, namespaced bo...

FILE: internal/dao/types.go
  type Factory (line 22) | type Factory interface
  type ImageLister (line 49) | type ImageLister interface
  type Getter (line 55) | type Getter interface
  type Lister (line 61) | type Lister interface
  type Accessor (line 67) | type Accessor interface
  type DrainOptions (line 82) | type DrainOptions struct
  type NodeMaintainer (line 92) | type NodeMaintainer interface
  type Loggable (line 101) | type Loggable interface
  type Describer (line 107) | type Describer interface
  type Scalable (line 116) | type Scalable interface
  type ReplicasGetter (line 122) | type ReplicasGetter interface
  type Controller (line 128) | type Controller interface
  type Nuker (line 134) | type Nuker interface
  type Switchable (line 140) | type Switchable interface
  type Restartable (line 146) | type Restartable interface
  type Runnable (line 152) | type Runnable interface
  type Logger (line 158) | type Logger interface
  type ContainsPodSpec (line 164) | type ContainsPodSpec interface
  type Sanitizer (line 173) | type Sanitizer interface
  type Valuer (line 179) | type Valuer interface

FILE: internal/dao/utils_test.go
  type testFactory (line 22) | type testFactory struct
    method Client (line 40) | func (*testFactory) Client() client.Connection {
    method Get (line 43) | func (f *testFactory) Get(gvr *client.GVR, fqn string, _ bool, _ label...
    method List (line 55) | func (f *testFactory) List(gvr *client.GVR, ns string, _ bool, _ label...
    method ForResource (line 59) | func (*testFactory) ForResource(string, *client.GVR) (informers.Generi...
    method CanForResource (line 62) | func (*testFactory) CanForResource(string, *client.GVR, []string) (inf...
    method WaitForCacheSync (line 65) | func (*testFactory) WaitForCacheSync() {}
    method Forwarders (line 66) | func (*testFactory) Forwarders() watch.Forwarders {
    method DeleteForwarder (line 69) | func (*testFactory) DeleteForwarder(string) {}
  function makeFactory (line 26) | func makeFactory() dao.Factory {
  function load (line 71) | func load(n string) *unstructured.Unstructured {

FILE: internal/dao/workload.go
  constant StatusOK (line 25) | StatusOK       = "OK"
  constant DegradedStatus (line 26) | DegradedStatus = "DEGRADED"
  type Workload (line 39) | type Workload struct
    method Delete (line 43) | func (w *Workload) Delete(ctx context.Context, path string, propagatio...
    method fetch (line 78) | func (a *Workload) fetch(ctx context.Context, gvr *client.GVR, ns stri...
    method List (line 96) | func (a *Workload) List(ctx context.Context, ns string) ([]runtime.Obj...
  function readiness (line 136) | func readiness(gvr *client.GVR, r *metav1.TableRow, h []metav1.TableColu...
  function status (line 151) | func status(gvr *client.GVR, r *metav1.TableRow, h []metav1.TableColumnD...
  function validity (line 187) | func validity(status string) string {
  function isReady (line 195) | func isReady(s string) bool {
  function indexOf (line 223) | func indexOf(n string, defs []metav1.TableColumnDefinition) int {

FILE: internal/health/check.go
  type Check (line 13) | type Check struct
    method Set (line 31) | func (c *Check) Set(l Level, v int64) {
    method Inc (line 36) | func (c *Check) Inc(l Level) {
    method Total (line 41) | func (c *Check) Total(n int64) {
    method Tally (line 46) | func (c *Check) Tally(l Level) int64 {
    method GetObjectKind (line 51) | func (Check) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 56) | func (c Check) DeepCopyObject() runtime.Object {
  type Checks (line 20) | type Checks
  function NewCheck (line 23) | func NewCheck(gvr *client.GVR) *Check {

FILE: internal/health/check_test.go
  function TestCheck (line 14) | func TestCheck(t *testing.T) {

FILE: internal/health/types.go
  type Level (line 7) | type Level
  constant Unknown (line 11) | Unknown Level = 1 << iota
  constant Corpus (line 14) | Corpus
  constant S1 (line 17) | S1
  constant S2 (line 20) | S2
  constant S3 (line 23) | S3
  type Message (line 27) | type Message struct
  type Messages (line 35) | type Messages
  type Counts (line 38) | type Counts
  type Vital (line 41) | type Vital struct
  type Vitals (line 47) | type Vitals

FILE: internal/helpers.go
  function IsInverseSelector (line 21) | func IsInverseSelector(s string) bool {
  function IsLabelSelector (line 29) | func IsLabelSelector(s string) bool {
  function IsFuzzySelector (line 38) | func IsFuzzySelector(s string) (string, bool) {

FILE: internal/helpers_test.go
  function TestIsLabelSelector (line 13) | func TestIsLabelSelector(t *testing.T) {

FILE: internal/keys.go
  type ContextKey (line 7) | type ContextKey
  constant KeyFactory (line 11) | KeyFactory       ContextKey = "factory"
  constant KeyLabels (line 12) | KeyLabels        ContextKey = "labels"
  constant KeyFields (line 13) | KeyFields        ContextKey = "fields"
  constant KeyTable (line 14) | KeyTable         ContextKey = "table"
  constant KeyDir (line 15) | KeyDir           ContextKey = "dir"
  constant KeyPath (line 16) | KeyPath          ContextKey = "path"
  constant KeySubject (line 17) | KeySubject       ContextKey = "subject"
  constant KeyGVR (line 18) | KeyGVR           ContextKey = "gvr"
  constant KeyFQN (line 19) | KeyFQN           ContextKey = "fqn"
  constant KeyForwards (line 20) | KeyForwards      ContextKey = "forwards"
  constant KeyContainers (line 21) | KeyContainers    ContextKey = "containers"
  constant KeyBenchCfg (line 22) | KeyBenchCfg      ContextKey = "benchcfg"
  constant KeyAliases (line 23) | KeyAliases       ContextKey = "aliases"
  constant KeyUID (line 24) | KeyUID           ContextKey = "uid"
  constant KeySubjectKind (line 25) | KeySubjectKind   ContextKey = "subjectKind"
  constant KeySubjectName (line 26) | KeySubjectName   ContextKey = "subjectName"
  constant KeyNamespace (line 27) | KeyNamespace     ContextKey = "namespace"
  constant KeyCluster (line 28) | KeyCluster       ContextKey = "cluster"
  constant KeyApp (line 29) | KeyApp           ContextKey = "app"
  constant KeyStyles (line 30) | KeyStyles        ContextKey = "styles"
  constant KeyMetrics (line 31) | KeyMetrics       ContextKey = "metrics"
  constant KeyHasMetrics (line 32) | KeyHasMetrics    ContextKey = "has-metrics"
  constant KeyToast (line 33) | KeyToast         ContextKey = "toast"
  constant KeyWithMetrics (line 34) | KeyWithMetrics   ContextKey = "withMetrics"
  constant KeyViewConfig (line 35) | KeyViewConfig    ContextKey = "viewConfig"
  constant KeyWait (line 36) | KeyWait          ContextKey = "wait"
  constant KeyPodCounting (line 37) | KeyPodCounting   ContextKey = "podCounting"
  constant KeyEnableImgScan (line 38) | KeyEnableImgScan ContextKey = "vulScan"

FILE: internal/model/cluster.go
  constant clusterCacheSize (line 19) | clusterCacheSize   = 100
  constant clusterCacheExpiry (line 20) | clusterCacheExpiry = 1 * time.Minute
  constant clusterNodesKey (line 21) | clusterNodesKey    = "nodes"
  type MetricsServer (line 26) | type MetricsServer interface
  type MetricsService (line 35) | type MetricsService interface
  type Cluster (line 42) | type Cluster struct
    method Version (line 59) | func (c *Cluster) Version() string {
    method ContextName (line 69) | func (c *Cluster) ContextName() string {
    method ClusterName (line 78) | func (c *Cluster) ClusterName() string {
    method UserName (line 87) | func (c *Cluster) UserName() string {
    method Metrics (line 96) | func (c *Cluster) Metrics(ctx context.Context, mx *client.ClusterMetri...
  function NewCluster (line 50) | func NewCluster(f dao.Factory) *Cluster {

FILE: internal/model/cluster_info.go
  constant k9sGitURL (line 24) | k9sGitURL       = "https://api.github.com/repos/derailed/k9s/releases/la...
  constant cacheSize (line 25) | cacheSize       = 10
  constant cacheExpiry (line 26) | cacheExpiry     = 1 * time.Hour
  constant k9sLatestRevKey (line 27) | k9sLatestRevKey = "k9sRev"
  type ClusterInfoListener (line 31) | type ClusterInfoListener interface
  type ClusterMeta (line 40) | type ClusterMeta struct
    method Deltas (line 63) | func (c *ClusterMeta) Deltas(n *ClusterMeta) bool {
  function NewClusterMeta (line 49) | func NewClusterMeta() *ClusterMeta {
  type ClusterInfo (line 77) | type ClusterInfo struct
    method fetchK9sLatestRev (line 102) | func (c *ClusterInfo) fetchK9sLatestRev() string {
    method Reset (line 119) | func (c *ClusterInfo) Reset(f dao.Factory) {
    method Refresh (line 132) | func (c *ClusterInfo) Refresh() {
    method AddListener (line 171) | func (c *ClusterInfo) AddListener(l ClusterInfoListener) {
    method RemoveListener (line 176) | func (c *ClusterInfo) RemoveListener(l ClusterInfoListener) {
    method fireMetaChanged (line 190) | func (c *ClusterInfo) fireMetaChanged(prev, cur *ClusterMeta) {
    method fireNoMetaChanged (line 196) | func (c *ClusterInfo) fireNoMetaChanged(data *ClusterMeta) {
  function NewClusterInfo (line 89) | func NewClusterInfo(f dao.Factory, v string, cfg *config.K9s) *ClusterIn...
  function fetchLatestRev (line 204) | func fetchLatestRev() (string, error) {

FILE: internal/model/cluster_info_test.go
  function init (line 14) | func init() {
  function TestClusterMetaDelta (line 18) | func TestClusterMetaDelta(t *testing.T) {
  function makeClusterMeta (line 48) | func makeClusterMeta(cluster string) *model.ClusterMeta {

FILE: internal/model/cmd_buff.go
  constant maxBuff (line 13) | maxBuff = 10
  constant keyEntryDelay (line 15) | keyEntryDelay = 100 * time.Millisecond
  constant CommandBuffer (line 18) | CommandBuffer BufferKind = 1 << iota
  constant FilterBuffer (line 20) | FilterBuffer
  type BufferKind (line 25) | type BufferKind
  type BuffWatcher (line 28) | type BuffWatcher interface
  type CmdBuff (line 41) | type CmdBuff struct
    method InCmdMode (line 63) | func (c *CmdBuff) InCmdMode() bool {
    method IsActive (line 75) | func (c *CmdBuff) IsActive() bool {
    method SetActive (line 83) | func (c *CmdBuff) SetActive(b bool) {
    method GetText (line 92) | func (c *CmdBuff) GetText() string {
    method GetKind (line 100) | func (c *CmdBuff) GetKind() BufferKind {
    method GetSuggestion (line 108) | func (c *CmdBuff) GetSuggestion() string {
    method hasCancel (line 115) | func (c *CmdBuff) hasCancel() bool {
    method setCancel (line 122) | func (c *CmdBuff) setCancel(f context.CancelFunc) {
    method resetCancel (line 128) | func (c *CmdBuff) resetCancel() {
    method SetText (line 135) | func (c *CmdBuff) SetText(text, suggestion string, wipe bool) {
    method Add (line 147) | func (c *CmdBuff) Add(r rune) {
    method Delete (line 166) | func (c *CmdBuff) Delete() {
    method ClearText (line 187) | func (c *CmdBuff) ClearText(fire bool) {
    method Reset (line 198) | func (c *CmdBuff) Reset() {
    method Empty (line 205) | func (c *CmdBuff) Empty() bool {
    method AddListener (line 216) | func (c *CmdBuff) AddListener(w BuffWatcher) {
    method RemoveListener (line 223) | func (c *CmdBuff) RemoveListener(l BuffWatcher) {
    method fireBufferCompleted (line 229) | func (c *CmdBuff) fireBufferCompleted(t, s string) {
    method fireBufferChanged (line 235) | func (c *CmdBuff) fireBufferChanged(t, s string) {
    method fireActive (line 241) | func (c *CmdBuff) fireActive(b bool) {
  function NewCmdBuff (line 53) | func NewCmdBuff(key rune, kind BufferKind) *CmdBuff {

FILE: internal/model/cmd_buff_test.go
  type testListener (line 13) | type testListener struct
    method BufferChanged (line 19) | func (l *testListener) BufferChanged(t, s string) {
    method BufferCompleted (line 23) | func (l *testListener) BufferCompleted(t, s string) {
    method BufferActive (line 27) | func (l *testListener) BufferActive(s bool, _ model.BufferKind) {
  function TestCmdBuffActivate (line 35) | func TestCmdBuffActivate(t *testing.T) {
  function TestCmdBuffDeactivate (line 45) | func TestCmdBuffDeactivate(t *testing.T) {
  function TestCmdBuffChanged (line 55) | func TestCmdBuffChanged(t *testing.T) {
  function TestCmdBuffAdd (line 87) | func TestCmdBuffAdd(t *testing.T) {
  function TestCmdBuffDel (line 108) | func TestCmdBuffDel(t *testing.T) {
  function TestCmdBuffEmpty (line 130) | func TestCmdBuffEmpty(t *testing.T) {

FILE: internal/model/describe.go
  type Describe (line 24) | type Describe struct
    method GVR (line 45) | func (d *Describe) GVR() *client.GVR {
    method GetPath (line 50) | func (d *Describe) GetPath() string {
    method SetOptions (line 55) | func (*Describe) SetOptions(context.Context, ViewerToggleOpts) {}
    method Filter (line 58) | func (d *Describe) Filter(q string) {
    method filterChanged (line 63) | func (d *Describe) filterChanged(lines []string) {
    method filter (line 67) | func (d *Describe) filter(q string, lines []string) fuzzy.Matches {
    method fuzzyFilter (line 77) | func (*Describe) fuzzyFilter(q string, lines []string) fuzzy.Matches {
    method fireResourceChanged (line 81) | func (d *Describe) fireResourceChanged(lines []string, matches fuzzy.M...
    method fireResourceFailed (line 87) | func (d *Describe) fireResourceFailed(err error) {
    method ClearFilter (line 94) | func (*Describe) ClearFilter() {
    method Peek (line 98) | func (d *Describe) Peek() []string {
    method Refresh (line 103) | func (d *Describe) Refresh(ctx context.Context) error {
    method Watch (line 108) | func (d *Describe) Watch(ctx context.Context) error {
    method updater (line 116) | func (d *Describe) updater(ctx context.Context) {
    method refresh (line 140) | func (d *Describe) refresh(ctx context.Context) error {
    method reconcile (line 159) | func (d *Describe) reconcile(ctx context.Context) error {
    method describe (line 175) | func (d *Describe) describe(ctx context.Context, gvr *client.GVR, path...
    method AddListener (line 192) | func (d *Describe) AddListener(l ResourceViewerListener) {
    method RemoveListener (line 197) | func (d *Describe) RemoveListener(l ResourceViewerListener) {
    method Toggle (line 212) | func (d *Describe) Toggle() {
  function NewDescribe (line 36) | func NewDescribe(gvr *client.GVR, path string) *Describe {

FILE: internal/model/fish_buff.go
  type SuggestionListener (line 9) | type SuggestionListener interface
  type SuggestionFunc (line 17) | type SuggestionFunc
  type FishBuff (line 20) | type FishBuff struct
    method PrevSuggestion (line 37) | func (f *FishBuff) PrevSuggestion() (string, bool) {
    method NextSuggestion (line 55) | func (f *FishBuff) NextSuggestion() (string, bool) {
    method ClearSuggestions (line 73) | func (f *FishBuff) ClearSuggestions() {
    method CurrentSuggestion (line 81) | func (f *FishBuff) CurrentSuggestion() (string, bool) {
    method AutoSuggests (line 90) | func (*FishBuff) AutoSuggests() bool {
    method Suggestions (line 95) | func (f *FishBuff) Suggestions() []string {
    method SetSuggestionFn (line 103) | func (f *FishBuff) SetSuggestionFn(fn SuggestionFunc) {
    method Notify (line 108) | func (f *FishBuff) Notify(_ bool) {
    method Add (line 116) | func (f *FishBuff) Add(r rune) {
    method Delete (line 122) | func (f *FishBuff) Delete() {
    method fireSuggestionChanged (line 127) | func (f *FishBuff) fireSuggestionChanged(ss []string) {
  function NewFishBuff (line 29) | func NewFishBuff(key rune, kind BufferKind) *FishBuff {

FILE: internal/model/fish_buff_test.go
  function TestFishAdd (line 14) | func TestFishAdd(t *testing.T) {
  function TestFishDelete (line 43) | func TestFishDelete(t *testing.T) {
  type mockSuggestionListener (line 75) | type mockSuggestionListener struct
    method BufferChanged (line 81) | func (m *mockSuggestionListener) BufferChanged(_, _ string) {
    method BufferCompleted (line 85) | func (m *mockSuggestionListener) BufferCompleted(text, suggest string) {
    method BufferActive (line 92) | func (m *mockSuggestionListener) BufferActive(state bool, _ model.Buff...
    method SuggestionChanged (line 96) | func (m *mockSuggestionListener) SuggestionChanged(_, sugg string) {

FILE: internal/model/flash.go
  constant DefaultFlashDelay (line 17) | DefaultFlashDelay = 6 * time.Second
  constant FlashInfo (line 20) | FlashInfo FlashLevel = iota
  constant FlashWarn (line 22) | FlashWarn
  constant FlashErr (line 24) | FlashErr
  type LevelMessage (line 28) | type LevelMessage struct
    method IsClear (line 38) | func (l LevelMessage) IsClear() bool {
  function newClearMessage (line 33) | func newClearMessage() LevelMessage {
  type FlashLevel (line 43) | type FlashLevel
  type FlashChan (line 46) | type FlashChan
  type FlashListener (line 49) | type FlashListener interface
  type Flash (line 58) | type Flash struct
    method Channel (line 74) | func (f *Flash) Channel() FlashChan {
    method Info (line 79) | func (f *Flash) Info(msg string) {
    method Infof (line 84) | func (f *Flash) Infof(fmat string, args ...any) {
    method Warn (line 89) | func (f *Flash) Warn(msg string) {
    method Warnf (line 95) | func (f *Flash) Warnf(fmat string, args ...any) {
    method Err (line 100) | func (f *Flash) Err(err error) {
    method Errf (line 106) | func (f *Flash) Errf(fmat string, args ...any) {
    method Clear (line 121) | func (f *Flash) Clear() {
    method SetMessage (line 126) | func (f *Flash) SetMessage(level FlashLevel, msg string) {
    method refresh (line 140) | func (f *Flash) refresh(ctx context.Context) {
    method setLevelMessage (line 152) | func (f *Flash) setLevelMessage(msg LevelMessage) {
    method fireFlashChanged (line 156) | func (f *Flash) fireFlashChanged() {
    method fireCleared (line 160) | func (f *Flash) fireCleared() {
  function NewFlash (line 66) | func NewFlash(dur time.Duration) *Flash {

FILE: internal/model/flash_test.go
  function TestFlash (line 16) | func TestFlash(t *testing.T) {
  function TestFlashBurst (line 54) | func TestFlashBurst(t *testing.T) {
  type flash (line 73) | type flash struct
    method getMetrics (line 83) | func (f *flash) getMetrics() (val int, lvl model.FlashLevel, msg strin...
    method listen (line 87) | func (f *flash) listen(c model.FlashChan) {
  function newFlash (line 79) | func newFlash() *flash {

FILE: internal/model/helpers.go
  function getMeta (line 21) | func getMeta(ctx context.Context, gvr *client.GVR) (ResourceMeta, error) {
  function resourceMeta (line 32) | func resourceMeta(gvr *client.GVR) ResourceMeta {
  function MetaFQN (line 48) | func MetaFQN(m *metav1.ObjectMeta) string {
  function FQN (line 53) | func FQN(ns, n string) string {
  function NewExpBackOff (line 61) | func NewExpBackOff(ctx context.Context, start, maxVal time.Duration) bac...
  function rxFilter (line 67) | func rxFilter(q string, lines []string) fuzzy.Matches {

FILE: internal/model/helpers_int_test.go
  function Test_rxFilter (line 13) | func Test_rxFilter(t *testing.T) {

FILE: internal/model/helpers_test.go
  function TestMetaFQN (line 14) | func TestMetaFQN(t *testing.T) {

FILE: internal/model/hint.go
  type HintListener (line 7) | type HintListener interface
  type Hint (line 12) | type Hint struct
    method RemoveListener (line 23) | func (h *Hint) RemoveListener(l HintListener) {
    method AddListener (line 38) | func (h *Hint) AddListener(l HintListener) {
    method SetHints (line 43) | func (h *Hint) SetHints(hh MenuHints) {
    method Peek (line 49) | func (h *Hint) Peek() MenuHints {
    method fireChanged (line 53) | func (h *Hint) fireChanged() {
  function NewHint (line 18) | func NewHint() *Hint {

FILE: internal/model/hint_test.go
  function TestHint (line 13) | func TestHint(t *testing.T) {
  function TestHintRemoveListener (line 45) | func TestHintRemoveListener(t *testing.T) {
  type hintL (line 67) | type hintL struct
    method HintsChanged (line 71) | func (h *hintL) HintsChanged(hh model.MenuHints) {

FILE: internal/model/history.go
  constant MaxHistory (line 15) | MaxHistory = 20
  type History (line 18) | type History struct
    method List (line 33) | func (h *History) List() []string {
    method Top (line 38) | func (h *History) Top() (string, bool) {
    method SwitchNS (line 44) | func (h *History) SwitchNS(ns string) {
    method Last (line 60) | func (h *History) Last(idx int) (string, bool) {
    method at (line 66) | func (h *History) at(idx int) (string, bool) {
    method Back (line 75) | func (h *History) Back() (string, bool) {
    method Forward (line 85) | func (h *History) Forward() (string, bool) {
    method Pop (line 96) | func (h *History) Pop() bool {
    method popN (line 103) | func (h *History) popN(n int) bool {
    method Push (line 115) | func (h *History) Push(c string) {
    method Clear (line 131) | func (h *History) Clear() {
    method Empty (line 137) | func (h *History) Empty() bool {
  function NewHistory (line 25) | func NewHistory(limit int) *History {

FILE: internal/model/history_test.go
  function TestHistoryClear (line 14) | func TestHistoryClear(t *testing.T) {
  function TestHistoryPush (line 25) | func TestHistoryPush(t *testing.T) {
  function TestHistoryTop (line 36) | func TestHistoryTop(t *testing.T) {
  function TestHistoryBack (line 88) | func TestHistoryBack(t *testing.T) {
  function TestHistoryForward (line 138) | func TestHistoryForward(t *testing.T) {

FILE: internal/model/log.go
  type LogsListener (line 22) | type LogsListener interface
  type Log (line 43) | type Log struct
    method GVR (line 66) | func (l *Log) GVR() *client.GVR {
    method LogOptions (line 70) | func (l *Log) LogOptions() *dao.LogOptions {
    method SinceSeconds (line 75) | func (l *Log) SinceSeconds() int64 {
    method IsHead (line 83) | func (l *Log) IsHead() bool {
    method ToggleShowTimestamp (line 91) | func (l *Log) ToggleShowTimestamp(b bool) {
    method Head (line 96) | func (l *Log) Head(ctx context.Context) {
    method SetSinceSeconds (line 104) | func (l *Log) SetSinceSeconds(ctx context.Context, i int64) {
    method Configure (line 110) | func (l *Log) Configure(opts config.Logger) {
    method GetPath (line 116) | func (l *Log) GetPath() string {
    method GetContainer (line 121) | func (l *Log) GetContainer() string {
    method HasDefaultContainer (line 126) | func (l *Log) HasDefaultContainer() bool {
    method Init (line 131) | func (l *Log) Init(f dao.Factory) {
    method Clear (line 136) | func (l *Log) Clear() {
    method Refresh (line 146) | func (l *Log) Refresh() {
    method Restart (line 154) | func (l *Log) Restart(ctx context.Context) {
    method Start (line 162) | func (l *Log) Start(ctx context.Context) {
    method Stop (line 170) | func (l *Log) Stop() {
    method Set (line 175) | func (l *Log) Set(lines *dao.LogItems) {
    method ClearFilter (line 187) | func (l *Log) ClearFilter() {
    method Filter (line 199) | func (l *Log) Filter(q string) {
    method cancel (line 208) | func (l *Log) cancel() {
    method load (line 217) | func (l *Log) load(ctx context.Context) error {
    method Append (line 245) | func (l *Log) Append(line *dao.LogItem) {
    method Notify (line 264) | func (l *Log) Notify() {
    method ToggleAllContainers (line 275) | func (l *Log) ToggleAllContainers(ctx context.Context) {
    method updateLogs (line 280) | func (l *Log) updateLogs(ctx context.Context, c dao.LogChan) {
    method AddListener (line 310) | func (l *Log) AddListener(listener LogsListener) {
    method RemoveListener (line 318) | func (l *Log) RemoveListener(listener LogsListener) {
    method applyFilter (line 335) | func (l *Log) applyFilter(index int, q string) ([][]byte, error) {
    method fireLogBuffChanged (line 364) | func (l *Log) fireLogBuffChanged(index int) {
    method fireLogResume (line 382) | func (l *Log) fireLogResume() {
    method fireCanceled (line 388) | func (l *Log) fireCanceled() {
    method fireLogError (line 394) | func (l *Log) fireLogError(err error) {
    method fireLogChanged (line 400) | func (l *Log) fireLogChanged(lines [][]byte) {
    method fireLogCleared (line 406) | func (l *Log) fireLogCleared() {
  function NewLog (line 57) | func NewLog(gvr *client.GVR, opts *dao.LogOptions, flushTimeout time.Dur...

FILE: internal/model/log_int_test.go
  function TestUpdateLogs (line 17) | func TestUpdateLogs(t *testing.T) {
  function BenchmarkUpdateLogs (line 37) | func BenchmarkUpdateLogs(b *testing.B) {
  function makeLogOpts (line 61) | func makeLogOpts(count int) *dao.LogOptions {
  type mockLogView (line 69) | type mockLogView struct
    method LogChanged (line 77) | func (t *mockLogView) LogChanged(ll [][]byte) {
    method LogStop (line 80) | func (*mockLogView) LogStop()        {}
    method LogCanceled (line 81) | func (*mockLogView) LogCanceled()    {}
    method LogResume (line 82) | func (*mockLogView) LogResume()      {}
    method LogCleared (line 83) | func (*mockLogView) LogCleared()     {}
    method LogFailed (line 84) | func (*mockLogView) LogFailed(error) {}
  function newMockLogView (line 73) | func newMockLogView() *mockLogView {

FILE: internal/model/log_test.go
  function init (line 24) | func init() {
  function TestLogFullBuffer (line 28) | func TestLogFullBuffer(t *testing.T) {
  function TestLogFilter (line 48) | func TestLogFilter(t *testing.T) {
  function TestLogStartStop (line 103) | func TestLogStartStop(t *testing.T) {
  function TestLogClear (line 127) | func TestLogClear(t *testing.T) {
  function TestLogBasic (line 150) | func TestLogBasic(t *testing.T) {
  function TestLogAppend (line 169) | func TestLogAppend(t *testing.T) {
  function TestLogTimedout (line 201) | func TestLogTimedout(t *testing.T) {
  function TestToggleAllContainers (line 227) | func TestToggleAllContainers(t *testing.T) {
  function makeLogOpts (line 245) | func makeLogOpts(count int) *dao.LogOptions {
  type testView (line 255) | type testView struct
    method LogCanceled (line 266) | func (*testView) LogCanceled() {}
    method LogStop (line 267) | func (*testView) LogStop()     {}
    method LogResume (line 268) | func (*testView) LogResume()   {}
    method LogChanged (line 270) | func (t *testView) LogChanged(ll [][]byte) {
    method LogCleared (line 275) | func (t *testView) LogCleared() {
    method LogFailed (line 280) | func (t *testView) LogFailed(error) {
  function newTestView (line 262) | func newTestView() *testView {
  type testFactory (line 286) | type testFactory struct
    method Client (line 290) | func (testFactory) Client() client.Connection {
    method Get (line 293) | func (testFactory) Get(*client.GVR, string, bool, labels.Selector) (ru...
    method List (line 296) | func (testFactory) List(*client.GVR, string, bool, labels.Selector) ([...
    method ForResource (line 299) | func (testFactory) ForResource(string, *client.GVR) (informers.Generic...
    method CanForResource (line 302) | func (testFactory) CanForResource(string, *client.GVR, []string) (info...
    method WaitForCacheSync (line 305) | func (testFactory) WaitForCacheSync() {}
    method Forwarders (line 306) | func (testFactory) Forwarders() watch.Forwarders {
    method DeleteForwarder (line 309) | func (testFactory) DeleteForwarder(string) {}
  function makeFactory (line 311) | func makeFactory() dao.Factory {

FILE: internal/model/menu_hint.go
  type MenuHint (line 11) | type MenuHint struct
    method IsBlank (line 18) | func (m MenuHint) IsBlank() bool {
    method String (line 23) | func (m MenuHint) String() string {
  type MenuHints (line 28) | type MenuHints
    method Len (line 31) | func (h MenuHints) Len() int {
    method Swap (line 36) | func (h MenuHints) Swap(i, j int) {
    method Less (line 41) | func (h MenuHints) Less(i, j int) bool {

FILE: internal/model/menu_hint_test.go
  function TestMenuHintsSort (line 14) | func TestMenuHintsSort(t *testing.T) {
  function TestMenuHintBlank (line 59) | func TestMenuHintBlank(t *testing.T) {

FILE: internal/model/pulse.go
  type PulseListener (line 14) | type PulseListener interface
  type Pulse (line 26) | type Pulse struct
    method Watch (line 43) | func (p *Pulse) Watch(ctx context.Context) (HealthChan, dao.MetricsCha...
    method Refresh (line 59) | func (*Pulse) Refresh(context.Context) {}
    method GetNamespace (line 62) | func (p *Pulse) GetNamespace() string {
    method SetNamespace (line 67) | func (p *Pulse) SetNamespace(ns string) {
    method AddListener (line 75) | func (p *Pulse) AddListener(l PulseListener) {
    method RemoveListener (line 80) | func (p *Pulse) RemoveListener(l PulseListener) {
  function NewPulse (line 34) | func NewPulse(gvr *client.GVR) *Pulse {
  type HealthChan (line 40) | type HealthChan

FILE: internal/model/pulse_health.go
  constant pulseRate (line 17) | pulseRate = 10 * time.Second
  type HealthPoint (line 19) | type HealthPoint struct
  type GVRs (line 24) | type GVRs
    method First (line 48) | func (g GVRs) First() *client.GVR {
    method Last (line 52) | func (g GVRs) Last() *client.GVR {
    method Index (line 56) | func (g GVRs) Index(gvr *client.GVR) int {
  type PulseHealth (line 67) | type PulseHealth struct
    method Watch (line 76) | func (h *PulseHealth) Watch(ctx context.Context, ns string) HealthChan {
    method checkPulse (line 100) | func (h *PulseHealth) checkPulse(ctx context.Context, ns string, c Hea...
    method check (line 112) | func (h *PulseHealth) check(ctx context.Context, ns string, gvr *clien...
  function NewPulseHealth (line 72) | func NewPulseHealth(f dao.Factory) *PulseHealth {
  function isTable (line 150) | func isTable(oo []runtime.Object) bool {

FILE: internal/model/rev_values.go
  type RevValues (line 23) | type RevValues struct
    method GVR (line 59) | func (v *RevValues) GVR() *client.GVR {
    method GetPath (line 64) | func (v *RevValues) GetPath() string {
    method SetOptions (line 69) | func (v *RevValues) SetOptions(ctx context.Context, opts ViewerToggleO...
    method Filter (line 77) | func (v *RevValues) Filter(q string) {
    method filterChanged (line 82) | func (v *RevValues) filterChanged(lines []string) {
    method filter (line 86) | func (v *RevValues) filter(q string, lines []string) fuzzy.Matches {
    method fuzzyFilter (line 96) | func (*RevValues) fuzzyFilter(q string, lines []string) fuzzy.Matches {
    method fireResourceChanged (line 100) | func (v *RevValues) fireResourceChanged(lines []string, matches fuzzy....
    method fireResourceFailed (line 106) | func (v *RevValues) fireResourceFailed(err error) {
    method ClearFilter (line 113) | func (v *RevValues) ClearFilter() {
    method Peek (line 118) | func (v *RevValues) Peek() []string {
    method Refresh (line 123) | func (v *RevValues) Refresh(ctx context.Context) error {
    method Watch (line 128) | func (v *RevValues) Watch(ctx context.Context) error {
    method updater (line 137) | func (v *RevValues) updater(ctx context.Context) {
    method refresh (line 161) | func (v *RevValues) refresh(context.Context) error {
    method reconcile (line 173) | func (v *RevValues) reconcile() {
    method AddListener (line 178) | func (v *RevValues) AddListener(l ResourceViewerListener) {
    method RemoveListener (line 183) | func (v *RevValues) RemoveListener(l ResourceViewerListener) {
  function NewRevValues (line 36) | func NewRevValues(gvr *client.GVR, path, rev string) *RevValues {
  function getHelmHistDao (line 46) | func getHelmHistDao() *dao.HelmHistory {
  function getRevValues (line 50) | func getRevValues(path, _ string) []string {

FILE: internal/model/semver.go
  type SemVer (line 15) | type SemVer struct
    method String (line 28) | func (v *SemVer) String() string {
    method parse (line 32) | func (*SemVer) parse(version string) (major, minor, patch int) {
    method IsCurrent (line 56) | func (v *SemVer) IsCurrent(latest *SemVer) bool {
  function NewSemVer (line 20) | func NewSemVer(version string) *SemVer {
  function NormalizeVersion (line 45) | func NormalizeVersion(version string) string {

FILE: internal/model/semver_test.go
  function TestNewSemVer (line 13) | func TestNewSemVer(t *testing.T) {
  function TestSemVerIsCurrent (line 43) | func TestSemVerIsCurrent(t *testing.T) {

FILE: internal/model/stack.go
  constant StackPush (line 16) | StackPush StackAction = 1 << iota
  constant StackPop (line 19) | StackPop
  type StackAction (line 23) | type StackAction
  type StackEvent (line 26) | type StackEvent struct
  type StackListener (line 35) | type StackListener interface
  type Stack (line 47) | type Stack struct
    method Flatten (line 59) | func (s *Stack) Flatten() []string {
    method RemoveListener (line 71) | func (s *Stack) RemoveListener(l StackListener) {
    method AddListener (line 86) | func (s *Stack) AddListener(l StackListener) {
    method Push (line 94) | func (s *Stack) Push(c Component) {
    method Pop (line 106) | func (s *Stack) Pop() (Component, bool) {
    method Peek (line 124) | func (s *Stack) Peek() []Component {
    method Clear (line 132) | func (s *Stack) Clear() {
    method Empty (line 139) | func (s *Stack) Empty() bool {
    method IsLast (line 147) | func (s *Stack) IsLast() bool {
    method Previous (line 152) | func (s *Stack) Previous() Component {
    method Top (line 164) | func (s *Stack) Top() Component {
    method notify (line 174) | func (s *Stack) notify(a StackAction, c Component) {
    method Dump (line 189) | func (s *Stack) Dump() {
  function NewStack (line 54) | func NewStack() *Stack {

FILE: internal/model/stack_test.go
  function init (line 19) | func init() {
  function TestStackClear (line 23) | func TestStackClear(t *testing.T) {
  function TestStackPrevious (line 49) | func TestStackPrevious(t *testing.T) {
  function TestStackIsLast (line 88) | func TestStackIsLast(t *testing.T) {
  function TestStackFlatten (line 123) | func TestStackFlatten(t *testing.T) {
  function TestStackPush (line 151) | func TestStackPush(t *testing.T) {
  function TestStackTop (line 195) | func TestStackTop(t *testing.T) {
  function TestStackAddListener (line 227) | func TestStackAddListener(t *testing.T) {
  function TestStackAddListenerAfter (line 243) | func TestStackAddListenerAfter(t *testing.T) {
  function TestStackRemoveListener (line 255) | func TestStackRemoveListener(t *testing.T) {
  type stackL (line 275) | type stackL struct
    method StackPushed (line 279) | func (s *stackL) StackPushed(model.Component) {
    method StackPopped (line 283) | func (s *stackL) StackPopped(_, _ model.Component) {
    method StackTop (line 287) | func (s *stackL) StackTop(model.Component) { s.tops++ }
  type c (line 289) | type c struct
    method InCmdMode (line 297) | func (c) InCmdMode() bool                                            {...
    method Name (line 298) | func (c c) Name() string                                             {...
    method SetCommand (line 299) | func (c) SetCommand(*cmd.Interpreter)                                {}
    method Hints (line 300) | func (c) Hints() model.MenuHints                                     {...
    method HasFocus (line 301) | func (c) HasFocus() bool                                             {...
    method ExtraHints (line 302) | func (c) ExtraHints() map[string]string                              {...
    method Draw (line 303) | func (c) Draw(tcell.Screen)                                          {}
    method InputHandler (line 304) | func (c) InputHandler() func(*tcell.EventKey, func(tview.Primitive)) {...
    method MouseHandler (line 305) | func (c) MouseHandler() func(action tview.MouseAction, event *tcell.Ev...
    method SetRect (line 308) | func (c) SetRect(int, int, int, int)             {}
    method GetRect (line 309) | func (c) GetRect() (a, b, c, d int)              { return 0, 0, 0, 0 }
    method GetFocusable (line 310) | func (c) GetFocusable() tview.Focusable          { return nil }
    method Focus (line 311) | func (c) Focus(func(tview.Primitive))            {}
    method Blur (line 312) | func (c) Blur()                                  {}
    method Start (line 313) | func (c) Start()                                 {}
    method Stop (line 314) | func (c) Stop()                                  {}
    method Init (line 315) | func (c) Init(context.Context) error             { return nil }
    method SetFilter (line 316) | func (c) SetFilter(string, bool)                 {}
    method SetLabelSelector (line 317) | func (c) SetLabelSelector(labels.Selector, bool) {}
  function makeC (line 293) | func makeC(n string) c {

FILE: internal/model/table.go
  constant initRefreshRate (line 26) | initRefreshRate = 300 * time.Millisecond
  type TableListener (line 29) | type TableListener interface
  type Table (line 41) | type Table struct
    method SetViewSetting (line 62) | func (t *Table) SetViewSetting(ctx context.Context, vs *config.ViewSet...
    method SetLabelSelector (line 75) | func (t *Table) SetLabelSelector(sel labels.Selector) {
    method GetLabelSelector (line 83) | func (t *Table) GetLabelSelector() labels.Selector {
    method SetInstance (line 91) | func (t *Table) SetInstance(path string) {
    method AddListener (line 96) | func (t *Table) AddListener(l TableListener) {
    method RemoveListener (line 104) | func (t *Table) RemoveListener(l TableListener) {
    method Watch (line 121) | func (t *Table) Watch(ctx context.Context) error {
    method Refresh (line 131) | func (t *Table) Refresh(ctx context.Context) error {
    method Get (line 136) | func (t *Table) Get(ctx context.Context, path string) (runtime.Object,...
    method Delete (line 146) | func (t *Table) Delete(ctx context.Context, path string, propagation *...
    method GetNamespace (line 161) | func (t *Table) GetNamespace() string {
    method SetNamespace (line 166) | func (t *Table) SetNamespace(ns string) {
    method InNamespace (line 171) | func (t *Table) InNamespace(ns string) bool {
    method SetRefreshRate (line 176) | func (t *Table) SetRefreshRate(d time.Duration) {
    method ClusterWide (line 181) | func (t *Table) ClusterWide() bool {
    method Empty (line 186) | func (t *Table) Empty() bool {
    method RowCount (line 191) | func (t *Table) RowCount() int {
    method Peek (line 196) | func (t *Table) Peek() *model1.TableData {
    method updater (line 203) | func (t *Table) updater(ctx context.Context) {
    method refresh (line 229) | func (t *Table) refresh(ctx context.Context) error {
    method list (line 249) | func (t *Table) list(ctx context.Context, a dao.Accessor) ([]runtime.O...
    method reconcile (line 268) | func (t *Table) reconcile(ctx context.Context) error {
    method fireTableChanged (line 293) | func (t *Table) fireTableChanged(data *model1.TableData) {
    method fireNoData (line 304) | func (t *Table) fireNoData(data *model1.TableData) {
    method fireTableLoadFailed (line 315) | func (t *Table) fireTableLoadFailed(err error) {
  function NewTable (line 54) | func NewTable(gvr *client.GVR) *Table {

FILE: internal/model/table_int_test.go
  function TestTableReconcile (line 27) | func TestTableReconcile(t *testing.T) {
  function TestTableList (line 44) | func TestTableList(t *testing.T) {
  function TestTableGet (line 55) | func TestTableGet(t *testing.T) {
  function TestTableMeta (line 69) | func TestTableMeta(t *testing.T) {
  function mustLoad (line 100) | func mustLoad(n string) *unstructured.Unstructured {
  function load (line 112) | func load(t *testing.T, n string) *unstructured.Unstructured {
  function makeFactory (line 123) | func makeFactory() testFactory {
  type testFactory (line 127) | type testFactory struct
    method Client (line 133) | func (testFactory) Client() client.Connection {
    method Get (line 137) | func (f testFactory) Get(*client.GVR, string, bool, labels.Selector) (...
    method List (line 144) | func (f testFactory) List(*client.GVR, string, bool, labels.Selector) ...
    method ForResource (line 151) | func (testFactory) ForResource(string, *client.GVR) (informers.Generic...
    method CanForResource (line 155) | func (testFactory) CanForResource(string, *client.GVR, []string) (info...
    method WaitForCacheSync (line 158) | func (testFactory) WaitForCacheSync() {}
    method Forwarders (line 159) | func (testFactory) Forwarders() watch.Forwarders {
    method DeleteForwarder (line 162) | func (testFactory) DeleteForwarder(string) {}
  type accessor (line 166) | type accessor struct
    method SetIncludeObject (line 172) | func (*accessor) SetIncludeObject(bool) {}
    method List (line 174) | func (*accessor) List(context.Context, string) ([]runtime.Object, erro...
    method Get (line 178) | func (*accessor) Get(context.Context, string) (runtime.Object, error) {
    method Init (line 182) | func (a *accessor) Init(_ dao.Factory, gvr *client.GVR) {
    method GVR (line 186) | func (a *accessor) GVR() string {

FILE: internal/model/table_test.go
  function TestTableRefresh (line 27) | func TestTableRefresh(t *testing.T) {
  function TestTableNS (line 47) | func TestTableNS(t *testing.T) {
  function TestTableAddListener (line 56) | func TestTableAddListener(t *testing.T) {
  function TestTableRmListener (line 65) | func TestTableRmListener(*testing.T) {
  type tableListener (line 75) | type tableListener struct
    method TableNoData (line 79) | func (*tableListener) TableNoData(*model1.TableData) {}
    method TableDataChanged (line 81) | func (l *tableListener) TableDataChanged(*model1.TableData) {
    method TableLoadFailed (line 85) | func (l *tableListener) TableLoadFailed(error) {
  type tableFactory (line 89) | type tableFactory struct
    method Client (line 95) | func (tableFactory) Client() client.Connection {
    method Get (line 99) | func (f tableFactory) Get(*client.GVR, string, bool, labels.Selector) ...
    method List (line 106) | func (f tableFactory) List(*client.GVR, string, bool, labels.Selector)...
    method ForResource (line 113) | func (tableFactory) ForResource(string, *client.GVR) (informers.Generi...
    method CanForResource (line 117) | func (tableFactory) CanForResource(string, *client.GVR, []string) (inf...
    method WaitForCacheSync (line 120) | func (tableFactory) WaitForCacheSync() {}
    method Forwarders (line 121) | func (tableFactory) Forwarders() watch.Forwarders {
    method DeleteForwarder (line 124) | func (tableFactory) DeleteForwarder(string) {}
  function makeTableFactory (line 126) | func makeTableFactory() tableFactory {
  function mustLoad (line 130) | func mustLoad(n string) *unstructured.Unstructured {

FILE: internal/model/text.go
  type Filterable (line 14) | type Filterable interface
  type Textable (line 20) | type Textable interface
  type TextListener (line 28) | type TextListener interface
  type Text (line 37) | type Text struct
    method Peek (line 49) | func (t *Text) Peek() []string {
    method ClearFilter (line 54) | func (t *Text) ClearFilter() {
    method Filter (line 60) | func (t *Text) Filter(q string) {
    method SetText (line 66) | func (t *Text) SetText(buff string) {
    method AddListener (line 72) | func (t *Text) AddListener(listener TextListener) {
    method RemoveListener (line 77) | func (t *Text) RemoveListener(listener TextListener) {
    method filterChanged (line 90) | func (t *Text) filterChanged(lines []string) {
    method fireTextChanged (line 94) | func (t *Text) fireTextChanged(lines []string) {
    method fireTextFiltered (line 100) | func (t *Text) fireTextFiltered(lines []string, matches fuzzy.Matches) {
    method filter (line 109) | func (t *Text) filter(q string, lines []string) fuzzy.Matches {
    method fuzzyFilter (line 119) | func (*Text) fuzzyFilter(q string, lines []string) fuzzy.Matches {
  function NewText (line 44) | func NewText() *Text {

FILE: internal/model/text_test.go
  function TestNewText (line 14) | func TestNewText(t *testing.T) {
  function TestTextFilterRXMatch (line 28) | func TestTextFilterRXMatch(t *testing.T) {
  function TestTextFilterFuzzyMatch (line 44) | func TestTextFilterFuzzyMatch(t *testing.T) {
  function TestTextFilterNoMatch (line 60) | func TestTextFilterNoMatch(t *testing.T) {
  type textLis (line 78) | type textLis struct
    method TextChanged (line 82) | func (l *textLis) TextChanged(ll []string) {
    method TextFiltered (line 87) | func (l *textLis) TextFiltered(_ []string, mm fuzzy.Matches) {

FILE: internal/model/tree.go
  constant initTreeRefreshRate (line 25) | initTreeRefreshRate = 500 * time.Millisecond
  type TreeListener (line 28) | type TreeListener interface
  type Tree (line 37) | type Tree struct
    method ClearFilter (line 56) | func (t *Tree) ClearFilter() {
    method SetFilter (line 61) | func (t *Tree) SetFilter(q string) {
    method AddListener (line 66) | func (t *Tree) AddListener(l TreeListener) {
    method RemoveListener (line 71) | func (t *Tree) RemoveListener(l TreeListener) {
    method Watch (line 86) | func (t *Tree) Watch(ctx context.Context) {
    method Refresh (line 92) | func (t *Tree) Refresh(ctx context.Context) {
    method GetNamespace (line 97) | func (t *Tree) GetNamespace() string {
    method SetNamespace (line 102) | func (t *Tree) SetNamespace(ns string) {
    method SetRefreshRate (line 111) | func (t *Tree) SetRefreshRate(d time.Duration) {
    method ClusterWide (line 116) | func (t *Tree) ClusterWide() bool {
    method InNamespace (line 121) | func (t *Tree) InNamespace(ns string) bool {
    method Empty (line 126) | func (t *Tree) Empty() bool {
    method Peek (line 131) | func (t *Tree) Peek() *xray.TreeNode {
    method Describe (line 136) | func (t *Tree) Describe(ctx context.Context, gvr *client.GVR, path str...
    method ToYAML (line 151) | func (t *Tree) ToYAML(ctx context.Context, gvr *client.GVR, path strin...
    method updater (line 165) | func (t *Tree) updater(ctx context.Context) {
    method refresh (line 181) | func (t *Tree) refresh(ctx context.Context) {
    method list (line 195) | func (t *Tree) list(ctx context.Context, a dao.Accessor) ([]runtime.Ob...
    method reconcile (line 205) | func (t *Tree) reconcile(ctx context.Context) error {
    method resourceMeta (line 239) | func (t *Tree) resourceMeta() ResourceMeta {
    method fireTreeChanged (line 254) | func (t *Tree) fireTreeChanged(root *xray.TreeNode) {
    method fireTreeLoadFailed (line 260) | func (t *Tree) fireTreeLoadFailed(err error) {
    method getMeta (line 266) | func (t *Tree) getMeta(ctx context.Context, gvr *client.GVR) (Resource...
  function NewTree (line 48) | func NewTree(gvr *client.GVR) *Tree {
  function rxMatch (line 280) | func rxMatch(q, path string) bool {
  function treeHydrate (line 292) | func treeHydrate(ctx context.Context, ns string, oo []runtime.Object, re...
  function genericTreeHydrate (line 310) | func genericTreeHydrate(ctx context.Context, ns string, table *metav1.Ta...

FILE: internal/model/types.go
  constant maxReaderRetryInterval (line 21) | maxReaderRetryInterval   = 2 * time.Minute
  constant defaultReaderRefreshRate (line 22) | defaultReaderRefreshRate = 5 * time.Second
  type ResourceViewerListener (line 26) | type ResourceViewerListener interface
  type ViewerToggleOpts (line 32) | type ViewerToggleOpts
  type ResourceViewer (line 35) | type ResourceViewer interface
  type EncDecResourceViewer (line 51) | type EncDecResourceViewer interface
  type Igniter (line 57) | type Igniter interface
  type Hinter (line 69) | type Hinter interface
  type Primitive (line 78) | type Primitive interface
  type Commander (line 86) | type Commander interface
  type Component (line 92) | type Component interface
  type Viewer (line 102) | type Viewer interface
  type Filterer (line 108) | type Filterer interface
  type Cruder (line 117) | type Cruder interface
  type Lister (line 126) | type Lister interface
  type Describer (line 134) | type Describer interface
  type TreeRenderer (line 143) | type TreeRenderer interface
  type ResourceMeta (line 148) | type ResourceMeta struct

FILE: internal/model/values.go
  type Values (line 23) | type Values struct
    method Init (line 45) | func (v *Values) Init(f dao.Factory) error {
    method getValues (line 54) | func (v *Values) getValues() ([]string, error) {
    method GVR (line 74) | func (v *Values) GVR() *client.GVR {
    method ToggleValues (line 79) | func (v *Values) ToggleValues() error {
    method GetPath (line 92) | func (v *Values) GetPath() string {
    method SetOptions (line 97) | func (v *Values) SetOptions(ctx context.Context, opts ViewerToggleOpts) {
    method Filter (line 105) | func (v *Values) Filter(q string) {
    method filterChanged (line 110) | func (v *Values) filterChanged(lines []string) {
    method filter (line 114) | func (v *Values) filter(q string, lines []string) fuzzy.Matches {
    method fuzzyFilter (line 124) | func (*Values) fuzzyFilter(q string, lines []string) fuzzy.Matches {
    method fireResourceChanged (line 128) | func (v *Values) fireResourceChanged(lines []string, matches fuzzy.Mat...
    method fireResourceFailed (line 134) | func (v *Values) fireResourceFailed(err error) {
    method ClearFilter (line 141) | func (v *Values) ClearFilter() {
    method Peek (line 146) | func (v *Values) Peek() []string {
    method Refresh (line 151) | func (v *Values) Refresh(ctx context.Context) error {
    method Watch (line 156) | func (v *Values) Watch(ctx context.Context) error {
    method updater (line 165) | func (v *Values) updater(ctx context.Context) {
    method refresh (line 189) | func (v *Values) refresh(context.Context) error {
    method reconcile (line 201) | func (v *Values) reconcile() {
    method AddListener (line 206) | func (v *Values) AddListener(l ResourceViewerListener) {
    method RemoveListener (line 211) | func (v *Values) RemoveListener(l ResourceViewerListener) {
  function NewValues (line 36) | func NewValues(gvr *client.GVR, path string) *Values {

FILE: internal/model/yaml.go
  constant ManagedFieldsOpts (line 24) | ManagedFieldsOpts = "ManagedFields"
  type YAML (line 27) | type YAML struct
    method GVR (line 47) | func (y *YAML) GVR() *client.GVR {
    method GetPath (line 52) | func (y *YAML) GetPath() string {
    method SetOptions (line 57) | func (y *YAML) SetOptions(ctx context.Context, opts ViewerToggleOpts) {
    method Filter (line 65) | func (y *YAML) Filter(q string) {
    method filterChanged (line 70) | func (y *YAML) filterChanged(lines []string) {
    method filter (line 74) | func (y *YAML) filter(q string, lines []string) fuzzy.Matches {
    method fuzzyFilter (line 84) | func (*YAML) fuzzyFilter(q string, lines []string) fuzzy.Matches {
    method fireResourceChanged (line 88) | func (y *YAML) fireResourceChanged(lines []string, matches fuzzy.Match...
    method fireResourceFailed (line 94) | func (y *YAML) fireResourceFailed(err error) {
    method ClearFilter (line 101) | func (y *YAML) ClearFilter() {
    method Peek (line 106) | func (y *YAML) Peek() []string {
    method Refresh (line 111) | func (y *YAML) Refresh(ctx context.Context) error {
    method Watch (line 116) | func (y *YAML) Watch(ctx context.Context) error {
    method updater (line 125) | func (y *YAML) updater(ctx context.Context) {
    method refresh (line 149) | func (y *YAML) refresh(ctx context.Context) error {
    method reconcile (line 163) | func (y *YAML) reconcile(ctx context.Context) error {
    method AddListener (line 179) | func (y *YAML) AddListener(l ResourceViewerListener) {
    method RemoveListener (line 184) | func (y *YAML) RemoveListener(l ResourceViewerListener) {
    method ToYAML (line 199) | func (y *YAML) ToYAML(ctx context.Context, gvr *client.GVR, path strin...
    method Toggle (line 217) | func (y *YAML) Toggle() {
  function NewYAML (line 39) | func NewYAML(gvr *client.GVR, path string) *YAML {

FILE: internal/model1/color.go
  function DefaultColorer (line 35) | func DefaultColorer(ns string, h Header, re *RowEvent) tcell.Color {

FILE: internal/model1/color_test.go
  function TestDefaultColorer (line 14) | func TestDefaultColorer(t *testing.T) {

FILE: internal/model1/delta.go
  type DeltaRow (line 9) | type DeltaRow
    method Labelize (line 27) | func (d DeltaRow) Labelize(cols []int, labelCol int) DeltaRow {
    method Diff (line 44) | func (d DeltaRow) Diff(r DeltaRow, ageCol int) bool {
    method Customize (line 64) | func (d DeltaRow) Customize(cols []int, out DeltaRow) {
    method IsBlank (line 79) | func (d DeltaRow) IsBlank() bool {
    method Clone (line 94) | func (d DeltaRow) Clone() DeltaRow {
  function NewDeltaRow (line 12) | func NewDeltaRow(o, n Row, h Header) DeltaRow {

FILE: internal/model1/delta_test.go
  function TestDeltaLabelize (line 13) | func TestDeltaLabelize(t *testing.T) {
  function TestDeltaCustomize (line 45) | func TestDeltaCustomize(t *testing.T) {
  function TestDeltaNew (line 138) | func TestDeltaNew(t *testing.T) {
  function TestDeltaBlank (line 199) | func TestDeltaBlank(t *testing.T) {
  function TestDeltaDiff (line 225) | func TestDeltaDiff(t *testing.T) {

FILE: internal/model1/fields.go
  type Fields (line 9) | type Fields
    method Customize (line 12) | func (f Fields) Customize(cols []int, out Fields) {
    method Diff (line 25) | func (f Fields) Diff(ff Fields, ageCol int) bool {
    method Clone (line 36) | func (f Fields) Clone() Fields {

FILE: internal/model1/header.go
  constant ageCol (line 16) | ageCol = "AGE"
  type Attrs (line 18) | type Attrs struct
    method Merge (line 31) | func (a Attrs) Merge(b Attrs) Attrs {
  type HeaderColumn (line 60) | type HeaderColumn struct
    method String (line 65) | func (h HeaderColumn) String() string {
    method Clone (line 70) | func (h HeaderColumn) Clone() HeaderColumn {
  type Header (line 77) | type Header
    method Clear (line 79) | func (h Header) Clear() Header {
    method Clone (line 86) | func (h Header) Clone() Header {
    method Labelize (line 96) | func (h Header) Labelize(cols []int, labelCol int, rr *RowEvents) Head...
    method MapIndices (line 110) | func (h Header) MapIndices(cols []string, wide bool) []int {
    method Customize (line 134) | func (h Header) Customize(cols []string, wide bool) Header {
    method Diff (line 169) | func (h Header) Diff(header Header) bool {
    method FilterColIndices (line 177) | func (h Header) FilterColIndices(ns string, wide bool) sets.Set[int] {
    method ColumnNames (line 195) | func (h Header) ColumnNames(wide bool) []string {
    method HasAge (line 211) | func (h Header) HasAge() bool {
    method IsMetricsCol (line 218) | func (h Header) IsMetricsCol(col int) bool {
    method IsTimeCol (line 227) | func (h Header) IsTimeCol(col int) bool {
    method IsCapacityCol (line 236) | func (h Header) IsCapacityCol(col int) bool {
    method IndexOf (line 245) | func (h Header) IndexOf(colName string, includeWide bool) (int, bool) {
    method Dump (line 258) | func (h Header) Dump() {

FILE: internal/model1/header_test.go
  function TestHeaderMapIndices (line 13) | func TestHeaderMapIndices(t *testing.T) {
  function TestHeaderIndexOf (line 51) | func TestHeaderIndexOf(t *testing.T) {
  function TestHeaderCustomize (line 88) | func TestHeaderCustomize(t *testing.T) {
  function TestHeaderDiff (line 169) | func TestHeaderDiff(t *testing.T) {
  function TestHeaderHasAge (line 228) | func TestHeaderHasAge(t *testing.T) {
  function TestHeaderColumns (line 256) | func TestHeaderColumns(t *testing.T) {
  function TestHeaderClone (line 284) | func TestHeaderClone(t *testing.T) {
  function makeHeader (line 312) | func makeHeader() model1.Header {

FILE: internal/model1/helpers.go
  constant poolSize (line 20) | poolSize = 10
  function Hydrate (line 22) | func Hydrate(ns string, oo []runtime.Object, rr Rows, re Renderer) error {
  function GenericHydrate (line 43) | func GenericHydrate(ns string, table *metav1.Table, rr Rows, re Renderer...
  function IsValid (line 70) | func IsValid(_ string, h Header, r Row) bool {
  function sortLabels (line 82) | func sortLabels(m map[string]string) (keys, vals []string) {
  function labelize (line 95) | func labelize(labels string) map[string]string {
  function durationToSeconds (line 108) | func durationToSeconds(duration string) int64 {
  function runesToNum (line 140) | func runesToNum(rr []rune) int64 {
  function capacityToNumber (line 152) | func capacityToNumber(capacity string) int64 {
  function Less (line 161) | func Less(isNumber, isDuration, isCapacity bool, id1, id2, v1, v2 string...
  function lessDuration (line 180) | func lessDuration(s1, s2 string) bool {
  function lessCapacity (line 185) | func lessCapacity(s1, s2 string) bool {
  function lessNumber (line 191) | func lessNumber(s1, s2 string) bool {

FILE: internal/model1/helpers_test.go
  function TestSortLabels (line 13) | func TestSortLabels(t *testing.T) {
  function TestLabelize (line 37) | func TestLabelize(t *testing.T) {
  function TestIsValid (line 56) | func TestIsValid(t *testing.T) {
  function TestDurationToSecond (line 103) | func TestDurationToSecond(t *testing.T) {
  function TestCapacityToNumber (line 128) | func TestCapacityToNumber(t *testing.T) {
  function BenchmarkDurationToSecond (line 146) | func BenchmarkDurationToSecond(b *testing.B) {

FILE: internal/model1/pool.go
  type jobFn (line 11) | type jobFn
  type WorkerPool (line 13) | type WorkerPool struct
    method Add (line 49) | func (p *WorkerPool) Add(job jobFn) {
    method Drain (line 64) | func (p *WorkerPool) Drain() []error {
  function NewWorkerPool (line 24) | func NewWorkerPool(ctx context.Context, size int) *WorkerPool {

FILE: internal/model1/pool_test.go
  function TestWorkerPoolPlain (line 13) | func TestWorkerPoolPlain(t *testing.T) {
  function TestWorkerPoolWithError (line 34) | func TestWorkerPoolWithError(t *testing.T) {

FILE: internal/model1/row.go
  type Row (line 7) | type Row struct
    method Labelize (line 18) | func (r Row) Labelize(cols []int, labelCol int, labels []string) Row {
    method Customize (line 32) | func (r Row) Customize(cols []int) Row {
    method Diff (line 41) | func (r Row) Diff(ro Row, ageCol int) bool {
    method Clone (line 49) | func (r Row) Clone() Row {
    method Len (line 57) | func (r Row) Len() int {
  function NewRow (line 13) | func NewRow(size int) Row {
  type RowSorter (line 64) | type RowSorter struct
    method Len (line 73) | func (s RowSorter) Len() int {
    method Swap (line 77) | func (s RowSorter) Swap(i, j int) {
    method Less (line 81) | func (s RowSorter) Less(i, j int) bool {

FILE: internal/model1/row_event.go
  type ReRangeFn (line 12) | type ReRangeFn
  type ResEvent (line 15) | type ResEvent
  type RowEvent (line 18) | type RowEvent struct
    method Clone (line 42) | func (r RowEvent) Clone() RowEvent {
    method Customize (line 51) | func (r RowEvent) Customize(cols []int) RowEvent {
    method ExtractHeaderLabels (line 66) | func (r RowEvent) ExtractHeaderLabels(labelCol int) []string {
    method Labelize (line 72) | func (r RowEvent) Labelize(cols []int, labelCol int, labels []string) ...
    method Diff (line 81) | func (r RowEvent) Diff(re RowEvent, ageCol int) bool {
  function NewRowEvent (line 25) | func NewRowEvent(kind ResEvent, row Row) RowEvent {
  function NewRowEventWithDeltas (line 33) | func NewRowEventWithDeltas(row Row, delta DeltaRow) RowEvent {
  type reIndex (line 93) | type reIndex
  type RowEvents (line 96) | type RowEvents struct
    method reindex (line 117) | func (r *RowEvents) reindex() {
    method At (line 123) | func (r *RowEvents) At(i int) (RowEvent, bool) {
    method Set (line 131) | func (r *RowEvents) Set(i int, re RowEvent) {
    method Add (line 136) | func (r *RowEvents) Add(re RowEvent) {
    method ExtractHeaderLabels (line 142) | func (r *RowEvents) ExtractHeaderLabels(labelCol int) []string {
    method Labelize (line 152) | func (r *RowEvents) Labelize(cols []int, labelCol int, labels []string...
    method Customize (line 162) | func (r *RowEvents) Customize(cols []int) *RowEvents {
    method Diff (line 172) | func (r *RowEvents) Diff(re *RowEvents, ageCol int) bool {
    method Clone (line 186) | func (r *RowEvents) Clone() *RowEvents {
    method Upsert (line 196) | func (r *RowEvents) Upsert(re RowEvent) {
    method Delete (line 205) | func (r *RowEvents) Delete(fqn string) error {
    method Len (line 217) | func (r *RowEvents) Len() int {
    method Empty (line 221) | func (r *RowEvents) Empty() bool {
    method Clear (line 226) | func (r *RowEvents) Clear() {
    method Range (line 233) | func (r *RowEvents) Range(f ReRangeFn) {
    method Get (line 241) | func (r *RowEvents) Get(id string) (RowEvent, bool) {
    method FindIndex (line 251) | func (r *RowEvents) FindIndex(id string) (int, bool) {
    method Sort (line 258) | func (r *RowEvents) Sort(ns string, sortCol int, isDuration, numCol, i...
    method Dump (line 277) | func (re RowEvents) Dump(msg string) {
  function NewRowEvents (line 101) | func NewRowEvents(size int) *RowEvents {
  function NewRowEventsWithEvts (line 108) | func NewRowEventsWithEvts(ee ...RowEvent) *RowEvents {
  type RowEventSorter (line 287) | type RowEventSorter struct
    method Len (line 297) | func (r RowEventSorter) Len() int {
    method Swap (line 301) | func (r RowEventSorter) Swap(i, j int) {
    method Less (line 305) | func (r RowEventSorter) Less(i, j int) bool {

FILE: internal/model1/row_event_test.go
  function TestRowEventCustomize (line 15) | func TestRowEventCustomize(t *testing.T) {
  function TestRowEventDiff (line 110) | func TestRowEventDiff(t *testing.T) {
  function TestRowEventsDiff (line 181) | func TestRowEventsDiff(t *testing.T) {
  function TestRowEventsUpsert (line 265) | func TestRowEventsUpsert(t *testing.T) {
  function TestRowEventsCustomize (line 297) | func TestRowEventsCustomize(t *testing.T) {
  function TestRowEventsDelete (line 364) | func TestRowEventsDelete(t *testing.T) {
  function TestRowEventsSort (line 416) | func TestRowEventsSort(t *testing.T) {
  function TestRowEventsClone (line 504) | func TestRowEventsClone(t *testing.T) {
  function makeRowEvents (line 535) | func makeRowEvents() *model1.RowEvents {

FILE: internal/model1/row_test.go
  function BenchmarkRowCustomize (line 16) | func BenchmarkRowCustomize(b *testing.B) {
  function TestFieldCustomize (line 26) | func TestFieldCustomize(t *testing.T) {
  function TestFieldClone (line 64) | func TestFieldClone(t *testing.T) {
  function TestRowLabelize (line 72) | func TestRowLabelize(t *testing.T) {
  function TestRowCustomize (line 104) | func TestRowCustomize(t *testing.T) {
  function TestRowsDelete (line 136) | func TestRowsDelete(t *testing.T) {
  function TestRowsUpsert (line 196) | func TestRowsUpsert(t *testing.T) {
  function TestRowsSortText (line 236) | func TestRowsSortText(t *testing.T) {
  function TestRowsSortDuration (line 316) | func TestRowsSortDuration(t *testing.T) {
  function TestRowsSortMetrics (line 381) | func TestRowsSortMetrics(t *testing.T) {
  function TestRowsSortCapacity (line 423) | func TestRowsSortCapacity(t *testing.T) {
  function TestLess (line 465) | func TestLess(t *testing.T) {

FILE: internal/model1/rows.go
  type Rows (line 9) | type Rows
    method Delete (line 12) | func (rr Rows) Delete(id string) Rows {
    method Upsert (line 29) | func (rr Rows) Upsert(r Row) Rows {
    method Find (line 40) | func (rr Rows) Find(id string) (int, bool) {
    method Sort (line 51) | func (rr Rows) Sort(col int, asc, isNum, isDur, isCapacity bool) {

FILE: internal/model1/table_data.go
  type SortFn (line 26) | type SortFn
  type SortColumn (line 29) | type SortColumn struct
    method IsSet (line 35) | func (s SortColumn) IsSet() bool {
  constant spacer (line 39) | spacer = " "
  type FilterOpts (line 41) | type FilterOpts struct
  type TableData (line 48) | type TableData struct
    method AddRow (line 87) | func (t *TableData) AddRow(re RowEvent) {
    method SetRow (line 91) | func (t *TableData) SetRow(idx int, re RowEvent) {
    method FindRow (line 95) | func (t *TableData) FindRow(id string) (RowEvent, bool) {
    method RowAt (line 99) | func (t *TableData) RowAt(idx int) (RowEvent, bool) {
    method RowsRange (line 103) | func (t *TableData) RowsRange(f ReRangeFn) {
    method Sort (line 107) | func (t *TableData) Sort(sc SortColumn) {
    method Header (line 122) | func (t *TableData) Header() Header {
    method HeaderCount (line 127) | func (t *TableData) HeaderCount() int {
    method HeadCol (line 134) | func (t *TableData) HeadCol(n string, w bool) (header HeaderColumn, id...
    method Filter (line 143) | func (t *TableData) Filter(f FilterOpts) *TableData {
    method rxFilter (line 166) | func (t *TableData) rxFilter(q string, inverse bool) (*RowEvents, erro...
    method fuzzyFilter (line 200) | func (t *TableData) fuzzyFilter(q string) *RowEvents {
    method filterToast (line 221) | func (t *TableData) filterToast() *RowEvents {
    method GetNamespace (line 237) | func (t *TableData) GetNamespace() string {
    method Reset (line 244) | func (t *TableData) Reset(ns string) {
    method Render (line 252) | func (t *TableData) Render(_ context.Context, r Renderer, oo []runtime...
    method Empty (line 282) | func (t *TableData) Empty() bool {
    method SetRowEvents (line 289) | func (t *TableData) SetRowEvents(re *RowEvents) {
    method GetRowEvents (line 293) | func (t *TableData) GetRowEvents() *RowEvents {
    method RowCount (line 298) | func (t *TableData) RowCount() int {
    method IndexOfHeader (line 306) | func (t *TableData) IndexOfHeader(h string) (int, bool) {
    method Labelize (line 311) | func (t *TableData) Labelize(labels []string) *TableData {
    method ComputeSortCol (line 330) | func (t *TableData) ComputeSortCol(vs *config.ViewSetting, sc SortColu...
    method sortCol (line 350) | func (t *TableData) sortCol(vs *config.ViewSetting) (SortColumn, error) {
    method Clear (line 380) | func (t *TableData) Clear() {
    method Clone (line 389) | func (t *TableData) Clone() *TableData {
    method ColumnNames (line 401) | func (t *TableData) ColumnNames(w bool) []string {
    method GetHeader (line 409) | func (t *TableData) GetHeader() Header {
    method SetHeader (line 417) | func (t *TableData) SetHeader(ns string, h Header) {
    method Update (line 425) | func (t *TableData) Update(rows Rows) {
    method Delete (line 460) | func (t *TableData) Delete(newKeys sets.Set[string]) {
    method Diff (line 485) | func (t *TableData) Diff(t2 *TableData) bool {
  function NewTableData (line 57) | func NewTableData(gvr *client.GVR) *TableData {
  function NewTableDataFull (line 64) | func NewTableDataFull(gvr *client.GVR, ns string, h Header, re *RowEvent...
  function NewTableDataWithRows (line 71) | func NewTableDataWithRows(gvr *client.GVR, h Header, re *RowEvents) *Tab...
  function NewTableDataFromTable (line 78) | func NewTableDataFromTable(td *TableData) *TableData {

FILE: internal/model1/table_data_test.go
  function init (line 16) | func init() {
  function TestTableDataComputeSortCol (line 20) | func TestTableDataComputeSortCol(t *testing.T) {
  function TestTableDataDiff (line 92) | func TestTableDataDiff(t *testing.T) {
  function TestTableDataUpdate (line 240) | func TestTableDataUpdate(t *testing.T) {
  function TestTableDataDelete (line 330) | func TestTableDataDelete(t *testing.T) {

FILE: internal/model1/test_helper_test.go
  function testTime (line 11) | func testTime() time.Time {

FILE: internal/model1/types.go
  constant NAValue (line 15) | NAValue = "na"
  constant EventUnchanged (line 18) | EventUnchanged ResEvent = 1 << iota
  constant EventAdd (line 21) | EventAdd
  constant EventUpdate (line 24) | EventUpdate
  constant EventDelete (line 27) | EventDelete
  constant EventClear (line 30) | EventClear
  type DecoratorFunc (line 34) | type DecoratorFunc
  type ColorerFunc (line 37) | type ColorerFunc
  type Renderer (line 40) | type Renderer interface
  type Generic (line 61) | type Generic interface

FILE: internal/perf/benchmark.go
  constant benchTimeout (line 28) | benchTimeout = 2 * time.Minute
  constant benchFmat (line 29) | benchFmat    = "%s_%s_%d.txt"
  constant k9sUA (line 30) | k9sUA        = "k9s/"
  type Benchmark (line 34) | type Benchmark struct
    method init (line 51) | func (b *Benchmark) init(base, version string) error {
    method Cancel (line 89) | func (b *Benchmark) Cancel() {
    method Canceled (line 104) | func (b *Benchmark) Canceled() bool {
    method Run (line 109) | func (b *Benchmark) Run(cluster, ct string, done func()) {
    method save (line 127) | func (b *Benchmark) save(cluster, ct string, r io.Reader) error {
  function NewBenchmark (line 43) | func NewBenchmark(base, version string, cfg *config.BenchConfig) (*Bench...

FILE: internal/pool.go
  constant DefaultPoolSize (line 11) | DefaultPoolSize = 10
  type jobFn (line 13) | type jobFn
  type WorkerPool (line 15) | type WorkerPool struct
    method Add (line 51) | func (p *WorkerPool) Add(job jobFn) {
    method Drain (line 66) | func (p *WorkerPool) Drain() []error {
  function NewWorkerPool (line 26) | func NewWorkerPool(ctx context.Context, size int) *WorkerPool {

FILE: internal/pool_test.go
  function TestWorkerPoolPlain (line 13) | func TestWorkerPoolPlain(t *testing.T) {
  function TestWorkerPoolWithError (line 34) | func TestWorkerPoolWithError(t *testing.T) {

FILE: internal/port/ann.go
  type Annotations (line 10) | type Annotations
    method PreferredPorts (line 12) | func (a Annotations) PreferredPorts(specs ContainerPortSpecs) (PFAnns,...

FILE: internal/port/ann_test.go
  function TestPreferredPorts (line 14) | func TestPreferredPorts(t *testing.T) {

FILE: internal/port/co_portspec.go
  type ContainerPortSpecs (line 15) | type ContainerPortSpecs
    method Dump (line 17) | func (c ContainerPortSpecs) Dump() string {
    method MatchSpec (line 27) | func (c ContainerPortSpecs) MatchSpec(s string) bool {
    method ToTunnels (line 42) | func (c ContainerPortSpecs) ToTunnels(address string) PortTunnels {
    method Find (line 52) | func (c ContainerPortSpecs) Find(pf *PFAnn) (ContainerPortSpec, bool) {
    method Match (line 63) | func (c ContainerPortSpecs) Match(pf *PFAnn) bool {
    method MatchAnnotations (line 73) | func (c ContainerPortSpecs) MatchAnnotations(s string) PFAnns {
  function FromContainerPorts (line 90) | func FromContainerPorts(co string, pp []v1.ContainerPort) ContainerPortS...
  type ContainerPortSpec (line 103) | type ContainerPortSpec struct
    method MatchSpec (line 118) | func (c ContainerPortSpec) MatchSpec(s string) bool {
    method ToTunnel (line 127) | func (c ContainerPortSpec) ToTunnel(address string) PortTunnel {
    method Port (line 135) | func (c ContainerPortSpec) Port() intstr.IntOrString {
    method ToPFAnn (line 143) | func (c ContainerPortSpec) ToPFAnn() *PFAnn {
    method Match (line 152) | func (c ContainerPortSpec) Match(ann *PFAnn) bool {
    method String (line 168) | func (c ContainerPortSpec) String() string {
  function NewPortSpec (line 110) | func NewPortSpec(co, portName string, port int32) ContainerPortSpec {

FILE: internal/port/co_portspec_test.go
  function TestContainerPortSpecMatch (line 14) | func TestContainerPortSpecMatch(t *testing.T) {
  function TestContainerPortSpecString (line 73) | func TestContainerPortSpecString(t *testing.T) {
  function TestContainerPortSpecsMatch (line 96) | func TestContainerPortSpecsMatch(t *testing.T) {

FILE: internal/port/pf.go
  constant K9sAutoPortForwardsKey (line 17) | K9sAutoPortForwardsKey = "k9scli.io/auto-port-forwards"
  constant K9sPortForwardsKey (line 20) | K9sPortForwardsKey = "k9scli.io/port-forwards"
  type PFAnn (line 30) | type PFAnn struct
    method Match (line 87) | func (p *PFAnn) Match(ss ContainerPortSpecs) bool {
    method AsSpec (line 98) | func (p *PFAnn) AsSpec() string {
    method String (line 107) | func (p *PFAnn) String() string {
    method PortNum (line 111) | func (p *PFAnn) PortNum() (string, error) {
    method ToTunnel (line 122) | func (p *PFAnn) ToTunnel(address string) (PortTunnel, error) {
  function ParsePlainPF (line 37) | func ParsePlainPF(ann string) (*PFAnn, error) {
  function ParsePF (line 57) | func ParsePF(ann string) (*PFAnn, error) {

FILE: internal/port/pf_test.go
  function TestParsePF (line 16) | func TestParsePF(t *testing.T) {
  function TestPFMatch (line 81) | func TestPFMatch(t *testing.T) {
  function TestPFPortNum (line 123) | func TestPFPortNum(t *testing.T) {
  function TestPFToTunnel (line 158) | func TestPFToTunnel(t *testing.T) {
  function TestPFString (line 199) | func TestPFString(t *testing.T) {

FILE: internal/port/pfs.go
  type PortChecker (line 13) | type PortChecker
  type PFAnns (line 16) | type PFAnns
    method ToPortSpec (line 19) | func (aa PFAnns) ToPortSpec(pp ContainerPortSpecs) (ports, localPorts ...
    method ToTunnels (line 36) | func (aa PFAnns) ToTunnels(address string, _ ContainerPortSpecs, avail...
  function ParsePFs (line 53) | func ParsePFs(ann string) (PFAnns, error) {
  function ToTunnels (line 67) | func ToTunnels(address, specs, localPorts string) (PortTunnels, error) {

FILE: internal/port/pfs_test.go
  function TestParsePFs (line 17) | func TestParsePFs(t *testing.T) {
  function TestPFsToTunnel (line 69) | func TestPFsToTunnel(t *testing.T) {
  function TestPFsToPortSpec (line 116) | func TestPFsToPortSpec(t *testing.T) {
  function TestToTunnels (line 148) | func TestToTunnels(t *testing.T) {

FILE: internal/port/tunnel.go
  type PortTunnels (line 16) | type PortTunnels
    method CheckAvailable (line 19) | func (t PortTunnels) CheckAvailable(ctx context.Context) error {
  type PortTunnel (line 30) | type PortTunnel struct
    method String (line 45) | func (t PortTunnel) String() string {
    method PortMap (line 50) | func (t PortTunnel) PortMap() string {
  function NewPortTunnel (line 35) | func NewPortTunnel(a, co, lp, cp string) PortTunnel {
  function IsPortFree (line 59) | func IsPortFree(ctx context.Context, t PortTunnel) bool {

FILE: internal/port/tunnel_test.go
  function TestPortTunnelMap (line 13) | func TestPortTunnelMap(t *testing.T) {

FILE: internal/render/alias.go
  type Alias (line 25) | type Alias struct
    method Header (line 30) | func (Alias) Header(string) model1.Header {
    method Render (line 36) | func (Alias) Render(o any, _ string, r *model1.Row) error {
  type AliasRes (line 58) | type AliasRes struct
    method GetObjectKind (line 64) | func (AliasRes) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 69) | func (a AliasRes) DeepCopyObject() runtime.Object {

FILE: internal/render/alias_test.go
  function TestAliasColorer (line 17) | func TestAliasColorer(t *testing.T) {
  function TestAliasHeader (line 55) | func TestAliasHeader(t *testing.T) {
  function TestAliasRender (line 68) | func TestAliasRender(t *testing.T) {
  function BenchmarkAlias (line 84) | func BenchmarkAlias(b *testing.B) {

FILE: internal/render/base.go
  type DecoratorFunc (line 16) | type DecoratorFunc
  type Base (line 21) | type Base struct
    method SetIncludeObject (line 27) | func (b *Base) SetIncludeObject(f bool) {
    method IsGeneric (line 32) | func (*Base) IsGeneric() bool {
    method doHeader (line 36) | func (b *Base) doHeader(dh model1.Header) model1.Header {
    method SetViewSetting (line 45) | func (b *Base) SetViewSetting(vs *config.ViewSetting) {
    method ColorerFunc (line 60) | func (*Base) ColorerFunc() model1.ColorerFunc {
    method Happy (line 65) | func (*Base) Happy(string, *model1.Row) bool {
    method Healthy (line 70) | func (*Base) Healthy(context.Context, any) error {

FILE: internal/render/benchmark.go
  type Benchmark (line 32) | type Benchmark struct
    method ColorerFunc (line 37) | func (Benchmark) ColorerFunc() model1.ColorerFunc {
    method Header (line 48) | func (Benchmark) Header(string) model1.Header {
    method Render (line 64) | func (b Benchmark) Render(o any, ns string, r *model1.Row) error {
    method diagnose (line 87) | func (Benchmark) diagnose(ns string, ff model1.Fields) error {
    method readFile (line 106) | func (Benchmark) readFile(file string) (string, error) {
    method initRow (line 114) | func (Benchmark) initRow(row model1.Fields, f os.FileInfo) error {
    method augmentRow (line 127) | func (b Benchmark) augmentRow(fields model1.Fields, data string) {
    method countReq (line 160) | func (Benchmark) countReq(rr [][]string) string {
  type BenchInfo (line 175) | type BenchInfo struct
    method GetObjectKind (line 181) | func (BenchInfo) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 186) | func (b BenchInfo) DeepCopyObject() runtime.Object {

FILE: internal/render/benchmark_int_test.go
  function init (line 16) | func init() {
  function TestAugmentRow (line 20) | func TestAugmentRow(t *testing.T) {

FILE: internal/render/cm.go
  type ConfigMap (line 18) | type ConfigMap struct
    method Header (line 23) | func (m ConfigMap) Header(_ string) model1.Header {
    method Render (line 36) | func (m ConfigMap) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 54) | func (ConfigMap) defaultRow(o any, r *model1.Row) error {

FILE: internal/render/container.go
  constant falseStr (line 23) | falseStr = "false"
  type ContainerWithMetrics (line 26) | type ContainerWithMetrics interface
  type Container (line 44) | type Container struct
    method ColorerFunc (line 49) | func (Container) ColorerFunc() model1.ColorerFunc {
    method Header (line 75) | func (Container) Header(_ string) model1.Header {
    method Render (line 104) | func (c Container) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 113) | func (c Container) defaultRow(cr ContainerRes, r *model1.Row) error {
    method diagnose (line 148) | func (Container) diagnose(state, ready string) error {
  function containerRequests (line 162) | func containerRequests(co *v1.Container) v1.ResourceList {
  function gatherContainerMX (line 175) | func gatherContainerMX(co *v1.Container, mx *mv1beta1.ContainerMetrics) ...
  function ToContainerPorts (line 212) | func ToContainerPorts(pp []v1.ContainerPort) string {
  function ToContainerState (line 228) | func ToContainerState(s v1.ContainerState) string {
  constant on (line 249) | on  = "on"
  constant off (line 250) | off = "off"
  function probe (line 253) | func probe(p *v1.Probe) string {
  type ContainerRes (line 261) | type ContainerRes struct
    method GetObjectKind (line 270) | func (ContainerRes) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 275) | func (c ContainerRes) DeepCopyObject() runtime.Object {

FILE: internal/render/container_int_test.go
  function Test_gatherContainerMX (line 15) | func Test_gatherContainerMX(t *testing.T) {

FILE: internal/render/container_test.go
  function TestContainer (line 21) | func TestContainer(t *testing.T) {
  function BenchmarkContainerRender (line 58) | func BenchmarkContainerRender(b *testing.B) {
  function toQty (line 80) | func toQty(s string) resource.Quantity {
  function makeContainerMetrics (line 85) | func makeContainerMetrics() *mv1beta1.ContainerMetrics {
  function makeAge (line 95) | func makeAge() metav1.Time {
  function makeContainer (line 99) | func makeContainer() *v1.Container {
  function makeContainerStatus (line 121) | func makeContainerStatus() *v1.ContainerStatus {
  function testTime (line 129) | func testTime() time.Time {

FILE: internal/render/context.go
  type Context (line 20) | type Context struct
    method ColorerFunc (line 25) | func (Context) ColorerFunc() model1.ColorerFunc {
    method Header (line 37) | func (Context) Header(string) model1.Header {
    method Render (line 47) | func (Context) Render(o any, _ string, r *model1.Row) error {
  type NamedContext (line 72) | type NamedContext struct
    method IsCurrentContext (line 89) | func (c *NamedContext) IsCurrentContext(n string) bool {
    method GetObjectKind (line 99) | func (*NamedContext) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 104) | func (c *NamedContext) DeepCopyObject() runtime.Object {
  type ContextNamer (line 79) | type ContextNamer interface
  function NewNamedContext (line 84) | func NewNamedContext(c ContextNamer, n string, ctx *api.Context) *NamedC...

FILE: internal/render/context_test.go
  function TestContextHeader (line 16) | func TestContextHeader(t *testing.T) {
  function TestContextRender (line 22) | func TestContextRender(t *testing.T) {
  type config (line 61) | type config struct
    method CurrentContextName (line 63) | func (config) CurrentContextName() (string, error) {

FILE: internal/render/cr.go
  type ClusterRole (line 17) | type ClusterRole struct
    method Header (line 22) | func (c ClusterRole) Header(_ string) model1.Header {
    method Render (line 34) | func (p ClusterRole) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 55) | func (ClusterRole) defaultRow(raw *unstructured.Unstructured, r *model...

FILE: internal/render/cr_test.go
  function TestClusterRoleRender (line 15) | func TestClusterRoleRender(t *testing.T) {

FILE: internal/render/crb.go
  type ClusterRoleBinding (line 26) | type ClusterRoleBinding struct
    method Header (line 31) | func (c ClusterRoleBinding) Header(_ string) model1.Header {
    method Render (line 36) | func (c ClusterRoleBinding) Render(o any, _ string, row *model1.Row) e...
    method defaultRow (line 57) | func (ClusterRoleBinding) defaultRow(raw *unstructured.Unstructured, r...

FILE: internal/render/crb_test.go
  function TestClusterRoleBindingRender (line 15) | func TestClusterRoleBindingRender(t *testing.T) {

FILE: internal/render/crd.go
  type CustomResourceDefinition (line 33) | type CustomResourceDefinition struct
    method Header (line 38) | func (c CustomResourceDefinition) Header(_ string) model1.Header {
    method Render (line 43) | func (c CustomResourceDefinition) Render(o any, _ string, row *model1....
    method defaultRow (line 65) | func (c CustomResourceDefinition) defaultRow(raw *unstructured.Unstruc...
    method diagnose (line 102) | func (CustomResourceDefinition) diagnose(n string, vv []v1.CustomResou...

FILE: internal/render/crd_test.go
  function TestCustomResourceDefinitionRender (line 15) | func TestCustomResourceDefinitionRender(t *testing.T) {

FILE: internal/render/cronjob.go
  type CronJob (line 36) | type CronJob struct
    method Header (line 41) | func (c CronJob) Header(_ string) model1.Header {
    method Render (line 46) | func (c CronJob) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 68) | func (CronJob) defaultRow(raw *unstructured.Unstructured, r *model1.Ro...
  function jobSelector (line 102) | func jobSelector(spec *batchv1.JobSpec) string {
  function podContainerNames (line 121) | func podContainerNames(spec *v1.PodSpec, includeInit bool) string {
  function podImageNames (line 136) | func podImageNames(spec *v1.PodSpec, includeInit bool) string {

FILE: internal/render/cronjob_test.go
  function TestCronJobRender (line 15) | func TestCronJobRender(t *testing.T) {

FILE: internal/render/cust_col.go
  type colAttr (line 19) | type colAttr
  constant number (line 22) | number     colAttr = 'N'
  constant age (line 23) | age        colAttr = 'T'
  constant wide (line 24) | wide       colAttr = 'W'
  constant show (line 25) | show       colAttr = 'S'
  constant alignLeft (line 26) | alignLeft  colAttr = 'L'
  constant alignRight (line 27) | alignRight colAttr = 'R'
  constant hide (line 28) | hide       colAttr = 'H'
  type colAttrs (line 31) | type colAttrs struct
  function newColFlags (line 43) | func newColFlags(flags string) colAttrs {
  type colDef (line 72) | type colDef struct
    method toHeaderCol (line 98) | func (c colDef) toHeaderCol() model1.HeaderColumn {
  function parse (line 80) | func parse(s string) (colDef, error) {

FILE: internal/render/cust_col_test.go
  function TestCustCol_parse (line 14) | func TestCustCol_parse(t *testing.T) {

FILE: internal/render/cust_cols.go
  type ColsSpecs (line 24) | type ColsSpecs
    method parseSpecs (line 31) | func (cc ColsSpecs) parseSpecs() (ColumnSpecs, error) {
  function NewColsSpecs (line 27) | func NewColsSpecs(cols ...string) ColsSpecs {
  type RenderedCols (line 49) | type RenderedCols
    method hydrateRow (line 51) | func (rr RenderedCols) hydrateRow(row *model1.Row) {
    method HasHeader (line 60) | func (rr RenderedCols) HasHeader(n string) bool {
  type RenderedCol (line 71) | type RenderedCol struct
    method has (line 77) | func (r RenderedCol) has(n string) bool {
  type ColumnSpec (line 82) | type ColumnSpec struct
  type ColumnSpecs (line 88) | type ColumnSpecs
    method isEmpty (line 90) | func (c ColumnSpecs) isEmpty() bool {
    method Header (line 95) | func (cc ColumnSpecs) Header(rh model1.Header) model1.Header {
    method realize (line 112) | func (cc ColumnSpecs) realize(o runtime.Object, rh model1.Header, row ...
  function hydrate (line 148) | func hydrate(o runtime.Object, cc ColumnSpecs, parsers []*jsonpath.JSONP...
  function isJQSpec (line 264) | func isJQSpec(spec string) bool {
  function jqParse (line 268) | func jqParse(spec string, o map[string]any) (string, bool) {

FILE: internal/render/cust_cols_test.go
  function TestParseSpecs (line 18) | func TestParseSpecs(t *testing.T) {
  function TestHydrateNilObject (line 240) | func TestHydrateNilObject(t *testing.T) {

FILE: internal/render/dir.go
  type Dir (line 19) | type Dir struct
    method IsGeneric (line 22) | func (Dir) IsGeneric() bool {
    method Healthy (line 27) | func (Dir) Healthy(context.Context, any) error {
    method ColorerFunc (line 32) | func (Dir) ColorerFunc() model1.ColorerFunc {
    method SetViewSetting (line 38) | func (Dir) SetViewSetting(*config.ViewSetting) {}
    method Header (line 41) | func (Dir) Header(string) model1.Header {
    method Render (line 49) | func (Dir) Render(o any, _ string, r *model1.Row) error {
  type DirRes (line 69) | type DirRes struct
    method GetObjectKind (line 75) | func (DirRes) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 80) | func (d DirRes) DeepCopyObject() runtime.Object {

FILE: internal/render/dp.go
  type Deployment (line 33) | type Deployment struct
    method ColorerFunc (line 38) | func (Deployment) ColorerFunc() model1.ColorerFunc {
    method Header (line 57) | func (d Deployment) Header(_ string) model1.Header {
    method Render (line 62) | func (d Deployment) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 83) | func (d Deployment) defaultRow(raw *unstructured.Unstructured, r *mode...
    method diagnose (line 110) | func (Deployment) diagnose(desired, avail int32) error {

FILE: internal/render/dp_test.go
  function TestDpRender (line 15) | func TestDpRender(t *testing.T) {
  function BenchmarkDpRender (line 24) | func BenchmarkDpRender(b *testing.B) {

FILE: internal/render/ds.go
  type DaemonSet (line 33) | type DaemonSet struct
    method Header (line 38) | func (d DaemonSet) Header(_ string) model1.Header {
    method Render (line 43) | func (d DaemonSet) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 64) | func (d DaemonSet) defaultRow(raw *unstructured.Unstructured, r *model...
    method diagnose (line 90) | func (DaemonSet) diagnose(d, r int32) error {

FILE: internal/render/ds_test.go
  function TestDaemonSetRender (line 15) | func TestDaemonSetRender(t *testing.T) {

FILE: internal/render/ep.go
  type Endpoints (line 26) | type Endpoints struct
    method Header (line 31) | func (e Endpoints) Header(_ string) model1.Header {
    method Render (line 36) | func (e Endpoints) Render(o any, ns string, row *model1.Row) error {
    method defaultRow (line 52) | func (e Endpoints) defaultRow(o any, ns string, r *model1.Row) error {
  function toEPs (line 78) | func toEPs(ss []v1.EndpointSubset) string {
  function portsToStrs (line 90) | func portsToStrs(pp []v1.EndpointPort, ss []string) {
  function processIPs (line 96) | func processIPs(aa, pp []string, addrs []v1.EndpointAddress) {

FILE: internal/render/ep_test.go
  function TestEndpointsRender (line 15) | func TestEndpointsRender(t *testing.T) {

FILE: internal/render/eps.go
  type EndpointSlice (line 28) | type EndpointSlice struct
    method Header (line 33) | func (e EndpointSlice) Header(_ string) model1.Header {
    method Render (line 38) | func (e EndpointSlice) Render(o any, ns string, row *model1.Row) error {
    method defaultRow (line 54) | func (e EndpointSlice) defaultRow(o any, ns string, r *model1.Row) err...
  function toEPss (line 82) | func toEPss(ee []discoveryv1.Endpoint) string {
  function toPorts (line 95) | func toPorts(ee []discoveryv1.EndpointPort) string {

FILE: internal/render/eps_test.go
  function TestEndpointSliceRender (line 15) | func TestEndpointSliceRender(t *testing.T) {

FILE: internal/render/ev.go
  type Event (line 15) | type Event struct
    method Healthy (line 20) | func (*Event) Healthy(_ context.Context, o any) error {

FILE: internal/render/generic.go
  type Generic (line 22) | type Generic struct
    method Header (line 27) | func (m Generic) Header(_ string) model1.Header {
    method Render (line 32) | func (m Generic) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 53) | func (Generic) defaultRow(raw *unstructured.Unstructured, r *model1.Ro...

FILE: internal/render/helm/chart.go
  type Chart (line 24) | type Chart struct
    method IsGeneric (line 27) | func (Chart) IsGeneric() bool {
    method SetViewSetting (line 31) | func (Chart) SetViewSetting(*config.ViewSetting) {}
    method ColorerFunc (line 34) | func (Chart) ColorerFunc() model1.ColorerFunc {
    method Header (line 39) | func (Chart) Header(_ string) model1.Header {
    method Render (line 53) | func (c Chart) Render(o any, _ string, r *model1.Row) error {
    method Healthy (line 75) | func (c Chart) Healthy(_ context.Context, o any) error {
    method diagnose (line 84) | func (Chart) diagnose(s string) error {
  type ReleaseRes (line 96) | type ReleaseRes struct
    method GetObjectKind (line 101) | func (ReleaseRes) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 106) | func (h ReleaseRes) DeepCopyObject() runtime.Object {

FILE: internal/render/helm/history.go
  type History (line 18) | type History struct
    method SetViewSetting (line 20) | func (History) SetViewSetting(*config.ViewSetting) {}
    method IsGeneric (line 23) | func (History) IsGeneric() bool {
    method ColorerFunc (line 28) | func (History) ColorerFunc() model1.ColorerFunc {
    method Header (line 33) | func (History) Header(_ string) model1.Header {
    method Render (line 45) | func (c History) Render(o any, _ string, r *model1.Row) error {
    method Healthy (line 66) | func (History) Healthy(context.Context, any) error {
    method diagnose (line 70) | func (History) diagnose(string) error {

FILE: internal/render/helpers.go
  function ExtractImages (line 28) | func ExtractImages(spec *v1.PodSpec) []string {
  function computeVulScore (line 37) | func computeVulScore(ns string, lbls map[string]string, spec *v1.PodSpec...
  function runesToNum (line 48) | func runesToNum(rr []rune) int64 {
  function AsThousands (line 61) | func AsThousands(n int64) string {
  function AsStatus (line 67) | func AsStatus(err error) string {
  function asSelector (line 74) | func asSelector(s *metav1.LabelSelector) string {
  function toSelector (line 85) | func toSelector(m map[string]string) string {
  function blank (line 95) | func blank(ss []string) bool {
  function join (line 106) | func join(ss []string, sep string) string {
  function AsPerc (line 141) | func AsPerc(p string) string {
  function PrintPerc (line 146) | func PrintPerc(p int) string {
  function IntToStr (line 151) | func IntToStr(p int) string {
  function missing (line 155) | func missing(s string) string {
  function naStrings (line 159) | func naStrings(ss []string) string {
  function na (line 166) | func na(s string) string {
  function check (line 170) | func check(s, sub string) string {
  function boolToStr (line 178) | func boolToStr(b bool) string {
  function ToAge (line 188) | func ToAge(t metav1.Time) string {
  function toAgeHuman (line 196) | func toAgeHuman(s string) string {
  function Truncate (line 210) | func Truncate(str string, width int) string {
  function mapToStr (line 214) | func mapToStr(m map[string]string) string {
  function mapToIfc (line 236) | func mapToIfc(m any) (s string) {
  function toMu (line 269) | func toMu(v int64) string {
  function toMc (line 277) | func toMc(v int64) string {
  function toMi (line 284) | func toMi(v int64) string {
  function boolPtrToStr (line 291) | func boolPtrToStr(b *bool) string {
  function strPtrToStr (line 299) | func strPtrToStr(s *string) string {
  function Pad (line 307) | func Pad(s string, width int) string {

FILE: internal/render/helpers_test.go
  function TestTableGenericHydrate (line 23) | func TestTableGenericHydrate(t *testing.T) {
  function TestTableHydrate (line 50) | func TestTableHydrate(t *testing.T) {
  function TestToAge (line 62) | func TestToAge(t *testing.T) {
  function TestToAgeHuman (line 81) | func TestToAgeHuman(t *testing.T) {
  function TestJoin (line 103) | func TestJoin(t *testing.T) {
  function TestBoolPtrToStr (line 123) | func TestBoolPtrToStr(t *testing.T) {
  function TestNamespaced (line 140) | func TestNamespaced(t *testing.T) {
  function TestMissing (line 154) | func TestMissing(t *testing.T) {
  function TestBoolToStr (line 167) | func TestBoolToStr(t *testing.T) {
  function TestNa (line 181) | func TestNa(t *testing.T) {
  function TestTruncate (line 194) | func TestTruncate(t *testing.T) {
  function TestToSelector (line 225) | func TestToSelector(t *testing.T) {
  function TestBlank (line 255) | func TestBlank(t *testing.T) {
  function TestMetaFQN (line 279) | func TestMetaFQN(t *testing.T) {
  function TestFQN (line 296) | func TestFQN(t *testing.T) {
  function TestMapToStr (line 313) | func TestMapToStr(t *testing.T) {
  function BenchmarkMapToStr (line 326) | func BenchmarkMapToStr(b *testing.B) {
  function TestRunesToNum (line 339) | func TestRunesToNum(t *testing.T) {
  function BenchmarkRunesToNum (line 370) | func BenchmarkRunesToNum(b *testing.B) {
  function TestToMc (line 380) | func TestToMc(t *testing.T) {
  function TestToMi (line 395) | func TestToMi(t *testing.T) {
  function TestIntToStr (line 410) | func TestIntToStr(t *testing.T) {
  function BenchmarkIntToStr (line 424) | func BenchmarkIntToStr(b *testing.B) {
  function load (line 435) | func load(t *testing.T, n string) *unstructured.Unstructured {

FILE: internal/render/hpa.go
  type HorizontalPodAutoscaler (line 15) | type HorizontalPodAutoscaler struct
    method ColorerFunc (line 20) | func (*HorizontalPodAutoscaler) ColorerFunc() model1.ColorerFunc {

FILE: internal/render/hpa_test.go
  function TestHorizontalPodAutoscalerColorer (line 15) | func TestHorizontalPodAutoscalerColorer(t *testing.T) {

FILE: internal/render/img_scan.go
  constant CVEParseIdx (line 18) | CVEParseIdx = 5
  constant sevColName (line 19) | sevColName  = "SEVERITY"
  type ImageScan (line 23) | type ImageScan struct
    method ColorerFunc (line 28) | func (ImageScan) ColorerFunc() model1.ColorerFunc {
    method Header (line 57) | func (ImageScan) Header(string) model1.Header {
    method Render (line 70) | func (ImageScan) Render(o any, _ string, r *model1.Row) error {
  type ImageScanRes (line 94) | type ImageScanRes struct
    method GetObjectKind (line 100) | func (ImageScanRes) GetObjectKind() schema.ObjectKind {
    method DeepCopyObject (line 105) | func (is ImageScanRes) DeepCopyObject() runtime.Object {

FILE: internal/render/job.go
  type Job (line 34) | type Job struct
    method Header (line 39) | func (j Job) Header(_ string) model1.Header {
    method Render (line 44) | func (j Job) Render(o any, _ string, row *model1.Row) error {
    method defaultRow (line 64) | func (j Job) defaultRow(raw *unstructured.Unstructured, r *model1.Row)...
    method diagnose (line 91) | func (Job) diagnose(ready string, status *batchv1.JobStatus) error {
  constant maxShow (line 102) | maxShow = 2
  function toContainers (line 104) | func toContainers(p *v1.PodSpec) (containers, images string) {
  function parseContainers (line 121) | func parseContainers(cos []v1.Container) (nn, ii []string) {
  function toCompletion (line 130) | func toCompletion(spec *batchv1.JobSpec, status *batchv1.JobStatus) (s s...
  function toDuration (line 147) | func toDuration(status *batchv1.JobStatus) string {

FILE: internal/render/job_test.go
  function TestJobRender (line 15) | func TestJobRender(t *testing.T) {

FILE: internal/render/node.go
  constant labelNodeRolePrefix (line 30) | labelNodeRolePrefix = "node-role.kubernetes.io/"
  co
Condensed preview — 1027 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,266K chars).
[
  {
    "path": ".codebeatsettings",
    "chars": 296,
    "preview": "{\n  \"GOLANG\": {\n    \"TOO_MANY_IVARS\": [\n      15,\n      20,\n      22,\n      25,\n    ],\n    \"LOC\": [\n      50,\n      60,\n"
  },
  {
    "path": ".dockerignore",
    "chars": 121,
    "preview": "/k8s\n/change_logs\n.github\n.semaphore\n.vscode\nassets\n/dist\n/execs\n/notes\n/skins\nREADME.md\nLICENSE\ncov.out\n/k9s\n.travis.ym"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 65,
    "preview": "# These are supported funding model platforms\ngithub: [derailed]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 940,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n\n<img src=\"https"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 706,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n<img src=\"htt"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 381,
    "preview": "---\nversion: 2\nupdates:\n  - package-ecosystem: \"gomod\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n\n  # Ma"
  },
  {
    "path": ".github/workflows/lint.yml",
    "chars": 496,
    "preview": "name: K9s Lint\n\non:\n  pull_request:\n    branches: [ master ]\n\njobs:\n  golangci:\n    runs-on: ubuntu-latest\n    steps:\n  "
  },
  {
    "path": ".github/workflows/stales-issues.yml",
    "chars": 634,
    "preview": "name: Closeout Stale Issues\non:\n  schedule:\n    - cron: \"0 2 * * *\"\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n  "
  },
  {
    "path": ".github/workflows/stales-prs.yml",
    "chars": 610,
    "preview": "name: Closeout Stale PRs\non:\n  schedule:\n    - cron: \"0 2 * * *\"\n\njobs:\n  close-issues:\n    runs-on: ubuntu-latest\n    p"
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 607,
    "preview": "name: K9s Test\n\non:\n  workflow_dispatch:\n    push:\n    branches:\n      - master\n    tags:\n      - rc*\n      - v*\n  pull_"
  },
  {
    "path": ".gitignore",
    "chars": 196,
    "preview": ".vscode\n*.out\n.idea\n.envrc\ncov.out\nexecs\n/k9s\n/k8s\ndist\nnotes\nvendor\ngo.mod1\ngo.mod2\ngen.sh\n*.test\n*.log\n*~\npod1.go\n.pro"
  },
  {
    "path": ".golangci.yml",
    "chars": 5530,
    "preview": "version: \"2\"\n\nrun:\n  allow-parallel-runners: true\n\n  # timeout for analysis, e.g. 30s, 5m, default is 1m\n  timeout: 5m\n\n"
  },
  {
    "path": ".goreleaser.yml",
    "chars": 2769,
    "preview": "version: 2\n\nproject_name: k9s\n\nbefore:\n  hooks:\n    - go mod download\n    - go generate ./...\n\nrelease:\n  prerelease: fa"
  },
  {
    "path": ".semaphore/semaphore.yml",
    "chars": 1144,
    "preview": "version: v1.0\nname: First pipeline example\nagent:\n  machine:\n    type: e1-standard-2\n    os_image: ubuntu1804\n\nblocks:\n "
  },
  {
    "path": ".travis.yml",
    "chars": 257,
    "preview": "language: go\ngo_import_path: github.com/derailed/k9s\ngo:\n  - \"1.23\"\n\njobs:\n  include:\n  - os: linux\n    arch: amd64\n  - "
  },
  {
    "path": "CNAME",
    "chars": 9,
    "preview": "k9scli.io"
  },
  {
    "path": "COPYING",
    "chars": 639,
    "preview": "   Copyright © 2019, Imhotep Software LLC <fernand@imhotep.io> and other contributors.\n\n   Licensed under the Apache Lic"
  },
  {
    "path": "Dockerfile",
    "chars": 1056,
    "preview": "# -----------------------------------------------------------------------------\n# The base image for building the k9s bi"
  },
  {
    "path": "LICENSE",
    "chars": 10174,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "Makefile",
    "chars": 1690,
    "preview": "NAME            := k9s\nVERSION         ?= v0.50.18\nPACKAGE         := github.com/derailed/$(NAME)\nOUTPUT_BIN      ?= exe"
  },
  {
    "path": "README.md",
    "chars": 60122,
    "preview": "<img src=\"assets/k9s.png\" alt=\"k9s\">\n\n## K9s - Kubernetes CLI To Manage Your Clusters In Style!\n\nK9s provides a terminal"
  },
  {
    "path": "change_logs/release_0.1.1.md",
    "chars": 1820,
    "preview": "# Release v0.1.1\n\n<br/>\n\n---\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto "
  },
  {
    "path": "change_logs/release_0.1.10.md",
    "chars": 436,
    "preview": "# Release v0.1.10\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some "
  },
  {
    "path": "change_logs/release_0.1.11.md",
    "chars": 607,
    "preview": "# Release v0.1.11\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some "
  },
  {
    "path": "change_logs/release_0.1.2.md",
    "chars": 897,
    "preview": "# Release v0.1.2\n\n<br/>\n\n---\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto "
  },
  {
    "path": "change_logs/release_0.1.3.md",
    "chars": 1339,
    "preview": "# Release v0.1.3\n\n<br/>\n\n---\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto "
  },
  {
    "path": "change_logs/release_0.1.4.md",
    "chars": 900,
    "preview": "# Release v0.1.4\n\n<br/>\n\n---\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto "
  },
  {
    "path": "change_logs/release_0.1.5.md",
    "chars": 666,
    "preview": "# Release v0.1.5\n\n<br/>\n\n---\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto "
  },
  {
    "path": "change_logs/release_0.1.6.md",
    "chars": 865,
    "preview": "# Release v0.1.6\n\n<br/>\n\n---\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto "
  },
  {
    "path": "change_logs/release_0.1.7.md",
    "chars": 975,
    "preview": "# Release v0.1.7\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.1.8.md",
    "chars": 435,
    "preview": "# Release v0.1.8\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.1.9.md",
    "chars": 492,
    "preview": "# Release v0.1.9\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.10.0.md",
    "chars": 7091,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.1.md",
    "chars": 1263,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.2.md",
    "chars": 1092,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.3.md",
    "chars": 1274,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.4.md",
    "chars": 1092,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.5.md",
    "chars": 1137,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.6.md",
    "chars": 1033,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.7.md",
    "chars": 1033,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.8.md",
    "chars": 1033,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.10.9.md",
    "chars": 1092,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.11.0.md",
    "chars": 2116,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.11.1.md",
    "chars": 1146,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.11.2.md",
    "chars": 1205,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.11.3.md",
    "chars": 2258,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.12.0.md",
    "chars": 3516,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.2.0.md",
    "chars": 984,
    "preview": "# Release v0.2.0\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.2.1.md",
    "chars": 712,
    "preview": "# Release v0.2.1\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.2.2.md",
    "chars": 775,
    "preview": "# Release v0.2.2\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.2.3.md",
    "chars": 436,
    "preview": "# Release v0.2.3\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.2.4.md",
    "chars": 546,
    "preview": "# Release v0.2.4\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.2.5.md",
    "chars": 1037,
    "preview": "# Release v0.2.5\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.2.6.md",
    "chars": 863,
    "preview": "# Release v0.2.6\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.3.0.md",
    "chars": 679,
    "preview": "# Release v0.3.0\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.3.1.md",
    "chars": 951,
    "preview": "# Release v0.3.1\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.3.2.md",
    "chars": 764,
    "preview": "# Release v0.3.2\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.3.3.md",
    "chars": 755,
    "preview": "# Release v0.3.3\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.4.0.md",
    "chars": 2163,
    "preview": "# Release v0.4.0\n\n## Notes\n\nThank you to all that contributed with flushing out issues with K9s! I'll try\nto mark some o"
  },
  {
    "path": "change_logs/release_0.4.1.md",
    "chars": 2250,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.4.2.md",
    "chars": 1445,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.4.3.md",
    "chars": 998,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.4.4.md",
    "chars": 1993,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.4.5.md",
    "chars": 1601,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.4.6.md",
    "chars": 1092,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.4.7.md",
    "chars": 2306,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.4.8.md",
    "chars": 955,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.5.0.md",
    "chars": 2412,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.5.1.md",
    "chars": 1003,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.5.2.md",
    "chars": 1074,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.0.md",
    "chars": 1849,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.1.md",
    "chars": 972,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.2.md",
    "chars": 1508,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.3.md",
    "chars": 1798,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.4.md",
    "chars": 952,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.5.md",
    "chars": 1014,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.6.md",
    "chars": 1014,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.6.7.md",
    "chars": 1489,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.0.md",
    "chars": 4840,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.1.md",
    "chars": 1759,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.10.md",
    "chars": 1097,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.11.md",
    "chars": 988,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.12.md",
    "chars": 1395,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.13.md",
    "chars": 1159,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.2.md",
    "chars": 1155,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.3.md",
    "chars": 1130,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.4.md",
    "chars": 1007,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.5.md",
    "chars": 1123,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.6.md",
    "chars": 2028,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.7.md",
    "chars": 1620,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.8.md",
    "chars": 1564,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.7.9.md",
    "chars": 980,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.8.0.md",
    "chars": 7841,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.8.1.md",
    "chars": 2726,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.8.2.md",
    "chars": 1544,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.8.3.md",
    "chars": 2367,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.8.4.md",
    "chars": 972,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.9.0.md",
    "chars": 4571,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.9.1.md",
    "chars": 1090,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.9.2.md",
    "chars": 3427,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_0.9.3.md",
    "chars": 1686,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.0.md",
    "chars": 4408,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.1.md",
    "chars": 1721,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.2.md",
    "chars": 1589,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.3.md",
    "chars": 2266,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.4.md",
    "chars": 2224,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.5.md",
    "chars": 1210,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.6.md",
    "chars": 2635,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.7.md",
    "chars": 1585,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.13.8.md",
    "chars": 1555,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.14.0.md",
    "chars": 4342,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.14.1.md",
    "chars": 1824,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.15.0.md",
    "chars": 3732,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.15.1.md",
    "chars": 3521,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.15.2.md",
    "chars": 1681,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.16.0.md",
    "chars": 7601,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.16.1.md",
    "chars": 1210,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.0.md",
    "chars": 3009,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.1.md",
    "chars": 1269,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.2.md",
    "chars": 1328,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.3.md",
    "chars": 1321,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.4.md",
    "chars": 2847,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.5.md",
    "chars": 2386,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.6.md",
    "chars": 2095,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.17.7.md",
    "chars": 2432,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.18.0.md",
    "chars": 3684,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.18.1.md",
    "chars": 1296,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.0.md",
    "chars": 4945,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.1.md",
    "chars": 1672,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.2.md",
    "chars": 2067,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.3.md",
    "chars": 5231,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.4.md",
    "chars": 2054,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.5.md",
    "chars": 4101,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.6.md",
    "chars": 1572,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.19.7.md",
    "chars": 1527,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.20.0.md",
    "chars": 4106,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.20.1.md",
    "chars": 4106,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.20.2.md",
    "chars": 2799,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.20.3.md",
    "chars": 1392,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.20.4.md",
    "chars": 2185,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.20.5.md",
    "chars": 1519,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.0.md",
    "chars": 2714,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.1.md",
    "chars": 1545,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.10.md",
    "chars": 3219,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.2.md",
    "chars": 1639,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.3.md",
    "chars": 2497,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.4.md",
    "chars": 1458,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.5.md",
    "chars": 2881,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.6.md",
    "chars": 2080,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.7.md",
    "chars": 1322,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.8.md",
    "chars": 3769,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.21.9.md",
    "chars": 2609,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.22.0.md",
    "chars": 3218,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.22.1.md",
    "chars": 1634,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.0.md",
    "chars": 10201,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.1.md",
    "chars": 1381,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.10.md",
    "chars": 1588,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.2.md",
    "chars": 2208,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.3.md",
    "chars": 1397,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.4.md",
    "chars": 1464,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.5.md",
    "chars": 1477,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.6.md",
    "chars": 2374,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.7.md",
    "chars": 1402,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.8.md",
    "chars": 1426,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.23.9.md",
    "chars": 1421,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.0.md",
    "chars": 2493,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.1.md",
    "chars": 1858,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.10.md",
    "chars": 1386,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.11.md",
    "chars": 2165,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.12.md",
    "chars": 1896,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.13.md",
    "chars": 2166,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.14.md",
    "chars": 1452,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.15.md",
    "chars": 3820,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.2.md",
    "chars": 6185,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.3.md",
    "chars": 3755,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.4.md",
    "chars": 2683,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.5.md",
    "chars": 2447,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.6.md",
    "chars": 2640,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.7.md",
    "chars": 2933,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.8.md",
    "chars": 3078,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.24.9.md",
    "chars": 1745,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.0.md",
    "chars": 6973,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.1.md",
    "chars": 1805,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.10.md",
    "chars": 2935,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.11.md",
    "chars": 2378,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.12.md",
    "chars": 2915,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.13.md",
    "chars": 2654,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.14.md",
    "chars": 1414,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.15.md",
    "chars": 1431,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.16.md",
    "chars": 4210,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png\" align=\"center\" width=\"800\" height=\"auto\""
  },
  {
    "path": "change_logs/release_v0.25.17.md",
    "chars": 1471,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png\" align=\"center\" width=\"800\" height=\"auto\""
  },
  {
    "path": "change_logs/release_v0.25.18.md",
    "chars": 1386,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png\" align=\"center\" width=\"800\" height=\"auto\""
  },
  {
    "path": "change_logs/release_v0.25.19.md",
    "chars": 2832,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png\" align=\"center\" width=\"800\" height=\"auto\""
  },
  {
    "path": "change_logs/release_v0.25.2.md",
    "chars": 1761,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.20.md",
    "chars": 1632,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png\" align=\"center\" width=\"800\" height=\"auto\""
  },
  {
    "path": "change_logs/release_v0.25.21.md",
    "chars": 1925,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png\" align=\"center\" width=\"800\" height=\"auto\""
  },
  {
    "path": "change_logs/release_v0.25.3.md",
    "chars": 1266,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.4.md",
    "chars": 1583,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.5.md",
    "chars": 1752,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  },
  {
    "path": "change_logs/release_v0.25.6.md",
    "chars": 1496,
    "preview": "<img src=\"https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s_small.png\" align=\"right\" width=\"200\" height=\""
  }
]

// ... and 827 more files (download for full content)

About this extraction

This page contains the full source code of the derailed/k9s GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1027 files (2.8 MB), approximately 788.5k tokens, and a symbol index with 4963 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!