[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-95989":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":9,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":14,"starSnapshotCount":14,"syncStatus":21,"lastSyncTime":9,"discoverSource":22},95989,"sofka","nklmilojevic\u002Fsofka","nklmilojevic","A Kubernetes TUI, reimagined in Rust - built on kube-rs and ratatui, async-first from the ground up.",null,"https:\u002F\u002Fgithub.com\u002Fnklmilojevic\u002Fsofka","Rust",570,27,0,8.34,false,"main","2026-09-21 02:04:29","# sofka\n\nA Kubernetes TUI written in Rust, on [`kube-rs`](https:\u002F\u002Fkube.rs) and\n[`ratatui`](https:\u002F\u002Fratatui.rs). Async everywhere, so the UI never blocks on the\ncluster.\n\n**[sofka.rs](https:\u002F\u002Fsofka.rs)** - the website, with a watchable tour of a real\nsession ([sofka.rs\u002F#play](https:\u002F\u002Fsofka.rs\u002F#play)).\n\n[![A one-minute sofka session: filtering to a crashloop, explaining why it's broken, following its logs, and inspecting Helm releases](docs\u002Fdemo.gif)](https:\u002F\u002Fsofka.rs\u002F#play)\n\n## Why \"sofka\"\n\n\u003Cimg src=\"docs\u002Fsophie.png\" alt=\"Sophie, a Russian Blue, watching the screen with visible suspicion\" align=\"right\" width=\"220\">\n\nThat's Sophie, a Russian Blue. She sits behind the monitor and watches the\nscreen. Constantly, not sometimes. She has the narrow-eyed look of someone who\nhas seen a pod in `CrashLoopBackOff`. She catches every state change and doesn't\nget distracted. She is, in effect, a cluster watchman that is a cat.\n\n`sofka` is the Serbian short form of Sophia, which means \"wisdom\". A good cluster\nTUI and a good cat both watch things closely, and both know when something is\nwrong.\n\n\u003Cbr clear=\"right\">\n\n## What it does\n\nsofka is a Kubernetes terminal interface inspired by\n[k9s](https:\u002F\u002Fgithub.com\u002Fderailed\u002Fk9s). It uses a shared object pipeline. Both\nprograms support built-in and custom resources. The main functions are:\n\n- **Custom resource browsing** - one generic render pipeline, built-in columns\n  for common kinds, NAME\u002FAGE for the rest, and `enter` on a CRD drills into its\n  custom resources.\n- **Flux CD built in** - `t` suspends, resumes, and reconciles through native API\n  patches. No `flux` binary. Plus a native Helm inspector that decodes release\n  Secrets itself.\n- **Argo CD built in** - `t` suspends, resumes, and syncs ArgoCD Applications.\n  ApplicationSets support suspend and resume. These actions use native API\n  patches. No `argocd` binary.\n- **It tells you why something is broken** - `X` opens a deterministic,\n  evidence-based incident view. No AI, no external service.\n- **Bulk actions** - `space` marks rows for delete, kill, or Flux actions across\n  many resources at once.\n- **Port-forwards run in the background** - starting one doesn't freeze the TUI,\n  and `:pf` manages them all.\n- **Guardrails and read-only mode** - \"never delete in prod\" is enforced, not\n  remembered.\n- **Skins** - Catppuccin, Gruvbox, Solarized, Nord, Dracula, Tokyo Night, One\n  Dark, Rosé Pine, Rosé Pine Dawn, Monokai, Flexoki, with auto dark\u002Flight\n  detection.\n\nThe [full feature list](docs\u002Ffeatures.md) is long. So is the\n[comparison with k9s](docs\u002Fvs-k9s.md), with shared functions and design differences.\n\n## Installation\n\nEvery [release](https:\u002F\u002Fgithub.com\u002Fnklmilojevic\u002Fsofka\u002Freleases) ships prebuilt\nbinaries for macOS (aarch64\u002Fx86_64) and Linux (aarch64\u002Fx86_64).\n\n```sh\nbrew install nklmilojevic\u002Fsofka\u002Fsofka   # Homebrew (macOS\u002FLinux)\nnix run github:nklmilojevic\u002Fsofka       # Nix, nothing to install\ncargo install sofka                     # Cargo\n```\n\nOr build from source: `cargo build --release` (see\n[Development](docs\u002Farchitecture.md#development)).\n\n### macOS: \"cannot be opened because the developer cannot be verified\"\n\nThe release binaries aren't signed or notarized yet, so Gatekeeper refuses a\ntarball you downloaded in a browser. Nothing is broken. Clear the quarantine flag\nonce:\n\n```sh\nxattr -d com.apple.quarantine sofka\n```\n\n(Or right-click the binary in Finder, pick Open, confirm once.) Signing and\nnotarization are on the [roadmap](docs\u002Froadmap.md).\n\n## Usage\n\n```\nsofka [RESOURCE] [-n NAMESPACE] [-A] [--context NAME] [--kubeconfig PATH] [--readonly | --write]\n\n  RESOURCE          resource to open (alias\u002Fplural\u002Fkind), default: pods\n  -n, --namespace   namespace to start in\n  -A, --all-namespaces\n  --context         kubeconfig context to start in (default: current context)\n  --kubeconfig      kubeconfig file to use (sets $KUBECONFIG for the session)\n  --allow-v1-client-cert  allow X.509 v1 client certificates for this run\n  --readonly        disable every mutating action for the session\n  --write           force write mode, overriding any config `readonly`\n```\n\n`--readonly` and `--write` set the mode for the whole session and win over the\nconfig `readonly` option, including per-cluster and per-context overrides, on\nevery `:ctx` switch. With no flag, switching into a context whose config sets\n`readonly = true` enables read-only mode (shown as `[read-only]` in the header),\nand switching away restores write mode.\n\nHeadless modes need no TTY and double as CI smoke tests:\n\n```sh\nsofka --check                # connect, run discovery, print a summary, exit\nsofka pods --snapshot        # render one frame of a resource view to stdout\nsofka dp -A --snapshot       # deployments, all namespaces\nsofka info                   # runtime diagnostics: build, config, discovery, latency, dirs\nsofka info --offline         # the same report without connecting to a cluster\n```\n\n### Keys\n\nThe essentials. `?` in the app shows everything, or see the\n[full key reference](docs\u002Fkeys.md).\n\n| Key                  | Action                                                                                            |\n| -------------------- | ------------------------------------------------------------------------------------------------- |\n| `:`                  | command palette - fuzzy over kinds, commands, bookmarks, workspaces (`:deploy social` also works) |\n| `\u002F`                  | filter: fuzzy · `\"exact\"` · `\u002Fregex\u002F` · `!inverse` · `-l`\u002F`-f` selectors · `status=X` `age\u003C2h`    |\n| `enter` \u002F `esc`      | drill down \u002F go back                                                                              |\n| `j`\u002F`k`, `g`\u002F`G`     | navigate                                                                                          |\n| `ctrl-f` \u002F `ctrl-b`  | page forward \u002F back (also `PgDn` \u002F `PgUp`)                                                        |\n| `n` \u002F `0` \u002F `:ctx`   | namespace switcher \u002F all namespaces \u002F context switcher                                            |\n| `space`              | mark row for bulk actions                                                                         |\n| `y` \u002F `d` \u002F `E`      | YAML \u002F describe \u002F live events                                                                     |\n| `l` \u002F `L`            | logs \u002F VictoriaLogs history                                                                       |\n| `X` \u002F `T`            | explain why it's unhealthy \u002F state-change timeline                                                |\n| `s` \u002F `e` \u002F `a`      | shell or scale \u002F edit in `$EDITOR` \u002F attach                                                       |\n| `f`                  | port-forward - port picker from manifest, `●` marks active forwards (`:pf` manages them)          |\n| `t`                  | Flux\u002FArgoCD menu · CronJob trigger · pod file transfer                                            |\n| `r` \u002F `i`            | rollout restart \u002F set container image                                                             |\n| `ctrl-d` \u002F `ctrl-k`  | delete \u002F force-delete (marked rows, or current)                                                   |\n| `S` \u002F `w` \u002F `ctrl-e` | sort picker \u002F wide columns \u002F compact mode                                                         |\n| `?` \u002F `:q`           | help \u002F quit                                                                                       |\n\n## Configuration\n\n`$XDG_CONFIG_HOME\u002Fsofka\u002Fconfig.toml` (or `~\u002F.config\u002Fsofka\u002Fconfig.toml`). All\noptional - an empty config behaves like no config. `:reload` re-reads it live.\n\n```toml\ndefault_namespace = \"kube-system\"\ndefault_resource  = \"deployments\"\nreadonly          = false\nfavorite_namespaces = [\"kube-system\", \"monitoring\"]\n\n[aliases]\ndep = \"deployments\"\n\n[skin]\nname = \"gruvbox-dark\"   # omit to auto-detect dark\u002Flight\n```\n\nAny option can be overridden per cluster or per kubeconfig context, so prod can\nbe read-only in a light skin while everything else stays as is. See the\n[configuration reference](docs\u002Fconfiguration.md) for the rest.\n\n## Docs\n\n| Doc                                            | What's in it                                                |\n| ---------------------------------------------- | ----------------------------------------------------------- |\n| [Features](docs\u002Ffeatures.md)                   | the complete feature list                                   |\n| [vs k9s](docs\u002Fvs-k9s.md)                       | shared functions and design differences                     |\n| [Performance benchmark](docs\u002Fbenchmark-k9s.md) | measured TUI latency, memory use, and binary size           |\n| [Keys](docs\u002Fkeys.md)                           | full keymap, per-view keys                                  |\n| [Configuration](docs\u002Fconfiguration.md)         | every config section, per-cluster\u002Fper-context overrides     |\n| [Views and thresholds](docs\u002Fviews.md)          | custom columns, CRD printer columns, coloring bands         |\n| [Plugins](docs\u002Fplugins.md)                     | plugins, bookmarks, workspaces, saved forwards              |\n| [Safety](docs\u002Fsafety.md)                       | read-only mode, guardrails, `:can-i`, action journal        |\n| [Providers](docs\u002Fproviders.md)                 | right-sizing, VictoriaLogs, fleet dashboard                 |\n| [Debugging](docs\u002Fdebugging.md)                 | explain, timeline, diff, notifications, debug pods, bundles |\n| [Architecture](docs\u002Farchitecture.md)           | module layout, data flow, dev loop, release process         |\n| [Roadmap](docs\u002Froadmap.md)                     | milestone status                                            |\n\n## License\n\nDual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your\noption - the Rust ecosystem standard.\n","sofka 是一款基于 Rust 构建的 Kubernetes 终端用户界面（TUI），专为高效、实时的集群交互设计。它依托 kube-rs 和 ratatui 库，采用全异步架构，确保 UI 响应不因 API 调用而阻塞；原生集成 Flux CD 与 Argo CD 管理能力（如暂停\u002F恢复\u002F同步），内置 Helm 发布解析、故障根因诊断视图（X 键）、批量操作、后台端口转发及多主题皮肤支持。适用于 SRE、平台工程师及 DevOps 工程师在生产或开发环境中快速巡检、调试和管理 Kubernetes 资源，尤其适合偏好终端工作流、重视响应性与操作安全性的团队。",2,"trending"]