{"id":47282008,"url":"https://github.com/janosmiko/lfk","last_synced_at":"2026-06-07T10:01:09.145Z","repository":{"id":344606894,"uuid":"1182344976","full_name":"janosmiko/lfk","owner":"janosmiko","description":"⚡ LFK is a lightning-fast, keyboard-focused, yazi-inspired terminal user interface for navigating and managing Kubernetes clusters. Built for speed and efficiency, it brings a three-column Miller columns layout with an owner-based resource hierarchy to your terminal.","archived":false,"fork":false,"pushed_at":"2026-05-19T04:52:07.000Z","size":24655,"stargazers_count":544,"open_issues_count":7,"forks_count":19,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-05-19T05:53:03.315Z","etag":null,"topics":["k8s","kubectl","kubernetes","tui"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/janosmiko.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/funding.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"janosmiko"}},"created_at":"2026-03-15T11:49:45.000Z","updated_at":"2026-05-19T04:51:49.000Z","dependencies_parsed_at":"2026-05-11T09:04:56.191Z","dependency_job_id":null,"html_url":"https://github.com/janosmiko/lfk","commit_stats":null,"previous_names":["janosmiko/lfk"],"tags_count":95,"template":false,"template_full_name":null,"purl":"pkg:github/janosmiko/lfk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janosmiko%2Flfk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janosmiko%2Flfk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janosmiko%2Flfk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janosmiko%2Flfk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/janosmiko","download_url":"https://codeload.github.com/janosmiko/lfk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janosmiko%2Flfk/sbom","scorecard":{"id":1246925,"data":{"date":"2026-05-04T03:16:44Z","repo":{"name":"github.com/janosmiko/lfk","commit":"057f036fb904e2df8494ebdf65b1cb65796745b1"},"scorecard":{"version":"v5.3.0","commit":"c22063e786c11f9dd714d777a687ff7c4599b600"},"score":7.4,"checks":[{"name":"Maintained","score":0,"reason":"project was created within the last 90 days. Please review its contents carefully","details":["Warn: Repository was created within the last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#maintained"}},{"name":"Code-Review","score":3,"reason":"Found 3/10 approved changesets -- score normalized to 3","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#security-policy"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dependency-update-tool"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: jobLevel 'packages' permission set to 'read': .github/workflows/codeql.yml:20","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:21","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:22","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/release-please.yml:29","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:19","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecard.yml:20","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:12","Info: topLevel 'contents' permission set to 'read': .github/workflows/release-please.yml:23","Info: topLevel 'contents' permission set to 'read': .github/workflows/release.yml:12","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/stale.yml:19","Info: topLevel 'contents' permission set to 'read': .github/workflows/validate-pr.yml:17"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":10,"reason":"all dependencies are pinned","details":["Info:  25 out of  25 GitHub-owned GitHubAction dependencies pinned","Info:  12 out of  12 third-party GitHubAction dependencies pinned","Info:   3 out of   3 containerImage dependencies pinned","Info:   2 out of   2 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#vulnerabilities"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/release.yml:151"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":5,"reason":"badge detected: Passing","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#license"}},{"name":"Signed-Releases","score":8,"reason":"5 out of the last 5 releases have a total of 5 signed artifacts.","details":["Info: signed release artifact: checksums.txt.sig: https://github.com/janosmiko/lfk/releases/tag/v0.9.38","Info: signed release artifact: checksums.txt.sig: https://github.com/janosmiko/lfk/releases/tag/v0.9.37","Info: signed release artifact: checksums.txt.sig: https://github.com/janosmiko/lfk/releases/tag/v0.9.36","Info: signed release artifact: checksums.txt.sig: https://github.com/janosmiko/lfk/releases/tag/v0.9.35","Info: signed release artifact: checksums.txt.sig: https://github.com/janosmiko/lfk/releases/tag/v0.9.34","Warn: release artifact v0.9.38 does not have provenance: https://api.github.com/repos/janosmiko/lfk/releases/316761019","Warn: release artifact v0.9.37 does not have provenance: https://api.github.com/repos/janosmiko/lfk/releases/316664727","Warn: release artifact v0.9.36 does not have provenance: https://api.github.com/repos/janosmiko/lfk/releases/316125309","Warn: release artifact v0.9.35 does not have provenance: https://api.github.com/repos/janosmiko/lfk/releases/315218268","Warn: release artifact v0.9.34 does not have provenance: https://api.github.com/repos/janosmiko/lfk/releases/315036058"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":4,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Info: 'branch protection settings apply to administrators' is required to merge on branch 'main'","Info: 'stale review dismissal' is required to merge on branch 'main'","Warn: branch 'main' does not require approvers","Warn: codeowners review is not required on branch 'main'","Warn: 'last push approval' is disabled on branch 'main'","Info: 'up-to-date branches' is required to merge on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#branch-protection"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: SAST configuration detected: CodeQL","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#fuzzing"}},{"name":"Contributors","score":0,"reason":"project has 0 contributing companies or organizations -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#contributors"}},{"name":"CI-Tests","score":10,"reason":"10 out of 10 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/c22063e786c11f9dd714d777a687ff7c4599b600/docs/checks.md#ci-tests"}}]},"last_synced_at":"2026-05-04T05:14:03.562Z","repository_id":344606894,"created_at":"2026-05-04T05:14:03.562Z","updated_at":"2026-05-04T05:14:03.562Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33426013,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"online","status_checked_at":"2026-05-24T02:00:06.296Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["k8s","kubectl","kubernetes","tui"],"created_at":"2026-03-16T01:55:01.906Z","updated_at":"2026-06-07T10:01:09.126Z","avatar_url":"https://github.com/janosmiko.png","language":"Go","funding_links":["https://github.com/sponsors/janosmiko","https://buymeacoffee.com/janosmiko"],"categories":["Kubernetes"],"sub_categories":[],"readme":"\u003cimg src=\"docs/imgs/github-header.png\" alt=\"lfk\"\u003e\n\n# :zap: LFK - Lightning Fast Kubernetes navigator\n\n[![Release](https://img.shields.io/github/v/release/janosmiko/lfk)](https://github.com/janosmiko/lfk/releases) [![CI](https://img.shields.io/github/actions/workflow/status/janosmiko/lfk/ci.yml?branch=main\u0026label=CI)](https://github.com/janosmiko/lfk/actions/workflows/ci.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/janosmiko/lfk)](https://goreportcard.com/report/github.com/janosmiko/lfk) [![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=janosmiko_lfk\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=janosmiko_lfk) [![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=janosmiko_lfk\u0026metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=janosmiko_lfk) [![codecov](https://codecov.io/gh/janosmiko/lfk/graph/badge.svg)](https://codecov.io/gh/janosmiko/lfk) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/janosmiko/lfk/badge)](https://scorecard.dev/viewer/?uri=github.com/janosmiko/lfk) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/12677/badge)](https://www.bestpractices.dev/projects/12677)[![Cloudsmith](https://img.shields.io/badge/OSS%20hosting%20by-cloudsmith-blue?logo=cloudsmith\u0026style=flat-square\u0026link=https%3A%2F%2Fcloudsmith.com)](https://cloudsmith.com)\n\n**LFK** is a keyboard-focused, yazi-inspired terminal user interface for navigating and managing Kubernetes clusters. It brings a three-column Miller columns layout with an owner-based resource hierarchy to your terminal.\n\n## Support\n\nLFK is a side project I build in my free time, and the tools that go into it\n(IDE licenses, AI assistants) are not free. If LFK saves you time and you'd like\nto help cover those costs and fund continued development, consider sponsoring:\n\n- [GitHub Sponsors](https://github.com/sponsors/janosmiko)\n- [Buy Me a Coffee](https://buymeacoffee.com/janosmiko)\n\nEvery contribution is appreciated and helps make LFK sustainable.\n\n**Thank you for your support!**\n\nPackage repository hosting is graciously provided by [Cloudsmith](https://cloudsmith.com).\nCloudsmith is the only fully hosted, cloud-native, universal package management solution, that enables your organization to create, store and share packages in any format, to any place, with total confidence.\n\n## Screenshots\n\n### Demo\n\n![Demo](./docs/imgs/demo.gif)\n\n### Themes\n\n![Themes](./docs/imgs/themes.gif)\n\n### Pods\n\n![Pods](./docs/imgs/pods.png)\n\n### Pods fullscreen\n\n![Pods fullscreen](./docs/imgs/pods-fullscreen.png)\n\n### Helm integration\n\n![Helm integration](./docs/imgs/helm-integration.png)\n\n### ArgoCD integration\n\n![ArgoCD integration](./docs/imgs/argocd-integration.png)\n\n![ArgoCD auto-sync config](./docs/imgs/argocd-autosync.png)\n\n### ConfigMap and Secret editors\n\n![ConfigMap editor](./docs/imgs/configmap-editor.png)\n\n### Label and annotation editor\n\n![Label editor](./docs/imgs/label-editor.png)\n\n### Can-I RBAC permissions browser\n\n![Can-I viewer](./docs/imgs/can-i.png)\n\n### YAML preview\n\n![Yaml preview](./docs/imgs/yaml-preview.png)\n\n### API Explorer\n\n![API Explorer](./docs/imgs/api-explorer.png)\n\n## Features\n\n### Navigation and Layout\n\n- **Three-column Miller columns** interface (parent / current / preview)\n- **Owner-based navigation**: Clusters -\u003e Resource Types -\u003e Resources -\u003e Owned Resources -\u003e Containers\n- **Resource groups**: Dashboards, Workloads, Networking, Config, Storage, ArgoCD, Helm, Access Control, Cluster, Custom Resources\n- **Pinned resource types**: Pin individual resource types (built-in or CRD) into a \"Pinned\" section at the top of the list, below the dashboards. Configurable via `pinned_types` in config (legacy `pinned_groups` also supported) or interactively with `p` key (stored per-context or per named union set)\n- **CRD categories**: Discovered CRDs are grouped by API group name (e.g., `argoproj.io`, `longhorn.io`, `networking.istio.io`)\n- **Hide rarely used resources**: CSI internals, admission webhooks, APF, leases, runtime classes, and uncategorized core resources are hidden by default. Press `H` to surface them (dimmed) under their categories and an \"Advanced\" group (resets each launch)\n- **Hide individual resource types**: At the resource types level, open the action menu (`x`) on a type to hide or show it. Hidden types are saved per cluster context (or named union set) and stay hidden across restarts. Press `H` to reveal hidden types dimmed so you can un-hide them\n- **Expandable/collapsible resource groups** with `z`\n- **Fullscreen middle column** toggle with `Shift+F`\n- **Vim-style keybindings** throughout (fully customizable via config)\n- **Mouse support**: Click to navigate, scroll wheel scrolls the pane under the pointer, `Ctrl+Option+Y` toggles mouse capture, Shift+Drag for native terminal text selection\n\n### Cluster Management\n\n- **Multi-tab support**: Open multiple views side by side\n- **Multi-cluster/multi-context support** via merged kubeconfig loading\n- **Merged kubeconfig loading**: `~/.kube/config`, `~/.kube/config.d/*` (recursive, symlinks followed), `KUBECONFIG` env var, and `KUBECONFIG_DIR` env var.\n- **Union view**: Merge resources from multiple clusters into a single table with a `Context` column identifying the source, via `--union-context` (repeatable) or a named `--union-set` from config. See [Union View](docs/union-context.md).\n- **Cluster dashboard** when entering a context (configurable)\n- **Monitoring dashboard** with active Prometheus/Alertmanager alerts (`@` key), configurable endpoints per cluster\n- **API Explorer** for interactively browsing resource structure (`I` key) with recursive field browser\n- **Object Explorer** for drilling into the selected resource's live object (`O` key); arrays expand into indexed elements, so recursive status trees (e.g. `.status.steps[].steps[]`) are walkable\n- **Namespace selector** overlay with type-to-filter\n- **All-namespaces mode** (enabled by default)\n- **Local cluster management** — create, list, and delete `kind` clusters; create, list, start, stop, and delete `k3d` and `minikube` clusters (kind has no native start/stop) from inside lfk via the `Ctrl+N` manager overlay.\n\n### Resource Operations\n\n- **Read-only mode**: Lock a session against destructive actions (delete, edit, scale, restart, exec, port-forward, drain, etc.). Enable with `--read-only`, the `read_only: true` config field, per-context `clusters.\u003cname\u003e.read_only`, or the in-app `Ctrl+R` toggle (toggles the highlighted row's `[RO]` marker at the cluster picker; toggles the current tab inside a context). A `[RO]` badge in the title bar marks active sessions. See [Read-Only Mode](docs/usage.md#read-only-mode).\n- **Security dashboard**: Aggregated findings from Trivy, Kyverno, Kubescape, Falco, Gatekeeper, plus a built-in zero-dependency heuristic Pod-spec scanner. Auto-detects installed sources, shows a per-resource SEC badge, and probes lazily on first use. Enable/disable globally or per cluster via `security.enabled` / `clusters.\u003cname\u003e.security`. See [Security Dashboard](docs/security.md).\n- **Context-aware action menus**: logs, exec, attach, debug, scale, restart, delete, describe, edit, events, port-forward, vuln scan, PVC resize\n- **Custom user-defined actions**: Define custom shell commands per resource type in config\n- **Multi-select with bulk actions**: Select multiple resources with Space, range-select with Ctrl+Space, perform bulk delete, scale, restart, and ArgoCD bulk sync/refresh\n- **Resource sorting** by name, age, or status, remembered per resource kind for the session\n- **Filter and search**: Filter with `f`, search with `/` -- supports substring, regex (auto-detected), and fuzzy (`~` prefix) modes\n- **Abbreviated search**: Type `pvc`, `hpa`, `deploy` etc. to jump to resource types\n- **Command bar** (`:`) with vertical dropdown autocomplete: resource jumps (`:pod`, `:dep`), built-in commands (`:ns`, `:ctx`, `:set`, `:sort`, `:export`), kubectl with `:k`/`:kubectl` prefix and flag/namespace completion, shell commands (`:!`). Value positions (namespace, context, resource name, option, column, format) accept fuzzy matches; command names stay on prefix.\n- **Watch mode**: Auto-refresh resources every 2 seconds (enabled by default)\n- **Owner/controller navigation**: Jump to the owner of any resource with `o`\n- **Events view** with warnings-only filter toggle and duplicate-event grouping (`z`)\n- **Crash Investigator** — per-Pod tabbed view combining restart history, pod-scoped events, previous/current container logs, and container-scoped `describe` — accessible from the Pod action menu (`x` → `I`). Refresh with `Shift+R`.\n- **Traffic capture** — per-pod packet capture (kubectl-debug or kubeshark, auto-detected) with live decode and pcap export. Press `c` on a Pod or Service.\n\n### Preview and Editing\n\n- **YAML preview** in the right column with syntax highlighting\n- **Full-screen YAML viewer** with scrollable output, search, section folding (`Tab`/`z`), and in-place editing\n- **Resource details** summary in split preview (toggle with `Shift+P`)\n- **List status summary** band pinned at the bottom of the children pane (like the resource-usage footer) when hovering a resource type in the resource-type list — always shows the resource count, plus a colored status rollup for kinds with a health signal (ArgoCD Application health/sync, Pod phase, workload ready ratios, Node readiness, Namespace/PV/PVC phase, Flux \u0026 cert-manager Ready) — plus a generic `.status.phase` or `.status.conditions` rollup for any other kind that surfaces one — so you can confirm a whole list is healthy without drilling in\n- **Inline log viewer** with streaming, search, line numbers, word wrap, follow mode, timestamps toggle, previous container logs, container filter, tail-first loading, line jump, structured preview pane (`P`: parses the selected line as JSON or logfmt, falls back to plain text), and automatic reconnect across init-container transitions (stays attached as each init container finishes and the next one starts)\n- **Inline describe view** with scrollable output\n- **Secret viewing/editing** with decode toggle (`Ctrl+S`) and dedicated editor (`e`)\n- **Embedded terminal** (PTY mode) for exec and shell with tab switching — PTY keeps running in background when switching tabs\n\n### Resource Management\n\n- **Resource templates**: Create resources from 25+ built-in templates (`a`, `/` to search); includes a Custom Resource template as a starting point\n- **Port forwarding** from the action menu (with local port setting and browser open); manage active forwards via the Networking group\n- **Clipboard support**: Copy resource name (`y`), open copy-as picker (`Y`: YAML / JSON / Table), paste/apply from clipboard (`Ctrl+P`), paste into search/filter boxes (`Cmd+V` / `Ctrl+Shift+V`)\n- **Bookmarks**: Save favorite resource paths for quick navigation\n- **Orphan detection**: Press `Shift+Z` (or run bare `:orphans`) to open the cluster-wide orphan overview across 11 kinds — Pods, Secrets, ConfigMaps, Services, PVCs, HPAs, PDBs, NetworkPolicies, Roles, ClusterRoles, RoleBindings, ClusterRoleBindings. Per-list filters are still available via the filter-preset overlay (`.`) on each kind, or jump straight to a filtered view with `:orphans \u003ckind\u003e` (e.g., `:orphans secrets`). A strict / lenient toggle (`s`) flips between \"truly unused\" and \"currently idle but referenced by workload templates\" (e.g. CronJob between firings). Auto-excludes Helm release Secrets, ServiceAccount tokens, owner-managed resources, and `kube-root-ca.crt`.\n- **Session persistence**: Remembers last context/namespace/resource across restarts\n\n### Integrations\n\n- **ArgoCD integration**: Browse Applications, sync, terminate sync, refresh, view managed resources\n- **Argo Workflows integration**: Suspend/resume, stop/terminate, resubmit Workflows; submit from WorkflowTemplates; suspend/resume CronWorkflows\n- **Helm integration**: Browse releases, view managed resources, uninstall\n- **KEDA integration**: Pause/unpause ScaledObjects and ScaledJobs\n- **External Secrets integration**: Force refresh ExternalSecrets, ClusterExternalSecrets, and PushSecrets\n- **CRD discovery**: Automatically discovers installed CRDs and groups them by API group\n\n### Customization\n\n- **460+ built-in color schemes** from [ghostty themes](https://github.com/ghostty-org/ghostty): Tokyonight, Catppuccin, Dracula, Nord, Rose Pine, Gruvbox, and many more. Transparent background support.\n- **Runtime theme switching**: Press `T` to preview and switch themes without restarting\n- **Auto dark/light mode**: configure a dark and a light scheme; lfk switches automatically when the OS appearance changes (requires CSI 996/2031 terminal support: Ghostty, kitty, Contour, …)\n- **Custom color themes** via config file (Tokyonight theme by default)\n- **Configurable keybindings** for direct actions\n- **Configurable search abbreviations**\n- **Configurable filter presets** per resource type (extend built-in quick filters with `.`)\n- **Configurable icon modes**: `auto` (default, detects Nerd Font-capable terminals like Ghostty/Kitty/WezTerm), `unicode`, `nerdfont` (Material Design Icons), `simple` (ASCII labels), `emoji`, or `none`. Override at runtime with the `LFK_ICONS` environment variable.\n- **Configurable table columns** (global, per-resource-type, and per-cluster)\n- **Column visibility toggle** overlay to show/hide and reorder columns at runtime (`,` key)\n- **Startup tips**: Random tips on startup to help discover features (configurable via `tips: false`)\n- **Status-aware coloring**: Running=green, Pending=yellow, Failed=red\n- **Resource usage metrics**: CPU/MEM with color-coded bars in dashboard\n\n## Installation\n\n```bash\n# Homebrew (macOS / Linux)\nbrew install janosmiko/tap/lfk\n\n# Windows: Scoop\nscoop bucket add janosmiko https://github.com/janosmiko/scoop-bucket \u0026\u0026 scoop install lfk\n# or: winget install janosmiko.lfk\n# or: choco install lfk\n\n# Linux: Arch / AUR\nyay -S lfk-bin\n\n# Linux: Debian / Ubuntu (Cloudsmith APT)\ncurl -1sLf 'https://dl.cloudsmith.io/public/janosmiko/lfk/setup.deb.sh' | sudo -E bash \u0026\u0026 sudo apt update \u0026\u0026 sudo apt install lfk\n\n# Linux: Fedora / RHEL (Cloudsmith DNF)\ncurl -1sLf 'https://dl.cloudsmith.io/public/janosmiko/lfk/setup.rpm.sh' | sudo -E bash \u0026\u0026 sudo dnf install lfk\n\n# Go\ngo install github.com/janosmiko/lfk@latest\n\n# Nix\nnix run github:janosmiko/lfk\n```\n\n`kubectl` is required and must be configured. `helm` and `trivy` are optional (Helm management, image vulnerability scanning).\n\n\u003e See [docs/installation.md](docs/installation.md) for Windows, Docker, NixOS/home-manager flake input, building from source, and the full list of optional CLI dependencies.\n\n## Usage\n\n```bash\n# Use default kubeconfig (~/.kube/config + ~/.kube/config.d/*)\nlfk\n\n# Start in a specific context / namespace\nlfk --context my-cluster -n kube-system\n\n# Use a specific kubeconfig\nlfk --kubeconfig /path/to/kubeconfig\nKUBECONFIG=/path/to/config1:/path/to/config2 lfk\n\n# Use a custom directory for kubeconfigs (repeat the flag for multiple)\nlfk --kubeconfig-dir /path/to/configs/\nlfk --kubeconfig-dir /team-a/configs --kubeconfig-dir /team-b/configs\nKUBECONFIG_DIR=/path/to/configs/ lfk\nKUBECONFIG_DIR=/team-a/configs:/team-b/configs lfk\n```\n\n\u003e See [docs/usage.md](docs/usage.md) for the full CLI reference and runtime tuning options: mouse capture, no-color mode, read-only mode, watch-mode interval, discovery cache (`KUBECACHEDIR`), and Secret lazy loading.\n\n## Navigation Hierarchy\n\n```\nClusters (kubeconfig contexts)\n  +-- Resource Types (grouped: Workloads, Networking, Config, Storage, ArgoCD, Helm, ...)\n        +-- Resources (e.g., individual Deployments)\n              +-- Owned Resources (Pods via ownerReferences, Jobs for CronJobs, etc.)\n                    +-- Containers (for Pods)\n```\n\nNamespaces are **not** a navigation level. The current namespace is shown in the top-right corner and can be changed by pressing `\\`. All-namespaces mode is enabled by default (toggle with `A`). Inside the namespace selector, press `Space` to include namespaces, `Tab` to exclude them (negative selection — shows all except the marked namespaces, each prefixed with `!`), `A` to reset to all-namespaces mode, or `R` to refresh the list from the cluster.\n\n### Owner Resolution\n\n- **Deployments** show their Pods (resolved through ReplicaSets, flattened)\n- **StatefulSets / DaemonSets / Jobs** show their Pods directly\n- **CronJobs** show their Jobs\n- **Services** show Pods matching the service selector\n- **ArgoCD Applications** show managed resources (from status or label discovery)\n- **Helm Releases** show managed resources (via `app.kubernetes.io/instance` label)\n- **Pods** show their Containers\n- **ConfigMaps / Secrets / Ingresses / PVCs** show details preview (no children)\n\n## Keybindings\n\n\u003e For the complete keybinding reference (YAML view, log viewer, describe, diff, exec mode, and all sub-modes), see [docs/keybindings.md](docs/keybindings.md). Press `?` or `F1` in-app for the built-in help screen.\n\n### Navigation\n\n| Key | Action |\n|---|---|\n| `h` / `Left` | Navigate to parent level |\n| `l` / `Right` | Navigate into selected item |\n| `j` / `Down` | Move cursor down |\n| `k` / `Up` | Move cursor up |\n| `gg` / `Home` | Jump to top of list |\n| `G` / `End` | Jump to bottom of list |\n| `Ctrl+D` / `Ctrl+U` / `Shift+↓` / `Shift+↑` | Half-page scroll down/up |\n| `Ctrl+F` / `Ctrl+B` / `PgDn` / `PgUp` | Full-page scroll down/up |\n| `Enter` | Open full-screen YAML view / navigate into |\n| `z` | Toggle expand/collapse all resource groups / toggle event grouping (Events view) |\n| `p` | Pin/unpin resource type (at resource types level) |\n| `x` | At resource types level: pin/unpin or hide/show the selected resource type (saved per cluster context / union set) |\n| `H` | Toggle rarely used + hidden resource types (CSI internals, webhooks, APF, leases, advanced core); revealed types shown dimmed |\n| `0` / `1` / `2` | Jump to clusters / types / resources level |\n| `J` / `K` | Scroll preview pane down/up |\n| `o` | Jump to owner/controller of selected resource |\n| `Backspace` | Jump back through teleport history (owner / port-forward / orphan / finding / mark jumps) |\n\n### Views and Modes\n\n| Key | Action |\n|---|---|\n| `?` | Toggle help screen |\n| `f` | Filter items in current view |\n| `/` | Search and jump to match |\n| `n` / `N` | Next / previous search match |\n| `P` | Toggle between details and YAML preview |\n| `M` | Toggle resource relationship map |\n| `F` | Toggle fullscreen (middle column or dashboard) |\n| `.` | Quick filter presets |\n| `!` | Error log (V/v select, y copy, f fullscreen) |\n| `Ctrl+S` | Toggle secret value visibility |\n| `Ctrl+G` | Finalizer search and remove |\n| `I` | API Explorer (browse resource structure interactively) |\n| `O` | Object Explorer (browse the selected resource's live object as a drill-in tree) |\n| `U` | RBAC permissions browser (can-i) |\n| `T` | Open theme selector |\n| `:` | Command bar: resource jumps (`:pod`, `:dep`), built-ins (`:ns`, `:ctx`, `:set`, `:sort`, `:export`), kubectl (`:k get pod`), shell (`:! cmd`) |\n| `w` | Toggle watch mode (auto-refresh) |\n| `,` | Column visibility toggle (show/hide and reorder columns) |\n| `\u003e` / `\u003c` | Sort by next / previous column |\n| `=` | Toggle sort direction (ascending/descending) |\n| `-` | Reset sort to default (Name ascending) |\n| `W` | Save resource to file / toggle warnings-only (Events) |\n| `Ctrl+T` | Cycle terminal mode (pty / exec / mux — mux skipped without tmux/zellij) |\n| `@` | Monitoring overview (active Prometheus alerts) |\n| `Q` | Namespace resource quota dashboard |\n\n### Actions\n\n| Key | Action |\n|---|---|\n| `x` | Action menu (logs, exec, describe, edit, delete, scale, port-forward, etc.) |\n| `\\` / `A` | Namespace selector / toggle all-namespaces |\n| `L` | View logs |\n| `v` | Describe resource |\n| `D` / `X` | Delete / force delete |\n| `y` / `Y` | Copy name / open copy-as picker (YAML / JSON / Table) |\n| `Space` | Toggle multi-selection (bulk actions via `x`) |\n| `m\u003cslot\u003e` / `'\u003cslot\u003e` | Set / jump to bookmark (lowercase = context-aware, uppercase = context-free) |\n| `t` / `]` / `[` | New tab / next / previous |\n\nAll views (YAML, logs, describe, diff, exec) use vim-style navigation (`j`/`k`, `gg`/`G`, `Ctrl+D`/`Ctrl+U`, `/` search, `v`/`V` visual selection). See [docs/keybindings.md](docs/keybindings.md) for the full reference.\n\n\u003e For the complete command bar reference (built-in commands, shell/kubectl execution, resource jumps), see [docs/commands.md](docs/commands.md).\n\n## Configuration\n\nCreate `~/.config/lfk/config.yaml` to customize the application. All fields are optional; only the values you specify will override the defaults.\n\n\u003e For the complete configuration reference, see [docs/config-reference.md](docs/config-reference.md) and [docs/config-example.yaml](docs/config-example.yaml).\n\n### Quick Start\n\n```yaml\n# Color scheme (press T in-app to browse 460+ themes with live preview)\n# Auto dark/light mode — Ghostty-style \"dark:X,light:Y\" syntax switches the\n# scheme when the OS appearance changes (CSI 996/2031; Ghostty, kitty \u003e= 0.27, …)\ncolorscheme: \"dark:catppuccin-mocha,light:catppuccin-latte\"\n\n# Use terminal's own background\ntransparent_background: true\n\n# Icon mode: \"auto\" (default, detects Nerd Font terminals like Ghostty/Kitty/WezTerm),\n# \"unicode\", \"nerdfont\" (requires Nerd Font in terminal), \"simple\" (ASCII labels),\n# \"emoji\", or \"none\". The LFK_ICONS env var overrides this setting.\nicons: auto\n\n# Disable mouse capture (allows native terminal text selection)\nmouse: false\n\n# Custom keybinding overrides (only specify what you want to change)\nkeybindings:\n  logs: \"L\"\n  describe: \"v\"\n  delete: \"D\"\n\n# Search abbreviations (extend built-in abbreviations for :pod, :dep, etc.)\nabbreviations:\n  myapp: myapplications\n```\n\n### Search Modes\n\nAll search and filter inputs support three modes, auto-detected from the query string:\n\n| Mode | Syntax | Example |\n|---|---|---|\n| Substring | plain text | `nginx` |\n| Regex | auto-detected | `err[0-9]+` |\n| Fuzzy | `~` prefix | `~deplymnt` |\n| Literal | `\\` prefix | `\\err.*` |\n\n**Clipboard paste**: All search, filter, and command bar inputs accept pasted text (`Cmd+V` on macOS, `Ctrl+Shift+V` on Linux). Multiline paste shows a confirmation dialog.\n\n**Recall previous queries**: While the `f` filter or `/` search input is open, press `Up` / `Down` to cycle through previous queries. `/` and `f` share one history (the matcher and matched fields are identical between them), kept separate from the `:` command bar. The log viewer's `/` search has its own history because it matches raw log lines (substring/regex over arbitrary text) rather than resource names — pooling it would surface irrelevant entries. All three persist across sessions under `$XDG_STATE_HOME/lfk/` (default `~/.local/state/lfk/`) — `query-history` for explorer `/` and `f`, `log-search-history` for the log viewer's `/`, and `history` for the command bar.\n\n## Contributing\n\nContributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) for prerequisites, development setup, build/test commands, project layout, and the PR submission flow.\n\n## License\n\nApache License 2.0 - see [LICENSE](LICENSE) for details.\n\n## Star History\n\n\u003ca href=\"https://www.star-history.com/?repos=janosmiko%2Flfk\u0026type=date\u0026legend=top-left\"\u003e\n \u003cpicture\u003e\n   \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://api.star-history.com/chart?repos=janosmiko/lfk\u0026type=date\u0026theme=dark\u0026legend=top-left\" /\u003e\n   \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://api.star-history.com/chart?repos=janosmiko/lfk\u0026type=date\u0026legend=top-left\" /\u003e\n   \u003cimg alt=\"Star History Chart\" src=\"https://api.star-history.com/chart?repos=janosmiko/lfk\u0026type=date\u0026legend=top-left\" /\u003e\n \u003c/picture\u003e\n\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanosmiko%2Flfk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjanosmiko%2Flfk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanosmiko%2Flfk/lists"}